diff --git a/devstack/plugin.sh b/devstack/plugin.sh index e4f1616..bb3d5df 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -47,8 +47,6 @@ function _install_skyline_console { make package source $DEST/skyline-apiserver/.venv/bin/activate pip install --force-reinstall dist/skyline_console-*.whl - source $DEST/skyline-apiserver/libs/skyline-nginx/.venv/bin/activate - pip install --force-reinstall dist/skyline_console-*.whl deactivate popd } diff --git a/libs/skyline-config/Makefile b/libs/skyline-config/Makefile deleted file mode 100644 index da8cf40..0000000 --- a/libs/skyline-config/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -PYTHON ?= python3 -PY_FILES := $(shell git ls-files -- *.py | xargs) - - -.PHONY: all -all: install fmt lint test package - - -.PHONY: venv -venv: - poetry env use $(PYTHON) - - -.PHONY: install -install: venv - poetry run pip install -U pip setuptools'<58.0.0' - poetry install -vvv - - -.PHONY: package -package: - poetry build - - -.PHONY: fmt -fmt: - poetry run isort $(PY_FILES) - poetry run black --config ../../pyproject.toml $(PY_FILES) - poetry run add-trailing-comma --py36-plus --exit-zero-even-if-changed $(PY_FILES) - - -.PHONY: lint -lint: - poetry run mypy --strict --config-file=../../mypy.ini $(PY_FILES) - poetry run isort --check-only --diff $(PY_FILES) - poetry run black --check --diff --color --config ../../pyproject.toml $(PY_FILES) - poetry run flake8 --config ../../.flake8 $(PY_FILES) - - -.PHONY: test -test: - poetry run pytest - - -.PHONY: clean -clean: - rm -rf .venv dist htmlcov .coverage diff --git a/libs/skyline-config/poetry.lock b/libs/skyline-config/poetry.lock deleted file mode 100644 index 4d09f33..0000000 --- a/libs/skyline-config/poetry.lock +++ /dev/null @@ -1,785 +0,0 @@ -[[package]] -name = "add-trailing-comma" -version = "2.1.0" -description = "Automatically add trailing commas to calls and literals" -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -tokenize-rt = ">=3.0.1" - -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "black" -version = "21.9b0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -regex = ">=2020.1.8" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.2)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "click" -version = "7.1.2" -description = "Composable command line interface toolkit" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "colorama" -version = "0.4.4" -description = "Cross-platform colored terminal text." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "coverage" -version = "6.3.2" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "execnet" -version = "1.9.0" -description = "execnet: rapid multi-Python deployment" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -testing = ["pre-commit"] - -[[package]] -name = "flake8" -version = "3.9.2" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - -[[package]] -name = "immutables" -version = "0.16" -description = "Immutable Collections" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)", "mypy (>=0.910)", "pytest (>=6.2.4,<6.3.0)"] - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "isort" -version = "5.9.3" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.6.1,<4.0" - -[package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mimesis" -version = "4.1.3" -description = "Mimesis: fake data generator." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mypy" -version = "0.910" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -mypy-extensions = ">=0.4.3,<0.5.0" -toml = "*" -typing-extensions = ">=3.7.4" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<1.5.0)"] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "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 = "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-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pydantic" -version = "1.8.2" -description = "Data validation and settings management using python 3.6 type hinting" -category = "main" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -typing-extensions = ">=3.7.4.3" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pyflakes" -version = "2.3.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pyparsing" -version = "3.0.8" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["railroad-diagrams", "jinja2"] - -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "2.12.1" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -coverage = ">=5.2.1" -pytest = ">=4.6" -toml = "*" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-forked" -version = "1.4.0" -description = "run tests in isolated forked subprocesses" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -py = "*" -pytest = ">=3.10" - -[[package]] -name = "pytest-html" -version = "3.1.1" -description = "pytest plugin for generating HTML reports" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "1.11.0" -description = "pytest plugin for test session metadata" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.dependencies] -pytest = ">=2.9.0" - -[[package]] -name = "pytest-xdist" -version = "2.4.0" -description = "pytest xdist plugin for distributed testing and loop-on-failing modes" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -execnet = ">=1.1" -pytest = ">=6.0.0" -pytest-forked = "*" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - -[[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 = "regex" -version = "2022.4.24" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "tokenize-rt" -version = "4.2.1" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.2.3" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "types-pyyaml" -version = "5.4.10" -description = "Typing stubs for PyYAML" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "typing-extensions" -version = "4.2.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[metadata] -lock-version = "1.1" -python-versions = "^3.8" -content-hash = "76408354af8235e026df3838d9463ec8940efc3d4a3c4f19c2c0bf32048f9d3e" - -[metadata.files] -add-trailing-comma = [ - {file = "add_trailing_comma-2.1.0-py2.py3-none-any.whl", hash = "sha256:f462403aa2e997e20855708edb57536d1d3310d5c5fac7e80542578eb47fdb10"}, - {file = "add_trailing_comma-2.1.0.tar.gz", hash = "sha256:f9864ffbc12ea4e54916a356d57341ab58f612867c2ad453339c51004807e8ce"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -black = [ - {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, - {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -coverage = [ - {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, - {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, - {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, - {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, - {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, - {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, - {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, - {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, - {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, - {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, - {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, - {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, - {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, -] -execnet = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -immutables = [ - {file = "immutables-0.16-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:acbfa79d44228d96296279068441f980dc63dbed52522d9227ff9f4d96c6627e"}, - {file = "immutables-0.16-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c9ed003eacb92e630ef200e31f47236c2139b39476894f7963b32bd39bafa3"}, - {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a396314b9024fa55bf83a27813fd76cf9f27dce51f53b0f19b51de035146251"}, - {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a2a71678348fb95b13ca108d447f559a754c41b47bd1e7e4fb23974e735682d"}, - {file = "immutables-0.16-cp36-cp36m-win32.whl", hash = "sha256:064001638ab5d36f6aa05b6101446f4a5793fb71e522bc81b8fc65a1894266ff"}, - {file = "immutables-0.16-cp36-cp36m-win_amd64.whl", hash = "sha256:1de393f1b188740ca7b38f946f2bbc7edf3910d2048f03bbb8d01f17a038d67c"}, - {file = "immutables-0.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcf678a3074613119385a02a07c469ec5130559f5ea843c85a0840c80b5b71c6"}, - {file = "immutables-0.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a307eb0984eb43e815dcacea3ac50c11d00a936ecf694c46991cd5a23bcb0ec0"}, - {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a58825ff2254e2612c5a932174398a4ea8fbddd8a64a02c880cc32ee28b8820"}, - {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:798b095381eb42cf40db6876339e7bed84093e5868018a9e73d8e1f7ab4bb21e"}, - {file = "immutables-0.16-cp37-cp37m-win32.whl", hash = "sha256:19bdede174847c2ef1292df0f23868ab3918b560febb09fcac6eec621bd4812b"}, - {file = "immutables-0.16-cp37-cp37m-win_amd64.whl", hash = "sha256:9ccf4c0e3e2e3237012b516c74c49de8872ccdf9129739f7a0b9d7444a8c4862"}, - {file = "immutables-0.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d59beef203a3765db72b1d0943547425c8318ecf7d64c451fd1e130b653c2fbb"}, - {file = "immutables-0.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0020aaa4010b136056c20a46ce53204e1407a9e4464246cb2cf95b90808d9161"}, - {file = "immutables-0.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edd9f67671555af1eb99ad3c7550238487dd7ac0ac5205b40204ed61c9a922ac"}, - {file = "immutables-0.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:298a301f85f307b4c056a0825eb30f060e64d73605e783289f3df37dd762bab8"}, - {file = "immutables-0.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b779617f5b94486bfd0f22162cd72eb5f2beb0214a14b75fdafb7b2c908ed0cb"}, - {file = "immutables-0.16-cp38-cp38-win32.whl", hash = "sha256:511c93d8b1bbbf103ff3f1f120c5a68a9866ce03dea6ac406537f93ca9b19139"}, - {file = "immutables-0.16-cp38-cp38-win_amd64.whl", hash = "sha256:b651b61c1af6cda2ee201450f2ffe048a5959bc88e43e6c312f4c93e69c9e929"}, - {file = "immutables-0.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa7bf572ae1e006104c584be70dc634849cf0dc62f42f4ee194774f97e7fd17d"}, - {file = "immutables-0.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50793a44ba0d228ed8cad4d0925e00dfd62ea32f44ddee8854f8066447272d05"}, - {file = "immutables-0.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799621dcdcdcbb2516546a40123b87bf88de75fe7459f7bd8144f079ace6ec3e"}, - {file = "immutables-0.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7bcf52aeb983bd803b7c6106eae1b2d9a0c7ab1241bc6b45e2174ba2b7283031"}, - {file = "immutables-0.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:734c269e82e5f307fb6e17945953b67659d1731e65309787b8f7ba267d1468f2"}, - {file = "immutables-0.16-cp39-cp39-win32.whl", hash = "sha256:a454d5d3fee4b7cc627345791eb2ca4b27fa3bbb062ccf362ecaaa51679a07ed"}, - {file = "immutables-0.16-cp39-cp39-win_amd64.whl", hash = "sha256:2505d93395d3f8ae4223e21465994c3bc6952015a38dc4f03cb3e07a2b8d8325"}, - {file = "immutables-0.16.tar.gz", hash = "sha256:d67e86859598eed0d926562da33325dac7767b7b1eff84e232c22abea19f4360"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -isort = [ - {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, - {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mimesis = [ - {file = "mimesis-4.1.3.tar.gz", hash = "sha256:90f36c21c1bb9944afc17178eb5868b0c85aa1fe49eb04bcbdafafd1ad4ca2ba"}, -] -mypy = [ - {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, - {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, - {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, - {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, - {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, - {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, - {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, - {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, - {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, - {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, - {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, - {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, - {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, - {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, - {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, - {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, - {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, - {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, - {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, - {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, - {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, - {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, - {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, -] -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"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -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-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pydantic = [ - {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"}, - {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"}, - {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"}, - {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"}, - {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"}, - {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"}, - {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"}, - {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"}, - {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, - {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pyparsing = [ - {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, - {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pytest-cov = [ - {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, - {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, -] -pytest-forked = [ - {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, - {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, -] -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-1.11.0.tar.gz", hash = "sha256:71b506d49d34e539cc3cfdb7ce2c5f072bea5c953320002c95968e0238f8ecf1"}, - {file = "pytest_metadata-1.11.0-py2.py3-none-any.whl", hash = "sha256:576055b8336dd4a9006dd2a47615f76f2f8c30ab12b1b1c039d99e834583523f"}, -] -pytest-xdist = [ - {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"}, - {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"}, -] -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"}, -] -regex = [ - {file = "regex-2022.4.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f86aef546add4ff1202e1f31e9bb54f9268f17d996b2428877283146bf9bc013"}, - {file = "regex-2022.4.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e944268445b5694f5d41292c9228f0ca46d5a32a67f195d5f8547c1f1d91f4bc"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8da3145f4b72f7ce6181c804eaa44cdcea313c8998cdade3d9e20a8717a9cb"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fd464e547dbabf4652ca5fe9d88d75ec30182981e737c07b3410235a44b9939"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:071bcb625e890f28b7c4573124a6512ea65107152b1d3ca101ce33a52dad4593"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c2de7f32fa87d04d40f54bce3843af430697aba51c3a114aa62837a0772f219"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a07e8366115069f26822c47732122ab61598830a69f5629a37ea8881487c107"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:036d1c1fbe69eba3ee253c107e71749cdbb4776db93d674bc0d5e28f30300734"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:af1e687ffab18a75409e5e5d6215b6ccd41a5a1a0ea6ce9665e01253f737a0d3"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:165cc75cfa5aa0f12adb2ac6286330e7229a06dc0e6c004ec35da682b5b89579"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:3e35c50b27f36176c792738cb9b858523053bc495044d2c2b44db24376b266f1"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:43ee0df35925ae4b0cc6ee3f60b73369e559dd2ac40945044da9394dd9d3a51d"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58521abdab76583bd41ef47e5e2ddd93b32501aee4ee8cee71dee10a45ba46b1"}, - {file = "regex-2022.4.24-cp310-cp310-win32.whl", hash = "sha256:275afc7352982ee947fc88f67a034b52c78395977b5fc7c9be15f7dc95b76f06"}, - {file = "regex-2022.4.24-cp310-cp310-win_amd64.whl", hash = "sha256:253f858a0255cd91a0424a4b15c2eedb12f20274f85731b0d861c8137e843065"}, - {file = "regex-2022.4.24-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:85b7ee4d0c7a46296d884f6b489af8b960c4291d76aea4b22fd4fbe05e6ec08e"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0da7ef160d4f3eb3d4d3e39a02c3c42f7dbcfce62c81f784cc99fc7059765f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f2e2cef324ca9355049ee1e712f68e2e92716eba24275e6767b9bfa15f1f478"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6165e737acb3bea3271372e8aa5ebe7226c8a8e8da1b94af2d6547c5a09d689d"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f6bd8178cce5bb56336722d5569d19c50bba5915a69a2050c497fb921e7cb0f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45b761406777a681db0c24686178532134c937d24448d9e085279b69e9eb7da4"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dfbadb7b74d95f72f9f9dbf9778f7de92722ab520a109ceaf7927461fa85b10"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9913bcf730eb6e9b441fb176832eea9acbebab6035542c7c89d90c803f5cd3be"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:68aed3fb0c61296bd6d234f558f78c51671f79ccb069cbcd428c2eea6fee7a5b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8e7d33f93cdd01868327d834d0f5bb029241cd293b47d51b96814dec27fc9b4b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:82b7fc67e49fdce671bdbec1127189fc979badf062ce6e79dc95ef5e07a8bf92"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c36906a7855ec33a9083608e6cd595e4729dab18aeb9aad0dd0b039240266239"}, - {file = "regex-2022.4.24-cp36-cp36m-win32.whl", hash = "sha256:b2df3ede85d778c949d9bd2a50237072cee3df0a423c91f5514f78f8035bde87"}, - {file = "regex-2022.4.24-cp36-cp36m-win_amd64.whl", hash = "sha256:dffd9114ade73137ab2b79a8faf864683dbd2dbbb6b23a305fbbd4cbaeeb2187"}, - {file = "regex-2022.4.24-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a0ef57cccd8089b4249eebad95065390e56c04d4a92c51316eab4131bca96a9"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12af15b6edb00e425f713160cfd361126e624ec0de86e74f7cad4b97b7f169b3"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f271d0831d8ebc56e17b37f9fa1824b0379221d1238ae77c18a6e8c47f1fdce"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37903d5ca11fa47577e8952d2e2c6de28553b11c70defee827afb941ab2c6729"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b747cef8e5dcdaf394192d43a0c02f5825aeb0ecd3d43e63ae500332ab830b0"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:582ea06079a03750b5f71e20a87cd99e646d796638b5894ff85987ebf5e04924"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa6daa189db9104787ff1fd7a7623ce017077aa59eaac609d0d25ba95ed251a0"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7dbc96419ef0fb6ac56626014e6d3a345aeb8b17a3df8830235a88626ffc8d84"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0fb6cb16518ac7eff29d1e0b0cce90275dfae0f17154165491058c31d58bdd1d"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bea61de0c688198e3d9479344228c7accaa22a78b58ec408e41750ebafee6c08"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:46cbc5b23f85e94161b093dba1b49035697cf44c7db3c930adabfc0e6d861b95"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:50b77622016f03989cd06ecf6b602c7a6b4ed2e3ce04133876b041d109c934ee"}, - {file = "regex-2022.4.24-cp37-cp37m-win32.whl", hash = "sha256:2bde99f2cdfd6db1ec7e02d68cadd384ffe7413831373ea7cc68c5415a0cb577"}, - {file = "regex-2022.4.24-cp37-cp37m-win_amd64.whl", hash = "sha256:66fb765b2173d90389384708e3e1d3e4be1148bd8d4d50476b1469da5a2f0229"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:709396c0c95b95045fac89b94f997410ff39b81a09863fe21002f390d48cc7d3"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a608022f4593fc67518c6c599ae5abdb03bb8acd75993c82cd7a4c8100eff81"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb7107faf0168de087f62a2f2ed00f9e9da12e0b801582b516ddac236b871cda"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aabc28f7599f781ddaeac168d0b566d0db82182cc3dcf62129f0a4fc2927b811"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92ad03f928675ca05b79d3b1d3dfc149e2226d57ed9d57808f82105d511d0212"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ba3c304a4a5d8112dbd30df8b3e4ef59b4b07807957d3c410d9713abaee9a8"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2acf5c66fbb62b5fe4c40978ddebafa50818f00bf79d60569d9762f6356336e"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c4d9770e579eb11b582b2e2fd19fa204a15cb1589ae73cd4dcbb63b64f3e828"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:02543d6d5c32d361b7cc468079ba4cddaaf4a6544f655901ba1ff9d8e3f18755"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:73ed1b06abadbf6b61f6033a07c06f36ec0ddca117e41ef2ac37056705e46458"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3241db067a7f69da57fba8bca543ac8a7ca415d91e77315690202749b9fdaba1"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d128e278e5e554c5c022c7bed410ca851e00bacebbb4460de546a73bc53f8de4"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1d53835922cd0f9b74b2742453a444865a70abae38d12eb41c59271da66f38d"}, - {file = "regex-2022.4.24-cp38-cp38-win32.whl", hash = "sha256:f2a5d9f612091812dee18375a45d046526452142e7b78c4e21ab192db15453d5"}, - {file = "regex-2022.4.24-cp38-cp38-win_amd64.whl", hash = "sha256:a850f5f369f1e3b6239da7fb43d1d029c1e178263df671819889c47caf7e4ff3"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bedb3d01ad35ea1745bdb1d57f3ee0f996f988c98f5bbae9d068c3bb3065d210"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8bf867ba71856414a482e4b683500f946c300c4896e472e51d3db8dfa8dc8f32"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b415b82e5be7389ec5ee7ee35431e4a549ea327caacf73b697c6b3538cb5c87f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dae5affbb66178dad6c6fd5b02221ca9917e016c75ee3945e9a9563eb1fbb6f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e65580ae3137bce712f505ec7c2d700aef0014a3878c4767b74aff5895fc454f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e9e983fc8e0d4d5ded7caa5aed39ca2cf6026d7e39801ef6f0af0b1b6cd9276"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad3a770839aa456ff9a9aa0e253d98b628d005a3ccb37da1ff9be7c84fee16"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed625205f5f26984382b68e4cbcbc08e6603c9e84c14b38457170b0cc71c823b"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c4fdf837666f7793a5c3cfa2f2f39f03eb6c7e92e831bc64486c2f547580c2b3"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ed26c3d2d62c6588e0dad175b8d8cc0942a638f32d07b80f92043e5d73b7db67"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f89d26e50a4c7453cb8c415acd09e72fbade2610606a9c500a1e48c43210a42d"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:97af238389cb029d63d5f2d931a7e8f5954ad96e812de5faaed373b68e74df86"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:be392d9cd5309509175a9d7660dc17bf57084501108dbff0c5a8bfc3646048c3"}, - {file = "regex-2022.4.24-cp39-cp39-win32.whl", hash = "sha256:bcc6f7a3a95119c3568c572ca167ada75f8319890706283b9ba59b3489c9bcb3"}, - {file = "regex-2022.4.24-cp39-cp39-win_amd64.whl", hash = "sha256:5b9c7b6895a01204296e9523b3e12b43e013835a9de035a783907c2c1bc447f0"}, - {file = "regex-2022.4.24.tar.gz", hash = "sha256:92183e9180c392371079262879c6532ccf55f808e6900df5d9f03c9ca8807255"}, -] -tokenize-rt = [ - {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, - {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, -] -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-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -types-pyyaml = [ - {file = "types-PyYAML-5.4.10.tar.gz", hash = "sha256:1d9e431e9f1f78a65ea957c558535a3b15ad67ea4912bce48a6c1b613dcf81ad"}, - {file = "types_PyYAML-5.4.10-py3-none-any.whl", hash = "sha256:f1d1357168988e45fa20c65aecb3911462246a84809015dd889ebf8b1db74124"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] diff --git a/libs/skyline-config/poetry.toml b/libs/skyline-config/poetry.toml deleted file mode 100644 index ab1033b..0000000 --- a/libs/skyline-config/poetry.toml +++ /dev/null @@ -1,2 +0,0 @@ -[virtualenvs] -in-project = true diff --git a/libs/skyline-config/pyproject.toml b/libs/skyline-config/pyproject.toml deleted file mode 100644 index 2657e68..0000000 --- a/libs/skyline-config/pyproject.toml +++ /dev/null @@ -1,40 +0,0 @@ -[tool.poetry] -name = "skyline-config" -version = "0.1.0" -description = "" -license = "Apache-2.0" -authors = ["OpenStack "] - -[tool.poetry.dependencies] -python = "^3.8" -pydantic = "1.8.2" -immutables = "0.16" -PyYAML = "5.4.1" - -[tool.poetry.dev-dependencies] -isort = "5.9.3" -black = "21.9b0" -add-trailing-comma = "2.1.0" -flake8 = "3.9.2" -mypy = "0.910" -pytest = "6.2.5" -pytest-xdist = "2.4.0" -pytest-cov = "2.12.1" -pytest-html = "3.1.1" -mimesis = "4.1.3" -types-PyYAML = "5.4.10" -click = "7.1.2" - -[tool.pytest.ini_options] -minversion = "6.0" -addopts = "-v -s -p no:cacheprovider -n auto --cov=skyline_config --cov-append --cov-report=term-missing --cov-report=html" -testpaths = [ - "tests", -] -markers = [ - "ddt(*args: TestData): Mark the test as a data-driven test." -] - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/libs/skyline-config/skyline_config/__init__.py b/libs/skyline-config/skyline_config/__init__.py deleted file mode 100644 index 4ea8cef..0000000 --- a/libs/skyline-config/skyline_config/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from .config import Configuration, Group, Opt - -__version__ = "0.1.0" - -__all__ = ("Opt", "Group", "Configuration") diff --git a/libs/skyline-config/skyline_config/config.py b/libs/skyline-config/skyline_config/config.py deleted file mode 100644 index 2b828af..0000000 --- a/libs/skyline-config/skyline_config/config.py +++ /dev/null @@ -1,167 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import warnings -from dataclasses import InitVar, dataclass, field -from pathlib import Path, PurePath -from typing import Any, Dict, Iterator, NamedTuple, Sequence, Tuple, Type - -import yaml -from immutables import Map, MapItems, MapKeys, MapValues -from pydantic import BaseModel, create_model - - -class ConfigPath(NamedTuple): - config_dir_path: str - config_file_path: str - - -@dataclass(frozen=True) -class Opt: - name: str - description: str - schema: Any - default: Any = None - deprecated: bool = False - value: Any = field(init=False, default=None) - _schema_model: Type[BaseModel] = field(init=False, repr=False) - - def __post_init__(self) -> None: - object.__setattr__( - self, - "_schema_model", - create_model(f"Opt(name='{self.name}')", value=(self.schema, ...)), - ) - - def load(self, value: Any) -> None: - value = self.default if value is None else value - self._schema_model(value=value) - object.__setattr__(self, "value", value) - if self.deprecated: - warnings.warn( - f"The config opt {self.name} is deprecated, will be deleted in the" - " future version", - DeprecationWarning, - ) - - -@dataclass(repr=False, frozen=True) -class Group: - name: str - init_opts: InitVar[Sequence[Opt]] = tuple() - _opts: Map[str, Opt] = field(init=False, repr=False) - - def __post_init__(self, init_opts: Sequence[Opt]) -> None: - object.__setattr__(self, "_opts", Map({opt.name: opt for opt in init_opts})) - - def __getattr__(self, name: str) -> Any: - if name in self._opts: - return self._opts[name].value - raise AttributeError(name) - - def __contains__(self, key: Any) -> bool: - return self._opts.__contains__(key) - - def __iter__(self) -> Iterator[Any]: - return self._opts.__iter__() - - def __len__(self) -> int: - return self._opts.__len__() - - def __repr__(self) -> str: - items = ", ".join((f"{opt}=Opt(name='{opt}')" for opt in self._opts)) - return f"Group({items})" - - def keys(self) -> MapKeys[str]: - return self._opts.keys() - - def values(self) -> MapValues[Opt]: - return self._opts.values() - - def items(self) -> MapItems[str, Opt]: - return self._opts.items() - - -@dataclass(repr=False, frozen=True) -class Configuration: - init_groups: InitVar[Sequence[Group]] = tuple() - config: Dict[str, Any] = field(init=False, default_factory=dict, repr=False) - _groups: Map[str, Group] = field(init=False, repr=False) - - def __post_init__(self, init_groups: Sequence[Group]) -> None: - object.__setattr__(self, "_groups", Map({group.name: group for group in init_groups})) - - @staticmethod - def get_config_path(project: str, env: Dict[str, str]) -> Tuple[str, str]: - config_dir_path = env.get("OS_CONFIG_DIR", PurePath("/etc", project).as_posix()) - config_file_path = PurePath(config_dir_path).joinpath(f"{project}.yaml").as_posix() - return ConfigPath(config_dir_path.strip(), config_file_path.strip()) - - def setup(self, project: str, env: Dict[str, str]) -> None: - config_dir_path, config_file_path = self.get_config_path(project, env) - if not Path(config_file_path).exists(): - raise ValueError(f"Not found config file: {config_file_path}") - - with open(config_file_path) as f: - try: - object.__setattr__(self, "config", yaml.safe_load(f)) - except Exception: - raise ValueError("Load config file error") - - for group in self._groups.values(): - for opt in group._opts.values(): - value = self.config.get(group.name, {}).get(opt.name) - opt.load(value) - - def cleanup(self) -> None: - for group in self._groups.values(): - for opt in group._opts.values(): - object.__setattr__(opt, "value", None) - object.__setattr__(self, "_groups", Map()) - object.__setattr__(self, "config", {}) - - def __call__(self, init_groups: Sequence[Group]) -> Any: - object.__setattr__(self, "_groups", Map({group.name: group for group in init_groups})) - - def __getattr__(self, name: str) -> Group: - if name in self._groups: - return self._groups[name] - raise AttributeError(name) - - def __contains__(self, key: Any) -> bool: - return self._groups.__contains__(key) - - def __iter__(self) -> Iterator[Any]: - return self._groups.__iter__() - - def __len__(self) -> int: - return self._groups.__len__() - - def __repr__(self) -> str: - items = ", ".join((f"{group}=Group(name='{group}')" for group in self._groups)) - return f"Configuration({items})" - - def keys(self) -> MapKeys[str]: - return self._groups.keys() - - def values(self) -> MapValues[Group]: - return self._groups.values() - - def items(self) -> MapItems[str, Group]: - return self._groups.items() - - -__all__ = ("Opt", "Group", "Configuration") diff --git a/libs/skyline-config/skyline_config/py.typed b/libs/skyline-config/skyline_config/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-config/tests/__init__.py b/libs/skyline-config/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-config/tests/conftest.py b/libs/skyline-config/tests/conftest.py deleted file mode 100644 index 636f462..0000000 --- a/libs/skyline-config/tests/conftest.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from typing import TYPE_CHECKING - -from _pytest.mark import ParameterSet -from tests.models import TestData - -if TYPE_CHECKING: - from _pytest.python import Metafunc - - -def pytest_generate_tests(metafunc: Metafunc) -> None: - for marker in metafunc.definition.iter_markers(name="ddt"): - test_data: TestData - for test_data in marker.args: - argument_length = len(test_data.arguments) - argvalues = [] - for argument_data in test_data.argument_data_set: - if len(argument_data.values) != argument_length: - raise ValueError( - f'Argument data "{argument_data.id}" of method ' - f'"{metafunc.function.__name__}" doesn\'t match ' - "number of arguments.", - ) - argvalues.append( - ParameterSet( - id=argument_data.id, - marks=argument_data.marks, - values=argument_data.values, - ), - ) - - metafunc.parametrize(test_data.arguments, argvalues, indirect=test_data.indirect) diff --git a/libs/skyline-config/tests/fake.py b/libs/skyline-config/tests/fake.py deleted file mode 100644 index d850cca..0000000 --- a/libs/skyline-config/tests/fake.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from dataclasses import dataclass, field -from typing import Any, Dict, List - -from mimesis import Generic -from pydantic import StrictBool, StrictInt, StrictStr - -FAKER = Generic() - - -@dataclass -class FakeOptData: - name: str = field(default_factory=lambda: "_".join(FAKER.text.words())) - description: str = field(default_factory=lambda: str(FAKER.text.text())) - schema: Any = field( - default_factory=lambda: FAKER.random.choice( - [StrictBool, StrictInt, StrictStr, List, Dict], - ), - ) - default: Any = None - deprecated: bool = False diff --git a/libs/skyline-config/tests/models.py b/libs/skyline-config/tests/models.py deleted file mode 100644 index c7cb00a..0000000 --- a/libs/skyline-config/tests/models.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from dataclasses import dataclass -from typing import Any, Collection, Sequence, Tuple, Union - - -@dataclass -class ArgumentData: - id: str - values: Sequence[object] - # TODO: Fix type annotation of `marks` after the pytest > 7.0.0 - # marks: Collection[Union[pytest.MarkDecorator, pytest.Mark]] - marks: Collection[Any] = () - - -@dataclass -class TestData: - arguments: Tuple[str, ...] - argument_data_set: Sequence[ArgumentData] - indirect: Union[bool, Tuple[str]] = False - - __test__ = False diff --git a/libs/skyline-config/tests/py.typed b/libs/skyline-config/tests/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-config/tests/unit/__init__.py b/libs/skyline-config/tests/unit/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-config/tests/unit/test_config.py b/libs/skyline-config/tests/unit/test_config.py deleted file mode 100644 index 17ae4ad..0000000 --- a/libs/skyline-config/tests/unit/test_config.py +++ /dev/null @@ -1,672 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from dataclasses import asdict -from pathlib import Path -from typing import Any, Dict, List, Optional, Sequence, Tuple, Type - -import pytest -from _pytest.fixtures import SubRequest -from pydantic import StrictBool, StrictFloat, StrictInt, StrictStr -from pydantic.error_wrappers import ValidationError -from skyline_config.config import Configuration, Group, Opt -from tests.fake import FAKER, FakeOptData -from tests.models import ArgumentData, TestData - - -class TestOpt: - @pytest.mark.ddt( - TestData( - arguments=("opt_data", "expected_schema_type"), - argument_data_set=[ - ArgumentData( - id="bool_opt", - values=(asdict(FakeOptData(schema=StrictBool)), "boolean"), - ), - ArgumentData( - id="int_opt", - values=(asdict(FakeOptData(schema=StrictInt)), "integer"), - ), - ArgumentData( - id="float_opt", - values=(asdict(FakeOptData(schema=StrictFloat)), "number"), - ), - ArgumentData( - id="str_opt", - values=(asdict(FakeOptData(schema=StrictStr)), "string"), - ), - ArgumentData( - id="list_opt", - values=(asdict(FakeOptData(schema=List[StrictStr])), "array"), - ), - ArgumentData( - id="dict_opt", - values=(asdict(FakeOptData(schema=Dict[StrictStr, StrictStr])), "object"), - ), - ], - ), - ) - def test_opt_init(self, opt_data: Dict[str, Any], expected_schema_type: str) -> None: - opt = Opt(**opt_data) - opt_value_schema = opt._schema_model.schema().get("properties", {}).get("value", {}) - assert opt_value_schema.get("type") == expected_schema_type - - @pytest.mark.ddt( - TestData( - arguments=("opt_data", "expected_exception"), - argument_data_set=[ - ArgumentData( - id="missing_parameters", - values=({"name": FAKER.text.word()}, TypeError), - ), - ArgumentData( - id="unknown_schema", - values=( - { - "name": FAKER.text.word(), - "description": FAKER.text.word(), - "schema": object, - }, - RuntimeError, - ), - ), - ], - ), - ) - def test_opt_init_error( - self, - opt_data: Dict[str, Any], - expected_exception: Type[Exception], - ) -> None: - with pytest.raises(expected_exception): - Opt(**opt_data) - - @pytest.mark.ddt( - TestData( - arguments=("opt_data",), - argument_data_set=[ - ArgumentData( - id="when_has_default", - values=( - asdict( - FakeOptData(schema=Optional[StrictStr], default=FAKER.text.word()), - ), - ), - ), - ArgumentData( - id="when_no_default", - values=(asdict(FakeOptData(schema=Optional[StrictStr])),), - ), - ], - ), - TestData( - arguments=("opt_value",), - argument_data_set=[ - ArgumentData(id="load_value", values=(FAKER.text.word(),)), - ArgumentData(id="load_none", values=(None,)), - ], - ), - ) - def test_opt_load(self, opt_data: Dict[str, Any], opt_value: Optional[str]) -> None: - opt = Opt(**opt_data) - opt.load(opt_value) - if opt_value is not None: - expected_result = opt_value - else: - expected_result = opt.default - assert opt.value == expected_result - - @pytest.mark.ddt( - TestData( - arguments=("opt_data",), - argument_data_set=[ - ArgumentData( - id="deprecated_warning", - values=(asdict(FakeOptData(schema=Optional[StrictStr], deprecated=True)),), - ), - ], - ), - ) - def test_opt_deprecated(self, opt_data: Dict[str, Any]) -> None: - opt = Opt(**opt_data) - expected_warn = DeprecationWarning - with pytest.warns(expected_warn): - opt.load(None) - - @pytest.mark.ddt( - TestData( - arguments=("opt_data", "opt_value"), - argument_data_set=[ - ArgumentData( - id="validation_error", - values=( - asdict(FakeOptData(schema=StrictStr)), - FAKER.numbers.integer_number(), - ), - ), - ], - ), - ) - def test_opt_schema_validation(self, opt_data: Dict[str, Any], opt_value: int) -> None: - opt = Opt(**opt_data) - expected_exception = ValidationError - with pytest.raises(expected_exception): - opt.load(opt_value) - - -class TestGroup: - @pytest.fixture - def group_opts(self, request: SubRequest) -> Sequence[Opt]: - count: int = request.param - opts = [] - for _ in range(count): - opt_data = asdict( - FakeOptData(schema=StrictStr, default=FAKER.text.word()), - ) - opt = Opt(**opt_data) - opt.load(None) - opts.append(opt) - return opts - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData(id="empty_group", values=(FAKER.text.word(), 0)), - ArgumentData( - id="normal_group", - values=(FAKER.text.word(), FAKER.numbers.integer_number(1, 10)), - ), - ], - ), - ) - def test_group_init(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - for opt in group_opts: - assert opt.value == getattr(group, opt.name, None) - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData(id="access_non-existent_opt", values=(FAKER.text.word(), 1)), - ], - ), - ) - def test_group_access_error(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - expected_exception = AttributeError - with pytest.raises(expected_exception): - getattr(group, f"{FAKER.text.word()}-test") - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData( - id="normal_group", - values=(FAKER.text.word(), FAKER.numbers.integer_number(1, 10)), - ), - ], - ), - ) - def test_group_like_collection(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - for opt in group_opts: - assert opt.name in group - assert len(group) == len(group_opts) - opt_names = {opt.name for opt in group_opts} - for item in group: - assert item in opt_names - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData( - id="normal_group", - values=(FAKER.text.word(), FAKER.numbers.integer_number(1, 10)), - ), - ], - ), - ) - def test_group_repr(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - opt_template = "{}=Opt(name='{}')" - for opt in group_opts: - opt_str = opt_template.format(opt.name, opt.name) - assert opt_str in repr(group) - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData( - id="normal_group", - values=(FAKER.text.word(), FAKER.numbers.integer_number(1, 10)), - ), - ], - ), - ) - def test_group_keys(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - opt_names = {opt.name for opt in group_opts} - for item in group.keys(): - assert item in opt_names - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData( - id="normal_group", - values=(FAKER.text.word(), FAKER.numbers.integer_number(1, 10)), - ), - ], - ), - ) - def test_group_values(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - opts = {opt for opt in group_opts} - opt_ids = {id(opt) for opt in group_opts} - for item in group.values(): - assert item in opts - assert id(item) in opt_ids - - @pytest.mark.ddt( - TestData( - arguments=("group_name", "group_opts"), - indirect=("group_opts",), - argument_data_set=[ - ArgumentData( - id="normal_group", - values=(FAKER.text.word(), FAKER.numbers.integer_number(1, 10)), - ), - ], - ), - ) - def test_group_items(self, group_name: str, group_opts: Sequence[Opt]) -> None: - group = Group(group_name, group_opts) - opt_names = {opt.name for opt in group_opts} - opts = {opt for opt in group_opts} - opt_ids = {id(opt) for opt in group_opts} - for name, item in group.items(): - assert name in opt_names - assert item in opts - assert id(item) in opt_ids - - -class TestConfiguration: - @pytest.fixture - def config_groups(self, request: SubRequest) -> Sequence[Group]: - count: int = request.param - groups = [] - for _ in range(count): - opts = [] - for __ in range(FAKER.numbers.integer_number(1, 10)): - opt_data = asdict( - FakeOptData(schema=StrictStr, default=FAKER.text.word()), - ) - opt = Opt(**opt_data) - opt.load(None) - opts.append(opt) - group = Group(FAKER.text.word(), opts) - groups.append(group) - return groups - - @pytest.fixture - def config_setup_params( - self, - request: SubRequest, - tmp_path: Path, - ) -> Tuple[str, Dict[str, str]]: - project: str = request.param.get("project", "") - env: Dict[str, str] = request.param.get("env", "") - env["OS_CONFIG_DIR"] = tmp_path.as_posix() - tmp_path.joinpath(f"{project}.yaml").write_text("{}") - return (project, env) - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData(id="empty_config", values=(0,)), - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_init(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - for group in config_groups: - assert group is getattr(config, group.name, None) - assert id(group) == id(getattr(config, group.name, None)) - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="access_non-existent_group", - values=(1,), - ), - ], - ), - ) - def test_configuration_access_error(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - expected_exception = AttributeError - with pytest.raises(expected_exception): - getattr(config, f"{FAKER.text.word()}-test") - - @pytest.mark.ddt( - TestData( - arguments=( - "project", - "env", - "expected_config_path", - ), - argument_data_set=[ - ArgumentData( - id="set_env_config_dir", - values=( - "fake_project_name", - {"OS_CONFIG_DIR": "env_config_dir"}, - ("env_config_dir", "env_config_dir/fake_project_name.yaml"), - ), - ), - ArgumentData( - id="no_set_env", - values=( - "fake_project_name", - {}, - ( - "/etc/fake_project_name", - "/etc/fake_project_name/fake_project_name.yaml", - ), - ), - ), - ], - ), - ) - def test_configuration_get_config_path( - self, - project: str, - env: Dict[str, str], - expected_config_path: Tuple[str, str], - ) -> None: - assert Configuration.get_config_path(project, env) == expected_config_path - - @pytest.mark.ddt( - TestData( - arguments=("config_setup_params",), - indirect=("config_setup_params",), - argument_data_set=[ - ArgumentData( - id="set_env_config_dir", - values=( - { - "project": "fake_project_name", - "env": {"OS_CONFIG_DIR": ""}, - }, - ), - ), - ], - ), - ) - def test_configuration_setup(self, config_setup_params: Tuple[str, Dict[str, str]]) -> None: - groups = [] - for _ in range(FAKER.numbers.integer_number(1, 10)): - opts = [] - for __ in range(FAKER.numbers.integer_number(1, 10)): - opt_data = asdict( - FakeOptData(schema=StrictStr, default=FAKER.text.word()), - ) - opts.append(Opt(**opt_data)) - groups.append(Group(FAKER.text.word(), opts)) - config = Configuration(groups) - project = config_setup_params[0] - env = config_setup_params[1] - config.setup(project, env) - for group in config: - for opt in getattr(config, group): - opt_value = getattr(getattr(config, group, None), opt) - assert isinstance(opt_value, str) - - @pytest.mark.ddt( - TestData( - arguments=("config_setup_params",), - indirect=("config_setup_params",), - argument_data_set=[ - ArgumentData( - id="not_found_config_file", - values=( - { - "project": "fake_project_name", - "env": {"OS_CONFIG_DIR": ""}, - }, - ), - ), - ], - ), - ) - def test_configuration_setup_non_existent_error( - self, - config_setup_params: Tuple[str, Dict[str, str]], - ) -> None: - groups = [] - for _ in range(FAKER.numbers.integer_number(1, 10)): - opts = [] - for __ in range(FAKER.numbers.integer_number(1, 10)): - opt_data = asdict( - FakeOptData(schema=StrictStr, default=FAKER.text.word()), - ) - opts.append(Opt(**opt_data)) - groups.append(Group(FAKER.text.word(), opts)) - config = Configuration(groups) - project = config_setup_params[0] - env = config_setup_params[1] - config_dir_path, config_file_path = config.get_config_path(project, env) - Path(config_file_path).unlink(missing_ok=True) - expected_exception = ValueError - with pytest.raises(expected_exception, match="Not found config file"): - config.setup(project, env) - - @pytest.mark.ddt( - TestData( - arguments=("config_setup_params",), - indirect=("config_setup_params",), - argument_data_set=[ - ArgumentData( - id="file_is_not_yaml", - values=( - { - "project": "fake_project_name", - "env": {"OS_CONFIG_DIR": ""}, - }, - ), - ), - ], - ), - ) - def test_configuration_setup_yaml_format_error( - self, - config_setup_params: Tuple[str, Dict[str, str]], - ) -> None: - groups = [] - for _ in range(FAKER.numbers.integer_number(1, 10)): - opts = [] - for __ in range(FAKER.numbers.integer_number(1, 10)): - opt_data = asdict( - FakeOptData(schema=StrictStr, default=FAKER.text.word()), - ) - opts.append(Opt(**opt_data)) - groups.append(Group(FAKER.text.word(), opts)) - config = Configuration(groups) - project = config_setup_params[0] - env = config_setup_params[1] - config_dir_path, config_file_path = config.get_config_path(project, env) - Path(config_file_path).write_text("{") - expected_exception = ValueError - with pytest.raises(expected_exception, match="Load config file error"): - config.setup(project, env) - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_cleanup(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - assert len(config) == len(config_groups) - config.cleanup() - assert len(config) == 0 - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_call(self, config_groups: Sequence[Group]) -> None: - config = Configuration() - config(config_groups) - for group in config_groups: - assert group is getattr(config, group.name, None) - assert id(group) == id(getattr(config, group.name, None)) - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_like_collection(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - for group in config_groups: - assert group.name in config - assert len(config) == len(config_groups) - group_names = {group.name for group in config_groups} - for item in config: - assert item in group_names - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_repr(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - group_template = "{}=Group(name='{}')" - for group in config_groups: - group_str = group_template.format(group.name, group.name) - assert group_str in repr(config) - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_keys(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - group_names = {group.name for group in config_groups} - for item in config.keys(): - assert item in group_names - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_values(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - groups = {group for group in config_groups} - group_ids = {id(group) for group in config_groups} - for item in config.values(): - assert item in groups - assert id(item) in group_ids - - @pytest.mark.ddt( - TestData( - arguments=("config_groups",), - indirect=("config_groups",), - argument_data_set=[ - ArgumentData( - id="normal_config", - values=(FAKER.numbers.integer_number(1, 10),), - ), - ], - ), - ) - def test_configuration_items(self, config_groups: Sequence[Group]) -> None: - config = Configuration(config_groups) - group_names = {group.name for group in config_groups} - groups = {group for group in config_groups} - group_ids = {id(group) for group in config_groups} - for name, item in config.items(): - assert name in group_names - assert item in groups - assert id(item) in group_ids diff --git a/libs/skyline-config/tests/unit/test_skyline_config.py b/libs/skyline-config/tests/unit/test_skyline_config.py deleted file mode 100644 index 3bd2400..0000000 --- a/libs/skyline-config/tests/unit/test_skyline_config.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from skyline_config import __version__ - - -def test_version() -> None: - assert __version__ == "0.1.0" diff --git a/libs/skyline-log/Makefile b/libs/skyline-log/Makefile deleted file mode 100644 index da8cf40..0000000 --- a/libs/skyline-log/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -PYTHON ?= python3 -PY_FILES := $(shell git ls-files -- *.py | xargs) - - -.PHONY: all -all: install fmt lint test package - - -.PHONY: venv -venv: - poetry env use $(PYTHON) - - -.PHONY: install -install: venv - poetry run pip install -U pip setuptools'<58.0.0' - poetry install -vvv - - -.PHONY: package -package: - poetry build - - -.PHONY: fmt -fmt: - poetry run isort $(PY_FILES) - poetry run black --config ../../pyproject.toml $(PY_FILES) - poetry run add-trailing-comma --py36-plus --exit-zero-even-if-changed $(PY_FILES) - - -.PHONY: lint -lint: - poetry run mypy --strict --config-file=../../mypy.ini $(PY_FILES) - poetry run isort --check-only --diff $(PY_FILES) - poetry run black --check --diff --color --config ../../pyproject.toml $(PY_FILES) - poetry run flake8 --config ../../.flake8 $(PY_FILES) - - -.PHONY: test -test: - poetry run pytest - - -.PHONY: clean -clean: - rm -rf .venv dist htmlcov .coverage diff --git a/libs/skyline-log/poetry.lock b/libs/skyline-log/poetry.lock deleted file mode 100644 index 57f5093..0000000 --- a/libs/skyline-log/poetry.lock +++ /dev/null @@ -1,689 +0,0 @@ -[[package]] -name = "add-trailing-comma" -version = "2.1.0" -description = "Automatically add trailing commas to calls and literals" -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -tokenize-rt = ">=3.0.1" - -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "black" -version = "21.9b0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -regex = ">=2020.1.8" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.2)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "click" -version = "7.1.2" -description = "Composable command line interface toolkit" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "colorama" -version = "0.4.4" -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 = "6.3.2" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "execnet" -version = "1.9.0" -description = "execnet: rapid multi-Python deployment" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -testing = ["pre-commit"] - -[[package]] -name = "flake8" -version = "3.9.2" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "isort" -version = "5.9.3" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.6.1,<4.0" - -[package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] - -[[package]] -name = "loguru" -version = "0.5.3" -description = "Python logging made (stupidly) simple" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["codecov (>=2.0.15)", "colorama (>=0.3.4)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "tox-travis (>=0.12)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "Sphinx (>=2.2.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "black (>=19.10b0)", "isort (>=5.1.1)"] - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mimesis" -version = "4.1.3" -description = "Mimesis: fake data generator." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mypy" -version = "0.910" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -mypy-extensions = ">=0.4.3,<0.5.0" -toml = "*" -typing-extensions = ">=3.7.4" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<1.5.0)"] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - -[[package]] -name = "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 = "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-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pyflakes" -version = "2.3.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pyparsing" -version = "3.0.8" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["railroad-diagrams", "jinja2"] - -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "2.12.1" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -coverage = ">=5.2.1" -pytest = ">=4.6" -toml = "*" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-forked" -version = "1.4.0" -description = "run tests in isolated forked subprocesses" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -py = "*" -pytest = ">=3.10" - -[[package]] -name = "pytest-html" -version = "3.1.1" -description = "pytest plugin for generating HTML reports" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "1.11.0" -description = "pytest plugin for test session metadata" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.dependencies] -pytest = ">=2.9.0" - -[[package]] -name = "pytest-xdist" -version = "2.4.0" -description = "pytest xdist plugin for distributed testing and loop-on-failing modes" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -execnet = ">=1.1" -pytest = ">=6.0.0" -pytest-forked = "*" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - -[[package]] -name = "regex" -version = "2022.4.24" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "tokenize-rt" -version = "4.2.1" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.2.3" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.2.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] - -[metadata] -lock-version = "1.1" -python-versions = "^3.8" -content-hash = "0987b67538c3fde1c76b31c77938760976762d5a39ffc8a4180cb1c4e79de93e" - -[metadata.files] -add-trailing-comma = [ - {file = "add_trailing_comma-2.1.0-py2.py3-none-any.whl", hash = "sha256:f462403aa2e997e20855708edb57536d1d3310d5c5fac7e80542578eb47fdb10"}, - {file = "add_trailing_comma-2.1.0.tar.gz", hash = "sha256:f9864ffbc12ea4e54916a356d57341ab58f612867c2ad453339c51004807e8ce"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -black = [ - {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, - {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -coverage = [ - {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, - {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, - {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, - {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, - {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, - {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, - {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, - {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, - {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, - {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, - {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, - {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, - {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, -] -execnet = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -isort = [ - {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, - {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, -] -loguru = [ - {file = "loguru-0.5.3-py3-none-any.whl", hash = "sha256:f8087ac396b5ee5f67c963b495d615ebbceac2796379599820e324419d53667c"}, - {file = "loguru-0.5.3.tar.gz", hash = "sha256:b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mimesis = [ - {file = "mimesis-4.1.3.tar.gz", hash = "sha256:90f36c21c1bb9944afc17178eb5868b0c85aa1fe49eb04bcbdafafd1ad4ca2ba"}, -] -mypy = [ - {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, - {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, - {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, - {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, - {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, - {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, - {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, - {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, - {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, - {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, - {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, - {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, - {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, - {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, - {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, - {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, - {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, - {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, - {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, - {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, - {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, - {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, - {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, -] -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"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -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-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pyparsing = [ - {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, - {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pytest-cov = [ - {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, - {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, -] -pytest-forked = [ - {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, - {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, -] -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-1.11.0.tar.gz", hash = "sha256:71b506d49d34e539cc3cfdb7ce2c5f072bea5c953320002c95968e0238f8ecf1"}, - {file = "pytest_metadata-1.11.0-py2.py3-none-any.whl", hash = "sha256:576055b8336dd4a9006dd2a47615f76f2f8c30ab12b1b1c039d99e834583523f"}, -] -pytest-xdist = [ - {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"}, - {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"}, -] -regex = [ - {file = "regex-2022.4.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f86aef546add4ff1202e1f31e9bb54f9268f17d996b2428877283146bf9bc013"}, - {file = "regex-2022.4.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e944268445b5694f5d41292c9228f0ca46d5a32a67f195d5f8547c1f1d91f4bc"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8da3145f4b72f7ce6181c804eaa44cdcea313c8998cdade3d9e20a8717a9cb"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fd464e547dbabf4652ca5fe9d88d75ec30182981e737c07b3410235a44b9939"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:071bcb625e890f28b7c4573124a6512ea65107152b1d3ca101ce33a52dad4593"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c2de7f32fa87d04d40f54bce3843af430697aba51c3a114aa62837a0772f219"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a07e8366115069f26822c47732122ab61598830a69f5629a37ea8881487c107"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:036d1c1fbe69eba3ee253c107e71749cdbb4776db93d674bc0d5e28f30300734"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:af1e687ffab18a75409e5e5d6215b6ccd41a5a1a0ea6ce9665e01253f737a0d3"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:165cc75cfa5aa0f12adb2ac6286330e7229a06dc0e6c004ec35da682b5b89579"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:3e35c50b27f36176c792738cb9b858523053bc495044d2c2b44db24376b266f1"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:43ee0df35925ae4b0cc6ee3f60b73369e559dd2ac40945044da9394dd9d3a51d"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58521abdab76583bd41ef47e5e2ddd93b32501aee4ee8cee71dee10a45ba46b1"}, - {file = "regex-2022.4.24-cp310-cp310-win32.whl", hash = "sha256:275afc7352982ee947fc88f67a034b52c78395977b5fc7c9be15f7dc95b76f06"}, - {file = "regex-2022.4.24-cp310-cp310-win_amd64.whl", hash = "sha256:253f858a0255cd91a0424a4b15c2eedb12f20274f85731b0d861c8137e843065"}, - {file = "regex-2022.4.24-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:85b7ee4d0c7a46296d884f6b489af8b960c4291d76aea4b22fd4fbe05e6ec08e"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0da7ef160d4f3eb3d4d3e39a02c3c42f7dbcfce62c81f784cc99fc7059765f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f2e2cef324ca9355049ee1e712f68e2e92716eba24275e6767b9bfa15f1f478"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6165e737acb3bea3271372e8aa5ebe7226c8a8e8da1b94af2d6547c5a09d689d"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f6bd8178cce5bb56336722d5569d19c50bba5915a69a2050c497fb921e7cb0f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45b761406777a681db0c24686178532134c937d24448d9e085279b69e9eb7da4"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dfbadb7b74d95f72f9f9dbf9778f7de92722ab520a109ceaf7927461fa85b10"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9913bcf730eb6e9b441fb176832eea9acbebab6035542c7c89d90c803f5cd3be"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:68aed3fb0c61296bd6d234f558f78c51671f79ccb069cbcd428c2eea6fee7a5b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8e7d33f93cdd01868327d834d0f5bb029241cd293b47d51b96814dec27fc9b4b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:82b7fc67e49fdce671bdbec1127189fc979badf062ce6e79dc95ef5e07a8bf92"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c36906a7855ec33a9083608e6cd595e4729dab18aeb9aad0dd0b039240266239"}, - {file = "regex-2022.4.24-cp36-cp36m-win32.whl", hash = "sha256:b2df3ede85d778c949d9bd2a50237072cee3df0a423c91f5514f78f8035bde87"}, - {file = "regex-2022.4.24-cp36-cp36m-win_amd64.whl", hash = "sha256:dffd9114ade73137ab2b79a8faf864683dbd2dbbb6b23a305fbbd4cbaeeb2187"}, - {file = "regex-2022.4.24-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a0ef57cccd8089b4249eebad95065390e56c04d4a92c51316eab4131bca96a9"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12af15b6edb00e425f713160cfd361126e624ec0de86e74f7cad4b97b7f169b3"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f271d0831d8ebc56e17b37f9fa1824b0379221d1238ae77c18a6e8c47f1fdce"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37903d5ca11fa47577e8952d2e2c6de28553b11c70defee827afb941ab2c6729"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b747cef8e5dcdaf394192d43a0c02f5825aeb0ecd3d43e63ae500332ab830b0"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:582ea06079a03750b5f71e20a87cd99e646d796638b5894ff85987ebf5e04924"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa6daa189db9104787ff1fd7a7623ce017077aa59eaac609d0d25ba95ed251a0"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7dbc96419ef0fb6ac56626014e6d3a345aeb8b17a3df8830235a88626ffc8d84"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0fb6cb16518ac7eff29d1e0b0cce90275dfae0f17154165491058c31d58bdd1d"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bea61de0c688198e3d9479344228c7accaa22a78b58ec408e41750ebafee6c08"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:46cbc5b23f85e94161b093dba1b49035697cf44c7db3c930adabfc0e6d861b95"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:50b77622016f03989cd06ecf6b602c7a6b4ed2e3ce04133876b041d109c934ee"}, - {file = "regex-2022.4.24-cp37-cp37m-win32.whl", hash = "sha256:2bde99f2cdfd6db1ec7e02d68cadd384ffe7413831373ea7cc68c5415a0cb577"}, - {file = "regex-2022.4.24-cp37-cp37m-win_amd64.whl", hash = "sha256:66fb765b2173d90389384708e3e1d3e4be1148bd8d4d50476b1469da5a2f0229"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:709396c0c95b95045fac89b94f997410ff39b81a09863fe21002f390d48cc7d3"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a608022f4593fc67518c6c599ae5abdb03bb8acd75993c82cd7a4c8100eff81"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb7107faf0168de087f62a2f2ed00f9e9da12e0b801582b516ddac236b871cda"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aabc28f7599f781ddaeac168d0b566d0db82182cc3dcf62129f0a4fc2927b811"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92ad03f928675ca05b79d3b1d3dfc149e2226d57ed9d57808f82105d511d0212"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ba3c304a4a5d8112dbd30df8b3e4ef59b4b07807957d3c410d9713abaee9a8"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2acf5c66fbb62b5fe4c40978ddebafa50818f00bf79d60569d9762f6356336e"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c4d9770e579eb11b582b2e2fd19fa204a15cb1589ae73cd4dcbb63b64f3e828"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:02543d6d5c32d361b7cc468079ba4cddaaf4a6544f655901ba1ff9d8e3f18755"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:73ed1b06abadbf6b61f6033a07c06f36ec0ddca117e41ef2ac37056705e46458"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3241db067a7f69da57fba8bca543ac8a7ca415d91e77315690202749b9fdaba1"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d128e278e5e554c5c022c7bed410ca851e00bacebbb4460de546a73bc53f8de4"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1d53835922cd0f9b74b2742453a444865a70abae38d12eb41c59271da66f38d"}, - {file = "regex-2022.4.24-cp38-cp38-win32.whl", hash = "sha256:f2a5d9f612091812dee18375a45d046526452142e7b78c4e21ab192db15453d5"}, - {file = "regex-2022.4.24-cp38-cp38-win_amd64.whl", hash = "sha256:a850f5f369f1e3b6239da7fb43d1d029c1e178263df671819889c47caf7e4ff3"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bedb3d01ad35ea1745bdb1d57f3ee0f996f988c98f5bbae9d068c3bb3065d210"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8bf867ba71856414a482e4b683500f946c300c4896e472e51d3db8dfa8dc8f32"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b415b82e5be7389ec5ee7ee35431e4a549ea327caacf73b697c6b3538cb5c87f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dae5affbb66178dad6c6fd5b02221ca9917e016c75ee3945e9a9563eb1fbb6f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e65580ae3137bce712f505ec7c2d700aef0014a3878c4767b74aff5895fc454f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e9e983fc8e0d4d5ded7caa5aed39ca2cf6026d7e39801ef6f0af0b1b6cd9276"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad3a770839aa456ff9a9aa0e253d98b628d005a3ccb37da1ff9be7c84fee16"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed625205f5f26984382b68e4cbcbc08e6603c9e84c14b38457170b0cc71c823b"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c4fdf837666f7793a5c3cfa2f2f39f03eb6c7e92e831bc64486c2f547580c2b3"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ed26c3d2d62c6588e0dad175b8d8cc0942a638f32d07b80f92043e5d73b7db67"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f89d26e50a4c7453cb8c415acd09e72fbade2610606a9c500a1e48c43210a42d"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:97af238389cb029d63d5f2d931a7e8f5954ad96e812de5faaed373b68e74df86"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:be392d9cd5309509175a9d7660dc17bf57084501108dbff0c5a8bfc3646048c3"}, - {file = "regex-2022.4.24-cp39-cp39-win32.whl", hash = "sha256:bcc6f7a3a95119c3568c572ca167ada75f8319890706283b9ba59b3489c9bcb3"}, - {file = "regex-2022.4.24-cp39-cp39-win_amd64.whl", hash = "sha256:5b9c7b6895a01204296e9523b3e12b43e013835a9de035a783907c2c1bc447f0"}, - {file = "regex-2022.4.24.tar.gz", hash = "sha256:92183e9180c392371079262879c6532ccf55f808e6900df5d9f03c9ca8807255"}, -] -tokenize-rt = [ - {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, - {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, -] -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-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -win32-setctime = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] diff --git a/libs/skyline-log/poetry.toml b/libs/skyline-log/poetry.toml deleted file mode 100644 index ab1033b..0000000 --- a/libs/skyline-log/poetry.toml +++ /dev/null @@ -1,2 +0,0 @@ -[virtualenvs] -in-project = true diff --git a/libs/skyline-log/pyproject.toml b/libs/skyline-log/pyproject.toml deleted file mode 100644 index 3da20f7..0000000 --- a/libs/skyline-log/pyproject.toml +++ /dev/null @@ -1,37 +0,0 @@ -[tool.poetry] -name = "skyline-log" -version = "0.1.0" -description = "" -license = "Apache-2.0" -authors = ["OpenStack "] - -[tool.poetry.dependencies] -python = "^3.8" -loguru = "0.5.3" - -[tool.poetry.dev-dependencies] -isort = "5.9.3" -black = "21.9b0" -add-trailing-comma = "2.1.0" -flake8 = "3.9.2" -mypy = "0.910" -pytest = "6.2.5" -pytest-xdist = "2.4.0" -pytest-cov = "2.12.1" -pytest-html = "3.1.1" -mimesis = "4.1.3" -click = "7.1.2" - -[tool.pytest.ini_options] -minversion = "6.0" -addopts = "-v -s -p no:cacheprovider -n auto --cov=skyline_log --cov-append --cov-report=term-missing --cov-report=html" -testpaths = [ - "tests", -] -markers = [ - "ddt(*args: TestData): Mark the test as a data-driven test." -] - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/libs/skyline-log/skyline_log/__init__.py b/libs/skyline-log/skyline_log/__init__.py deleted file mode 100644 index dfaf6be..0000000 --- a/libs/skyline-log/skyline_log/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from .log import LOG, setup - -__version__ = "0.1.0" - -__all__ = ("LOG", "setup") diff --git a/libs/skyline-log/skyline_log/log.py b/libs/skyline-log/skyline_log/log.py deleted file mode 100644 index 35346e2..0000000 --- a/libs/skyline-log/skyline_log/log.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import inspect -import logging -from logging import Handler, LogRecord -from pathlib import PurePath -from typing import Optional, Union - -import loguru -from loguru import logger - -LOG = loguru.logger - - -class InterceptHandler(logging.Handler): - def emit(self, record: LogRecord) -> None: - # Get corresponding Loguru level if it exists - level = getattr(logger.level(record.levelname), "name", record.levelno) - - # Find caller from where originated the logged message - frame, depth = getattr(inspect.currentframe(), "f_back", None), 1 - while frame and frame.f_code.co_filename == logging.__file__: - frame = frame.f_back - depth += 1 - - logger.opt(depth=depth, exception=record.exc_info).log( - level, - record.getMessage(), - ) - - -def setup( - sink: Union[PurePath, str, Handler], - debug: bool = False, - colorize: bool = False, - level: Optional[str] = None, -) -> None: - if debug: - default_level = "DEBUG" - backtrace = True - diagnose = True - else: - default_level = "WARNING" - backtrace = False - diagnose = True - if level is None: - level = default_level - - LOG.remove() - LOG.add( - sink, - level=level, - format=( - "{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} |" - " {name}:{function}:{line} -" - " {message}" - ), - filter=None, - colorize=colorize, - backtrace=backtrace, - diagnose=diagnose, - serialize=False, - enqueue=False, - catch=True, - ) - logging.basicConfig(handlers=[InterceptHandler()], level=0, force=True) - - -__all__ = ("LOG", "setup") diff --git a/libs/skyline-log/skyline_log/py.typed b/libs/skyline-log/skyline_log/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-log/tests/__init__.py b/libs/skyline-log/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-log/tests/conftest.py b/libs/skyline-log/tests/conftest.py deleted file mode 100644 index 636f462..0000000 --- a/libs/skyline-log/tests/conftest.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from typing import TYPE_CHECKING - -from _pytest.mark import ParameterSet -from tests.models import TestData - -if TYPE_CHECKING: - from _pytest.python import Metafunc - - -def pytest_generate_tests(metafunc: Metafunc) -> None: - for marker in metafunc.definition.iter_markers(name="ddt"): - test_data: TestData - for test_data in marker.args: - argument_length = len(test_data.arguments) - argvalues = [] - for argument_data in test_data.argument_data_set: - if len(argument_data.values) != argument_length: - raise ValueError( - f'Argument data "{argument_data.id}" of method ' - f'"{metafunc.function.__name__}" doesn\'t match ' - "number of arguments.", - ) - argvalues.append( - ParameterSet( - id=argument_data.id, - marks=argument_data.marks, - values=argument_data.values, - ), - ) - - metafunc.parametrize(test_data.arguments, argvalues, indirect=test_data.indirect) diff --git a/libs/skyline-log/tests/fake.py b/libs/skyline-log/tests/fake.py deleted file mode 100644 index e9a03fe..0000000 --- a/libs/skyline-log/tests/fake.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from mimesis import Generic - -FAKER = Generic() diff --git a/libs/skyline-log/tests/models.py b/libs/skyline-log/tests/models.py deleted file mode 100644 index c7cb00a..0000000 --- a/libs/skyline-log/tests/models.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from dataclasses import dataclass -from typing import Any, Collection, Sequence, Tuple, Union - - -@dataclass -class ArgumentData: - id: str - values: Sequence[object] - # TODO: Fix type annotation of `marks` after the pytest > 7.0.0 - # marks: Collection[Union[pytest.MarkDecorator, pytest.Mark]] - marks: Collection[Any] = () - - -@dataclass -class TestData: - arguments: Tuple[str, ...] - argument_data_set: Sequence[ArgumentData] - indirect: Union[bool, Tuple[str]] = False - - __test__ = False diff --git a/libs/skyline-log/tests/unit/__init__.py b/libs/skyline-log/tests/unit/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-log/tests/unit/test_log.py b/libs/skyline-log/tests/unit/test_log.py deleted file mode 100644 index bc4e7ab..0000000 --- a/libs/skyline-log/tests/unit/test_log.py +++ /dev/null @@ -1,226 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import logging -from logging import StreamHandler -from pathlib import Path - -import pytest -from _pytest.capture import CaptureFixture -from _pytest.fixtures import SubRequest -from skyline_log.log import LOG, setup as log_setup -from tests.fake import FAKER -from tests.models import ArgumentData, TestData - - -class TestLog: - @pytest.fixture - def file_sink_captor(self, request: SubRequest, tmp_path: Path) -> Path: - file_name: str = request.param - file = tmp_path.joinpath(file_name) - file.touch() - return file - - @pytest.mark.ddt( - TestData( - arguments=("file_sink_captor",), - indirect=("file_sink_captor",), - argument_data_set=[ - ArgumentData( - id="str_file_path", - values=(FAKER.text.word(),), - ), - ], - ), - TestData( - arguments=("debug",), - argument_data_set=[ - ArgumentData( - id="enable_debug", - values=(True,), - ), - ArgumentData( - id="disable_debug", - values=(False,), - ), - ], - ), - TestData( - arguments=("level",), - argument_data_set=[ - ArgumentData( - id="debug_level", - values=("debug",), - ), - ArgumentData( - id="info_level", - values=("info",), - ), - ArgumentData( - id="warning_level", - values=("warning",), - ), - ArgumentData( - id="error_level", - values=("error",), - ), - ], - ), - ) - def test_file_sink_setup(self, file_sink_captor: Path, debug: bool, level: str) -> None: - log_setup(file_sink_captor.as_posix(), debug) - content = FAKER.text.text() - log = getattr(LOG, level) - log(content) - file_content = file_sink_captor.read_text() - if debug is False and level in ["debug", "info"]: - assert f"| {level.upper():<8} |" not in file_content - assert content not in file_content - else: - assert f"| {level.upper():<8} |" in file_content - assert content in file_content - - @pytest.fixture - def stream_sink_captor( - self, - request: SubRequest, - capsys: CaptureFixture[str], - ) -> CaptureFixture[str]: - return capsys - - @pytest.mark.ddt( - TestData( - arguments=("stream_sink_captor",), - indirect=("stream_sink_captor",), - argument_data_set=[ - ArgumentData( - id="std_output", - values=(StreamHandler,), - ), - ], - ), - TestData( - arguments=("debug",), - argument_data_set=[ - ArgumentData( - id="enable_debug", - values=(True,), - ), - ArgumentData( - id="disable_debug", - values=(False,), - ), - ], - ), - TestData( - arguments=("level",), - argument_data_set=[ - ArgumentData( - id="debug_level", - values=("debug",), - ), - ArgumentData( - id="info_level", - values=("info",), - ), - ArgumentData( - id="warning_level", - values=("warning",), - ), - ArgumentData( - id="error_level", - values=("error",), - ), - ], - ), - ) - def test_stream_sink_setup( - self, - stream_sink_captor: CaptureFixture[str], - debug: bool, - level: str, - ) -> None: - log_setup(StreamHandler(), debug) - content = FAKER.text.text() - log = getattr(LOG, level) - log(content) - std_out, std_err = stream_sink_captor.readouterr() - if debug is False and level in ["debug", "info"]: - assert f"| {level.upper():<8} |" not in std_err - assert content not in std_err - else: - assert f"| {level.upper():<8} |" in std_err - assert content in std_err - - @pytest.mark.ddt( - TestData( - arguments=("file_sink_captor",), - indirect=("file_sink_captor",), - argument_data_set=[ - ArgumentData( - id="str_file_path", - values=(FAKER.text.word(),), - ), - ], - ), - TestData( - arguments=("debug",), - argument_data_set=[ - ArgumentData( - id="enable_debug", - values=(True,), - ), - ArgumentData( - id="disable_debug", - values=(False,), - ), - ], - ), - TestData( - arguments=("level",), - argument_data_set=[ - ArgumentData( - id="debug_level", - values=("debug",), - ), - ArgumentData( - id="info_level", - values=("info",), - ), - ArgumentData( - id="warning_level", - values=("warning",), - ), - ArgumentData( - id="error_level", - values=("error",), - ), - ], - ), - ) - def test_standard_logging(self, file_sink_captor: Path, debug: bool, level: str) -> None: - log_setup(file_sink_captor.as_posix(), debug) - content = FAKER.text.text() - std_logger = logging.getLogger() - log = getattr(std_logger, level) - log(content) - file_content = file_sink_captor.read_text() - if debug is False and level in ["debug", "info"]: - assert f"| {level.upper():<8} |" not in file_content - assert content not in file_content - else: - assert f"| {level.upper():<8} |" in file_content - assert content in file_content diff --git a/libs/skyline-log/tests/unit/test_skyline_log.py b/libs/skyline-log/tests/unit/test_skyline_log.py deleted file mode 100644 index 4a9e4bb..0000000 --- a/libs/skyline-log/tests/unit/test_skyline_log.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from skyline_log import __version__ - - -def test_version() -> None: - assert __version__ == "0.1.0" diff --git a/libs/skyline-nginx/Makefile b/libs/skyline-nginx/Makefile deleted file mode 100644 index f26fed2..0000000 --- a/libs/skyline-nginx/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -PYTHON ?= python3 -PY_FILES := $(shell git ls-files -- *.py | xargs) - - -.PHONY: all -all: install fmt lint test package - - -.PHONY: venv -venv: - poetry env use $(PYTHON) - - -.PHONY: install -install: venv - poetry run pip install -U pip setuptools'<58.0.0' - poetry install -vvv - - -.PHONY: package -package: - poetry build - - -.PHONY: fmt -fmt: - poetry run isort $(PY_FILES) - poetry run black --config ../../pyproject.toml $(PY_FILES) - poetry run add-trailing-comma --py36-plus --exit-zero-even-if-changed $(PY_FILES) - - -.PHONY: lint -lint: - # poetry run mypy --config-file=../../mypy.ini $(PY_FILES) - poetry run isort --check-only --diff $(PY_FILES) - poetry run black --check --diff --color --config ../../pyproject.toml $(PY_FILES) - poetry run flake8 $(PY_FILES) - - -.PHONY: test -test: - echo TODO - - -.PHONY: clean -clean: - rm -rf .venv dist diff --git a/libs/skyline-nginx/poetry.lock b/libs/skyline-nginx/poetry.lock deleted file mode 100644 index 9ba3170..0000000 --- a/libs/skyline-nginx/poetry.lock +++ /dev/null @@ -1,2964 +0,0 @@ -[[package]] -name = "add-trailing-comma" -version = "2.1.0" -description = "Automatically add trailing commas to calls and literals" -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -tokenize-rt = ">=3.0.1" - -[[package]] -name = "aiofiles" -version = "0.8.0" -description = "File support for asyncio." -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[[package]] -name = "aiomysql" -version = "0.0.21" -description = "MySQL driver for asyncio." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -PyMySQL = ">=0.9,<=0.9.3" - -[package.extras] -sa = ["sqlalchemy (>=1.0)"] - -[[package]] -name = "aiosqlite" -version = "0.17.0" -description = "asyncio bridge to the standard sqlite3 module" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing_extensions = ">=3.7.2" - -[[package]] -name = "alembic" -version = "1.7.5" -description = "A database migration tool for SQLAlchemy." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -importlib-resources = {version = "*", markers = "python_version < \"3.9\""} -Mako = "*" -SQLAlchemy = ">=1.3.0" - -[package.extras] -tz = ["python-dateutil"] - -[[package]] -name = "aniso8601" -version = "9.0.1" -description = "A library for parsing ISO 8601 strings." -category = "main" -optional = false -python-versions = "*" - -[package.extras] -dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] - -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "async-exit-stack" -version = "1.0.1" -description = "AsyncExitStack backport for Python 3.5+" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "async-generator" -version = "1.10" -description = "Async generators and context managers for Python 3.5+" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "autopage" -version = "0.5.0" -description = "A library to provide automatic paging for console output" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "babel" -version = "2.10.1" -description = "Internationalization utilities" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "black" -version = "21.9b0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -regex = ">=2020.1.8" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.2)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "certifi" -version = "2021.10.8" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "cffi" -version = "1.15.0" -description = "Foreign Function Interface for Python calling C code." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "2.0.12" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = ">=3.5.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - -[[package]] -name = "click" -version = "7.1.2" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "cliff" -version = "3.10.1" -description = "Command Line Interface Formulation Framework" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -autopage = ">=0.4.0" -cmd2 = ">=1.0.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PrettyTable = ">=0.7.2" -pyparsing = ">=2.1.0" -PyYAML = ">=3.12" -stevedore = ">=2.0.1" - -[[package]] -name = "cmd2" -version = "2.4.1" -description = "cmd2 - quickly build feature-rich and user-friendly interactive command line applications in Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -attrs = ">=16.3.0" -pyperclip = ">=1.6" -pyreadline3 = {version = "*", markers = "sys_platform == \"win32\""} -wcwidth = ">=0.1.7" - -[package.extras] -dev = ["codecov", "doc8", "flake8", "invoke", "mypy (0.902)", "nox", "pytest (>=4.6)", "pytest-cov", "pytest-mock", "sphinx", "sphinx-rtd-theme", "sphinx-autobuild", "twine (>=1.11)"] -test = ["codecov", "coverage", "pytest (>=4.6)", "pytest-cov", "pytest-mock", "gnureadline"] -validate = ["flake8", "mypy (0.902)", "types-pkg-resources"] - -[[package]] -name = "colorama" -version = "0.4.4" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "cryptography" -version = "37.0.2" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0,<3.1.0 || >3.1.0,<3.1.1 || >3.1.1)", "sphinx-rtd-theme"] -docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools_rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] - -[[package]] -name = "databases" -version = "0.4.3" -description = "Async database support for Python." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -sqlalchemy = "<1.4" - -[package.extras] -mysql = ["aiomysql"] -postgresql = ["asyncpg"] -postgresql_aiopg = ["aiopg"] -sqlite = ["aiosqlite"] - -[[package]] -name = "debtcollector" -version = "2.5.0" -description = "A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -wrapt = ">=1.7.0" - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "dnspython" -version = "2.1.0" -description = "DNS toolkit" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -dnssec = ["cryptography (>=2.6)"] -doh = ["requests", "requests-toolbelt"] -idna = ["idna (>=2.1)"] -curio = ["curio (>=1.2)", "sniffio (>=1.1)"] -trio = ["trio (>=0.14.0)", "sniffio (>=1.1)"] - -[[package]] -name = "dogpile.cache" -version = "1.1.5" -description = "A caching front-end based on the Dogpile lock." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -decorator = ">=4.0.0" -stevedore = ">=3.0.0" - -[[package]] -name = "ecdsa" -version = "0.17.0" -description = "ECDSA cryptographic signature library (pure python)" -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[package.dependencies] -six = ">=1.9.0" - -[package.extras] -gmpy = ["gmpy"] -gmpy2 = ["gmpy2"] - -[[package]] -name = "email-validator" -version = "1.2.1" -description = "A robust email syntax and deliverability validation library." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -dnspython = ">=1.15.0" -idna = ">=2.0.0" - -[[package]] -name = "fastapi" -version = "0.58.1" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -aiofiles = {version = "*", optional = true, markers = "extra == \"all\""} -async_exit_stack = {version = "*", optional = true, markers = "extra == \"all\""} -async_generator = {version = "*", optional = true, markers = "extra == \"all\""} -email_validator = {version = "*", optional = true, markers = "extra == \"all\""} -graphene = {version = "*", optional = true, markers = "extra == \"all\""} -itsdangerous = {version = "*", optional = true, markers = "extra == \"all\""} -jinja2 = {version = "*", optional = true, markers = "extra == \"all\""} -orjson = {version = "*", optional = true, markers = "extra == \"all\""} -pydantic = ">=0.32.2,<2.0.0" -python-multipart = {version = "*", optional = true, markers = "extra == \"all\""} -pyyaml = {version = "*", optional = true, markers = "extra == \"all\""} -requests = {version = "*", optional = true, markers = "extra == \"all\""} -starlette = "0.13.4" -ujson = {version = "*", optional = true, markers = "extra == \"all\""} -uvicorn = {version = "*", optional = true, markers = "extra == \"all\""} - -[package.extras] -all = ["requests", "aiofiles", "jinja2", "python-multipart", "itsdangerous", "pyyaml", "graphene", "ujson", "orjson", "email-validator", "uvicorn", "async-exit-stack", "async-generator"] -dev = ["pyjwt", "passlib", "autoflake", "flake8", "uvicorn", "graphene"] -doc = ["mkdocs", "mkdocs-material", "markdown-include", "typer", "typer-cli", "pyyaml"] -test = ["pytest (5.4.3)", "pytest-cov (2.10.0)", "mypy", "black", "isort", "requests", "email-validator", "sqlalchemy", "peewee", "databases", "orjson", "async-exit-stack", "async-generator", "python-multipart", "aiofiles", "flask"] - -[[package]] -name = "flake8" -version = "3.9.2" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - -[[package]] -name = "graphene" -version = "3.0" -description = "GraphQL Framework for Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -aniso8601 = ">=8,<10" -graphql-core = ">=3.1.2,<3.2.0" -graphql-relay = ">=3.0,<4" - -[package.extras] -dev = ["black (19.10b0)", "flake8 (>=3.7,<4)", "pytest (>=5.3,<6)", "pytest-benchmark (>=3.2,<4)", "pytest-cov (>=2.8,<3)", "pytest-mock (>=2,<3)", "pytest-asyncio (>=0.10,<2)", "snapshottest (>=0.5,<1)", "coveralls (>=1.11,<2)", "promise (>=2.3,<3)", "mock (>=4.0,<5)", "pytz (2021.1)", "iso8601 (>=0.1,<2)"] -test = ["pytest (>=5.3,<6)", "pytest-benchmark (>=3.2,<4)", "pytest-cov (>=2.8,<3)", "pytest-mock (>=2,<3)", "pytest-asyncio (>=0.10,<2)", "snapshottest (>=0.5,<1)", "coveralls (>=1.11,<2)", "promise (>=2.3,<3)", "mock (>=4.0,<5)", "pytz (2021.1)", "iso8601 (>=0.1,<2)"] - -[[package]] -name = "graphql-core" -version = "3.1.7" -description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." -category = "main" -optional = false -python-versions = ">=3.6,<4" - -[[package]] -name = "graphql-relay" -version = "3.1.5" -description = "Relay library for graphql-core" -category = "main" -optional = false -python-versions = ">=3.6,<4" - -[package.dependencies] -graphql-core = ">=3.1,<3.2" - -[[package]] -name = "gunicorn" -version = "20.1.0" -description = "WSGI HTTP Server for UNIX" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -eventlet = ["eventlet (>=0.24.1)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -tornado = ["tornado (>=0.2)"] - -[[package]] -name = "h11" -version = "0.13.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "httpcore" -version = "0.12.3" -description = "A minimal low-level HTTP client." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -h11 = "<1.0.0" -sniffio = ">=1.0.0,<2.0.0" - -[package.extras] -http2 = ["h2 (>=3,<5)"] - -[[package]] -name = "httptools" -version = "0.1.2" -description = "A collection of framework independent HTTP protocol utils." -category = "main" -optional = false -python-versions = "*" - -[package.extras] -test = ["Cython (0.29.22)"] - -[[package]] -name = "httpx" -version = "0.16.1" -description = "The next generation HTTP client." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -certifi = "*" -httpcore = ">=0.12.0,<0.13.0" -rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} -sniffio = "*" - -[package.extras] -brotli = ["brotlipy (>=0.7.0,<0.8.0)"] -http2 = ["h2 (>=3.0.0,<4.0.0)"] - -[[package]] -name = "idna" -version = "3.3" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "immutables" -version = "0.16" -description = "Immutable Collections" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)", "mypy (>=0.910)", "pytest (>=6.2.4,<6.3.0)"] - -[[package]] -name = "importlib-metadata" -version = "4.11.3" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] - -[[package]] -name = "importlib-resources" -version = "5.7.1" -description = "Read resources from Python packages" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] - -[[package]] -name = "iso8601" -version = "1.0.2" -description = "Simple module to parse ISO 8601 dates" -category = "main" -optional = false -python-versions = ">=3.6.2,<4.0" - -[[package]] -name = "isort" -version = "5.9.3" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.6.1,<4.0" - -[package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] - -[[package]] -name = "itsdangerous" -version = "2.1.2" -description = "Safely pass data to untrusted environments and back." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "jinja2" -version = "2.11.3" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -MarkupSafe = ">=0.23" - -[package.extras] -i18n = ["Babel (>=0.8)"] - -[[package]] -name = "jmespath" -version = "1.0.0" -description = "JSON Matching Expressions" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "jsonpatch" -version = "1.32" -description = "Apply JSON-Patches (RFC 6902)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -name = "jsonpointer" -version = "2.3" -description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "jsonschema" -version = "3.2.0" -description = "An implementation of JSON Schema validation for Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -attrs = ">=17.4.0" -pyrsistent = ">=0.14.0" -six = ">=1.11.0" - -[package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] - -[[package]] -name = "keystoneauth1" -version = "3.17.4" -description = "Authentication Library for OpenStack Identity" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -iso8601 = ">=0.1.11" -os-service-types = ">=1.2.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -requests = ">=2.14.2" -six = ">=1.10.0" -stevedore = ">=1.20.0" - -[package.extras] -betamax = ["betamax (>=0.7.0)", "fixtures (>=3.0.0)", "mock (>=2.0.0)"] -kerberos = ["requests-kerberos (>=0.8.0)"] -oauth1 = ["oauthlib (>=0.6.2)"] -saml2 = ["lxml (>=3.4.1,<3.7.0 || >3.7.0)"] -test = ["PyYAML (>=3.12)", "bandit (>=1.1.0,<1.6.0)", "betamax (>=0.7.0)", "coverage (>=4.0,<4.4 || >4.4)", "fixtures (>=3.0.0)", "flake8-docstrings (0.2.1.post1)", "flake8-import-order (>=0.17.1)", "hacking (>=0.12.0,<0.13.0 || >0.13.0,<0.14)", "lxml (>=3.4.1,<3.7.0 || >3.7.0)", "mock (>=2.0.0)", "oauthlib (>=0.6.2)", "openstackdocstheme (>=1.18.1)", "oslo.config (>=5.2.0)", "oslo.utils (>=3.33.0)", "oslotest (>=3.2.0)", "reno (>=2.5.0)", "requests-kerberos (>=0.8.0)", "requests-mock (>=1.2.0)", "stestr (>=1.0.0)", "testresources (>=2.0.0)", "testtools (>=2.2.0)"] - -[[package]] -name = "loguru" -version = "0.5.3" -description = "Python logging made (stupidly) simple" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["codecov (>=2.0.15)", "colorama (>=0.3.4)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "tox-travis (>=0.12)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "Sphinx (>=2.2.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "black (>=19.10b0)", "isort (>=5.1.1)"] - -[[package]] -name = "mako" -version = "1.2.0" -description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=0.9.2" - -[package.extras] -babel = ["babel"] -lingua = ["lingua"] -testing = ["pytest"] - -[[package]] -name = "markupsafe" -version = "2.0.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "msgpack" -version = "1.0.3" -description = "MessagePack (de)serializer." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "munch" -version = "2.5.0" -description = "A dot-accessible dictionary (a la JavaScript objects)" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = "*" - -[package.extras] -testing = ["pytest", "coverage", "astroid (>=1.5.3,<1.6.0)", "pylint (>=1.7.2,<1.8.0)", "astroid (>=2.0)", "pylint (>=2.3.1,<2.4.0)"] -yaml = ["PyYAML (>=5.1.0)"] - -[[package]] -name = "mypy" -version = "0.910" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -mypy-extensions = ">=0.4.3,<0.5.0" -toml = "*" -typing-extensions = ">=3.7.4" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<1.5.0)"] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "netaddr" -version = "0.8.0" -description = "A network address manipulation library for Python" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "netifaces" -version = "0.11.0" -description = "Portable network interface information." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "openstacksdk" -version = "0.36.5" -description = "An SDK for building applications to work with OpenStack" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -appdirs = ">=1.3.0" -cryptography = ">=2.1" -decorator = ">=3.4.0" -"dogpile.cache" = ">=0.6.2" -iso8601 = ">=0.1.11" -jmespath = ">=0.9.0" -jsonpatch = ">=1.16,<1.20 || >1.20" -keystoneauth1 = ">=3.16.0" -munch = ">=2.1.0" -netifaces = ">=0.10.4" -os-service-types = ">=1.7.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PyYAML = ">=3.12" -requestsexceptions = ">=1.2.0" -six = ">=1.10.0" - -[[package]] -name = "orjson" -version = "3.6.8" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "os-client-config" -version = "2.1.0" -description = "OpenStack Client Configuation Library" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -openstacksdk = ">=0.13.0" - -[[package]] -name = "os-service-types" -version = "1.7.0" -description = "Python library for consuming OpenStack sevice-types-authority data" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "osc-lib" -version = "2.5.0" -description = "OpenStackClient Library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cliff = ">=3.2.0" -keystoneauth1 = ">=3.14.0" -openstacksdk = ">=0.15.0" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -simplejson = ">=3.5.1" -stevedore = ">=1.20.0" - -[[package]] -name = "osc-placement" -version = "1.7.0" -description = "OpenStackClient plugin for the Placement service" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -keystoneauth1 = ">=3.3.0" -osc-lib = ">=1.2.0" -"oslo.utils" = ">=3.37.0" -pbr = ">=2.0.0" -simplejson = ">=3.16.0" -six = ">=1.10.0" - -[[package]] -name = "oslo.config" -version = "8.8.0" -description = "Oslo Configuration API" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -netaddr = ">=0.7.18" -"oslo.i18n" = ">=3.15.3" -PyYAML = ">=5.1" -requests = ">=2.18.0" -rfc3986 = ">=1.2.0" -stevedore = ">=1.20.0" - -[package.extras] -rst_generator = ["rst2txt (>=1.1.0)", "sphinx (>=1.8.0,<2.1.0 || >2.1.0)"] -test = ["bandit (>=1.6.0,<1.7.0)", "coverage (>=4.0,<4.4 || >4.4)", "fixtures (>=3.0.0)", "hacking (>=3.0.1,<3.1.0)", "mypy (>=0.720)", "oslo.log (>=3.36.0)", "oslotest (>=3.2.0)", "pre-commit (>=2.6.0)", "requests-mock (>=1.5.0)", "stestr (>=2.1.0)", "testscenarios (>=0.4)", "testtools (>=2.2.0)"] - -[[package]] -name = "oslo.context" -version = "4.1.0" -description = "Oslo Context library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "oslo.i18n" -version = "5.1.0" -description = "Oslo i18n library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "oslo.log" -version = "4.8.0" -description = "oslo.log library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.19.0" -"oslo.config" = ">=5.2.0" -"oslo.context" = ">=2.21.0" -"oslo.i18n" = ">=3.20.0" -"oslo.serialization" = ">=2.25.0" -"oslo.utils" = ">=3.36.0" -pbr = ">=3.1.1" -pyinotify = {version = ">=0.9.6", markers = "sys_platform != \"win32\" and sys_platform != \"darwin\" and sys_platform != \"sunos5\""} -python-dateutil = ">=2.7.0" - -[package.extras] -fixtures = ["fixtures (>=3.0.0)"] -systemd = ["systemd-python (>=234)"] -test = ["bandit (>=1.6.0,<1.7.0)", "coverage (>=4.5.1)", "fixtures (>=3.0.0)", "hacking (>=2.0.0,<2.1.0)", "oslotest (>=3.3.0)", "pre-commit (>=2.6.0)", "stestr (>=2.0.0)", "testtools (>=2.3.0)"] - -[[package]] -name = "oslo.policy" -version = "3.8.2" -description = "Oslo Policy library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -"oslo.config" = ">=6.0.0" -"oslo.context" = ">=2.22.0" -"oslo.i18n" = ">=3.15.3" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.40.0" -PyYAML = ">=5.1" -requests = ">=2.14.2" -stevedore = ">=1.20.0" - -[[package]] -name = "oslo.serialization" -version = "4.3.0" -description = "Oslo Serialization library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -msgpack = ">=0.5.2" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -pytz = ">=2013.6" - -[[package]] -name = "oslo.utils" -version = "4.13.0" -description = "Oslo Utility library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -iso8601 = ">=0.1.11" -netaddr = ">=0.7.18" -netifaces = ">=0.10.4" -"oslo.i18n" = ">=3.15.3" -packaging = ">=20.4" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -pyparsing = ">=2.1.0" -pytz = ">=2013.6" - -[[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 = "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 = "pbr" -version = "5.9.0" -description = "Python Build Reasonableness" -category = "main" -optional = false -python-versions = ">=2.6" - -[[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-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] - -[[package]] -name = "prettytable" -version = "0.7.2" -description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyasn1" -version = "0.4.8" -description = "ASN.1 types and codecs" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[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 = "pydantic" -version = "1.8.2" -description = "Data validation and settings management using python 3.6 type hinting" -category = "main" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -typing-extensions = ">=3.7.4.3" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pyflakes" -version = "2.3.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pyinotify" -version = "0.9.6" -description = "Linux filesystem events monitoring" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pymysql" -version = "0.9.3" -description = "Pure Python MySQL Driver" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -rsa = ["cryptography"] - -[[package]] -name = "pyopenssl" -version = "22.0.0" -description = "Python wrapper module around the OpenSSL library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cryptography = ">=35.0" - -[package.extras] -docs = ["sphinx", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] - -[[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 = ["railroad-diagrams", "jinja2"] - -[[package]] -name = "pyperclip" -version = "1.8.2" -description = "A cross-platform clipboard module for Python. (Only handles plain text for now.)" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyreadline3" -version = "3.4.1" -description = "A python implementation of GNU readline." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pyrsistent" -version = "0.18.1" -description = "Persistent/Functional/Immutable data structures" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "python-cinderclient" -version = "5.0.2" -description = "OpenStack Block Storage API Client Library" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Babel = ">=2.3.4,<2.4.0 || >2.4.0" -keystoneauth1 = ">=3.4.0" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PrettyTable = ">=0.7.1,<0.8" -requests = ">=2.14.2,<2.20.0 || >2.20.0" -simplejson = ">=3.5.1" -six = ">=1.10.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 = "python-dotenv" -version = "0.20.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-glanceclient" -version = "2.17.1" -description = "OpenStack Image API Client Library" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -keystoneauth1 = ">=3.6.2" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PrettyTable = ">=0.7.1,<0.8" -pyOpenSSL = ">=17.1.0" -requests = ">=2.14.2" -six = ">=1.10.0" -warlock = ">=1.2.0,<2" -wrapt = ">=1.7.0" - -[[package]] -name = "python-heatclient" -version = "1.18.1" -description = "OpenStack Orchestration API Client Library" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Babel = ">=2.3.4,<2.4.0 || >2.4.0" -cliff = ">=2.8.0,<2.9.0 || >2.9.0" -iso8601 = ">=0.1.11" -keystoneauth1 = ">=3.4.0" -osc-lib = ">=1.8.0" -"oslo.i18n" = ">=3.15.3" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PrettyTable = ">=0.7.2,<0.8" -python-swiftclient = ">=3.2.0" -PyYAML = ">=3.12" -requests = ">=2.14.2" -six = ">=1.10.0" - -[[package]] -name = "python-jose" -version = "3.3.0" -description = "JOSE implementation in Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -ecdsa = "!=0.15" -pyasn1 = "*" -rsa = "*" - -[package.extras] -cryptography = ["cryptography (>=3.4.0)"] -pycrypto = ["pycrypto (>=2.6.0,<2.7.0)", "pyasn1"] -pycryptodome = ["pycryptodome (>=3.3.1,<4.0.0)", "pyasn1"] - -[[package]] -name = "python-keystoneclient" -version = "3.21.0" -description = "Client Library for OpenStack Identity" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -debtcollector = ">=1.2.0" -keystoneauth1 = ">=3.4.0" -"oslo.config" = ">=5.2.0" -"oslo.i18n" = ">=3.15.3" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -requests = ">=2.14.2" -six = ">=1.10.0" -stevedore = ">=1.20.0" - -[[package]] -name = "python-multipart" -version = "0.0.5" -description = "A streaming multipart parser for Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -six = ">=1.4.0" - -[[package]] -name = "python-neutronclient" -version = "6.14.1" -description = "CLI and Client Library for OpenStack Networking" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Babel = ">=2.3.4,<2.4.0 || >2.4.0" -cliff = ">=2.8.0,<2.9.0 || >2.9.0" -debtcollector = ">=1.2.0" -iso8601 = ">=0.1.11" -keystoneauth1 = ">=3.4.0" -netaddr = ">=0.7.18" -os-client-config = ">=1.28.0" -osc-lib = ">=1.8.0" -"oslo.i18n" = ">=3.15.3" -"oslo.log" = ">=3.36.0" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -python-keystoneclient = ">=3.8.0" -requests = ">=2.14.2" -simplejson = ">=3.5.1" -six = ">=1.10.0" - -[[package]] -name = "python-novaclient" -version = "15.1.1" -description = "Client library for OpenStack Compute API" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Babel = ">=2.3.4,<2.4.0 || >2.4.0" -iso8601 = ">=0.1.11" -keystoneauth1 = ">=3.5.0" -"oslo.i18n" = ">=3.15.3" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PrettyTable = ">=0.7.2,<0.8" -simplejson = ">=3.5.1" -six = ">=1.10.0" - -[[package]] -name = "python-octaviaclient" -version = "1.10.1" -description = "Octavia client for OpenStack Load Balancing" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Babel = ">=2.3.4,<2.4.0 || >2.4.0" -cliff = ">=2.8.0,<2.9.0 || >2.9.0" -keystoneauth1 = ">=3.4.0" -netifaces = ">=0.10.4" -osc-lib = ">=1.8.0" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -python-neutronclient = ">=6.7.0" -python-openstackclient = ">=3.12.0" -requests = ">=2.14.2" -six = ">=1.10.0" - -[[package]] -name = "python-openstackclient" -version = "4.0.2" -description = "OpenStack Command-line Client" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -Babel = ">=2.3.4,<2.4.0 || >2.4.0" -cliff = ">=2.8.0,<2.9.0 || >2.9.0" -keystoneauth1 = ">=3.6.2" -openstacksdk = ">=0.17.0" -osc-lib = ">=1.14.0" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -python-cinderclient = ">=3.3.0" -python-glanceclient = ">=2.8.0" -python-keystoneclient = ">=3.17.0" -python-novaclient = ">=15.0.0" -six = ">=1.10.0" - -[[package]] -name = "python-swiftclient" -version = "3.13.1" -description = "OpenStack Object Storage API Client Library" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -requests = ">=1.1.0" -six = ">=1.9.0" - -[package.extras] -keystone = ["python-keystoneclient (>=0.7.0)"] -test = ["coverage (>=4.0,<4.4 || >4.4)", "keystoneauth1 (>=3.4.0)", "mock (>=1.2.0)", "openstacksdk (>=0.11.0)", "stestr (>=2.0.0,<3.0.0 || >3.0.0)", "hacking (>=1.1.0,<1.2.0)", "hacking (>=3.2.0,<3.3.0)"] - -[[package]] -name = "pytz" -version = "2022.1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -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 = "regex" -version = "2022.4.24" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "requests" -version = "2.27.1" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] - -[[package]] -name = "requestsexceptions" -version = "1.4.0" -description = "Import exceptions from potentially bundled packages in requests." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "rfc3986" -version = "1.5.0" -description = "Validating URI References per RFC 3986" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} - -[package.extras] -idna2008 = ["idna"] - -[[package]] -name = "rsa" -version = "4.8" -description = "Pure-Python RSA implementation" -category = "main" -optional = false -python-versions = ">=3.6,<4" - -[package.dependencies] -pyasn1 = ">=0.1.3" - -[[package]] -name = "simplejson" -version = "3.17.6" -description = "Simple, fast, extensible JSON encoder/decoder for Python" -category = "main" -optional = false -python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*" - -[[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 = "skyline-apiserver" -version = "0.1.0" -description = "" -category = "main" -optional = false -python-versions = "^3.8" -develop = true - -[package.dependencies] -aiomysql = "0.0.21" -aiosqlite = "0.17.0" -alembic = "1.7.5" -click = "7.1.2" -databases = "0.4.3" -dnspython = "2.1.0" -fastapi = {version = "0.58.1", extras = ["all"]} -gunicorn = "20.1.0" -httpx = "0.16.1" -immutables = "0.16" -keystoneauth1 = "3.17.4" -loguru = "0.5.3" -osc-placement = "1.7.0" -"oslo.policy" = "3.8.2" -pydantic = "1.8.2" -pymysql = "0.9.3" -python-cinderclient = "5.0.2" -python-glanceclient = "2.17.1" -python-heatclient = "1.18.1" -python-jose = "3.3.0" -python-keystoneclient = "3.21.0" -python-neutronclient = "6.14.1" -python-novaclient = "15.1.1" -python-octaviaclient = "1.10.1" -PyYAML = "5.4.1" -sqlalchemy = "1.3.24" -uvicorn = {version = "0.12.3", extras = ["standard"]} - -[package.source] -type = "directory" -url = "../skyline-apiserver" - -[[package]] -name = "skyline-config" -version = "0.1.0" -description = "" -category = "main" -optional = false -python-versions = "^3.8" -develop = true - -[package.dependencies] -immutables = "0.16" -pydantic = "1.8.2" -PyYAML = "5.4.1" - -[package.source] -type = "directory" -url = "../skyline-config" - -[[package]] -name = "skyline-console" -version = "0.1.0" -description = "" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "skyline-log" -version = "0.1.0" -description = "" -category = "main" -optional = false -python-versions = "^3.8" -develop = true - -[package.dependencies] -loguru = "0.5.3" - -[package.source] -type = "directory" -url = "../skyline-log" - -[[package]] -name = "sniffio" -version = "1.2.0" -description = "Sniff out which async library your code is running under" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "sqlalchemy" -version = "1.3.24" -description = "Database Abstraction Library" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -mssql = ["pyodbc"] -mssql_pymssql = ["pymssql"] -mssql_pyodbc = ["pyodbc"] -mysql = ["mysqlclient"] -oracle = ["cx-oracle"] -postgresql = ["psycopg2"] -postgresql_pg8000 = ["pg8000 (<1.16.6)"] -postgresql_psycopg2binary = ["psycopg2-binary"] -postgresql_psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql (<1)", "pymysql"] - -[[package]] -name = "starlette" -version = "0.13.4" -description = "The little ASGI library that shines." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -full = ["aiofiles", "graphene", "itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests", "ujson"] - -[[package]] -name = "stevedore" -version = "3.5.0" -description = "Manage dynamic plugins for Python applications" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "tokenize-rt" -version = "4.2.1" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.2.3" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.2.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "ujson" -version = "5.2.0" -description = "Ultra fast JSON encoder and decoder for Python" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "urllib3" -version = "1.26.9" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.12.3" -description = "The lightning-fast ASGI server." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -click = ">=7.0.0,<8.0.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.1.0,<0.2.0", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -PyYAML = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -uvloop = {version = ">=0.14.0", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchgod = {version = ">=0.6,<0.7", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=8.0.0,<9.0.0", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["websockets (>=8.0.0,<9.0.0)", "watchgod (>=0.6,<0.7)", "python-dotenv (>=0.13)", "PyYAML (>=5.1)", "httptools (>=0.1.0,<0.2.0)", "uvloop (>=0.14.0)", "colorama (>=0.4)"] - -[[package]] -name = "uvloop" -version = "0.16.0" -description = "Fast implementation of asyncio event loop on top of libuv" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -dev = ["Cython (>=0.29.24,<0.30.0)", "pytest (>=3.6.0)", "Sphinx (>=4.1.2,<4.2.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,<2.8.0)", "pyOpenSSL (>=19.0.0,<19.1.0)", "mypy (>=0.800)"] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)"] -test = ["aiohttp", "flake8 (>=3.9.2,<3.10.0)", "psutil", "pycodestyle (>=2.7.0,<2.8.0)", "pyOpenSSL (>=19.0.0,<19.1.0)", "mypy (>=0.800)"] - -[[package]] -name = "warlock" -version = "1.3.3" -description = "Python object model built on JSON schema and JSON patch." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -jsonpatch = ">=0.10,<2" -jsonschema = ">=0.7,<4" -six = "*" - -[[package]] -name = "watchgod" -version = "0.6" -description = "Simple, modern file watching and code reload in python." -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "websockets" -version = "8.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" -optional = false -python-versions = ">=3.6.1" - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] - -[[package]] -name = "wrapt" -version = "1.14.1" -description = "Module for decorators, wrappers and monkey patching." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "zipp" -version = "3.8.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "1.1" -python-versions = "^3.8" -content-hash = "137312db9e1bc9408352c6ded38de0d0079e4ee0490dc5f9ef660c16c22ef01a" - -[metadata.files] -add-trailing-comma = [ - {file = "add_trailing_comma-2.1.0-py2.py3-none-any.whl", hash = "sha256:f462403aa2e997e20855708edb57536d1d3310d5c5fac7e80542578eb47fdb10"}, - {file = "add_trailing_comma-2.1.0.tar.gz", hash = "sha256:f9864ffbc12ea4e54916a356d57341ab58f612867c2ad453339c51004807e8ce"}, -] -aiofiles = [ - {file = "aiofiles-0.8.0-py3-none-any.whl", hash = "sha256:7a973fc22b29e9962d0897805ace5856e6a566ab1f0c8e5c91ff6c866519c937"}, - {file = "aiofiles-0.8.0.tar.gz", hash = "sha256:8334f23235248a3b2e83b2c3a78a22674f39969b96397126cc93664d9a901e59"}, -] -aiomysql = [ - {file = "aiomysql-0.0.21-py3-none-any.whl", hash = "sha256:a81a97da3dd732635926a8ea6adbbf2d1345799680bf61b5f89e730bcec88cc5"}, - {file = "aiomysql-0.0.21.tar.gz", hash = "sha256:811569c0db118dd2685f0878f5cebf17a11e89a995fa14261d5fa0254113842c"}, -] -aiosqlite = [ - {file = "aiosqlite-0.17.0-py3-none-any.whl", hash = "sha256:6c49dc6d3405929b1d08eeccc72306d3677503cc5e5e43771efc1e00232e8231"}, - {file = "aiosqlite-0.17.0.tar.gz", hash = "sha256:f0e6acc24bc4864149267ac82fb46dfb3be4455f99fe21df82609cc6e6baee51"}, -] -alembic = [ - {file = "alembic-1.7.5-py3-none-any.whl", hash = "sha256:a9dde941534e3d7573d9644e8ea62a2953541e27bc1793e166f60b777ae098b4"}, - {file = "alembic-1.7.5.tar.gz", hash = "sha256:7c328694a2e68f03ee971e63c3bd885846470373a5b532cf2c9f1601c413b153"}, -] -aniso8601 = [ - {file = "aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f"}, - {file = "aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"}, -] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] -async-exit-stack = [ - {file = "async_exit_stack-1.0.1-py3-none-any.whl", hash = "sha256:9b43b17683b3438f428ef3bbec20689f5abbb052aa4b564c643397330adfaa99"}, - {file = "async_exit_stack-1.0.1.tar.gz", hash = "sha256:24de1ad6d0ff27be97c89d6709fa49bf20db179eaf1f4d2e6e9b4409b80e747d"}, -] -async-generator = [ - {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, - {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -autopage = [ - {file = "autopage-0.5.0-py3-none-any.whl", hash = "sha256:57232860f28a1867cdd54b5ea510e292c53d6dfb613f781c5120200666550b06"}, - {file = "autopage-0.5.0.tar.gz", hash = "sha256:5305b43cc0798170d7124e5a2feecf969e45f4a0baf75cb351138114eaf76b83"}, -] -babel = [ - {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, - {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, -] -black = [ - {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, - {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, -] -certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, -] -cffi = [ - {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, - {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, - {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, - {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, - {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, - {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, - {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, - {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, - {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, - {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, - {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, - {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, - {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, - {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, - {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, - {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, - {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -cliff = [ - {file = "cliff-3.10.1-py3-none-any.whl", hash = "sha256:a21da482714b9f0b0e9bafaaf2f6a8b3b14161bb47f62e10e28d2fe4ff4b1626"}, - {file = "cliff-3.10.1.tar.gz", hash = "sha256:045aee3f3c64471965d7ad507ce8474a4e2f20815fbb5405a770f8596a2a00a0"}, -] -cmd2 = [ - {file = "cmd2-2.4.1-py3-none-any.whl", hash = "sha256:e6f49b0854b6aec2f20073bae99f1deede16c24b36fde682045d73c80c4cfb51"}, - {file = "cmd2-2.4.1.tar.gz", hash = "sha256:f3b0467daca18fca0dc7838de7726a72ab64127a018a377a86a6ed8ebfdbb25f"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -cryptography = [ - {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181"}, - {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178"}, - {file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a"}, - {file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15"}, - {file = "cryptography-37.0.2-cp36-abi3-win32.whl", hash = "sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0"}, - {file = "cryptography-37.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d"}, - {file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9"}, - {file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452"}, - {file = "cryptography-37.0.2.tar.gz", hash = "sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e"}, -] -databases = [ - {file = "databases-0.4.3-py3-none-any.whl", hash = "sha256:f82b02c28fdddf7ffe7ee1945f5abef44d687ba97b9a1c81492c7f035d4c90e6"}, - {file = "databases-0.4.3.tar.gz", hash = "sha256:1521db7f6d3c581ff81b3552e130b27a13aefea2a57295e65738081831137afc"}, -] -debtcollector = [ - {file = "debtcollector-2.5.0-py3-none-any.whl", hash = "sha256:1393a527d2c72f143ffa6a629e9c33face6642634eece475b48cab7b04ba61f3"}, - {file = "debtcollector-2.5.0.tar.gz", hash = "sha256:dc9d1ad3f745c43f4bbedbca30f9ffe8905a8c028c9926e61077847d5ea257ab"}, -] -decorator = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] -dnspython = [ - {file = "dnspython-2.1.0-py3-none-any.whl", hash = "sha256:95d12f6ef0317118d2a1a6fc49aac65ffec7eb8087474158f42f26a639135216"}, - {file = "dnspython-2.1.0.zip", hash = "sha256:e4a87f0b573201a0f3727fa18a516b055fd1107e0e5477cded4a2de497df1dd4"}, -] -"dogpile.cache" = [ - {file = "dogpile.cache-1.1.5-py3-none-any.whl", hash = "sha256:5f9dcf99087240c7733fad5539b0806b52555917dccad1ef43499eaca8b459d9"}, - {file = "dogpile.cache-1.1.5.tar.gz", hash = "sha256:0f01bdc329329a8289af9705ff40fadb1f82a28c336f3174e12142b70d31c756"}, -] -ecdsa = [ - {file = "ecdsa-0.17.0-py2.py3-none-any.whl", hash = "sha256:5cf31d5b33743abe0dfc28999036c849a69d548f994b535e527ee3cb7f3ef676"}, - {file = "ecdsa-0.17.0.tar.gz", hash = "sha256:b9f500bb439e4153d0330610f5d26baaf18d17b8ced1bc54410d189385ea68aa"}, -] -email-validator = [ - {file = "email_validator-1.2.1-py2.py3-none-any.whl", hash = "sha256:c8589e691cf73eb99eed8d10ce0e9cbb05a0886ba920c8bcb7c82873f4c5789c"}, - {file = "email_validator-1.2.1.tar.gz", hash = "sha256:6757aea012d40516357c0ac2b1a4c31219ab2f899d26831334c5d069e8b6c3d8"}, -] -fastapi = [ - {file = "fastapi-0.58.1-py3-none-any.whl", hash = "sha256:d7499761d5ca901cdf5b6b73018d14729593f8ab1ea22d241f82fa574fc406ad"}, - {file = "fastapi-0.58.1.tar.gz", hash = "sha256:92e59b77eef7d6eaa80b16d275adda06b5f33b12d777e3fc5521b2f7f4718e13"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -graphene = [ - {file = "graphene-3.0-py2.py3-none-any.whl", hash = "sha256:57ce5ee7c9dc194224a1df96e4f7cb48d31eae96c791091d059f8f3d4d131390"}, - {file = "graphene-3.0.tar.gz", hash = "sha256:af48066e152200a071aac1e0b703954c717ec7268720ba190a0c91d9bcb0a122"}, -] -graphql-core = [ - {file = "graphql-core-3.1.7.tar.gz", hash = "sha256:62ec192150ccecd9a18cfb79e3e72eb7d1fd68fb594ef19c40099b6deec8ef0c"}, - {file = "graphql_core-3.1.7-py3-none-any.whl", hash = "sha256:9b460f60320be01c7f3b1766cf3e406933003008055079b9d983b8f3988f4400"}, -] -graphql-relay = [ - {file = "graphql-relay-3.1.5.tar.gz", hash = "sha256:127f40913f11cb847452ef794931261aae3b222eaaf976f7c8430298534e54d3"}, - {file = "graphql_relay-3.1.5-py3-none-any.whl", hash = "sha256:d1455316182e1017d06f0b4d4a2ce8bafad38253a6c7c5666fc80d5d516ee5c8"}, -] -gunicorn = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, -] -h11 = [ - {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, - {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, -] -httpcore = [ - {file = "httpcore-0.12.3-py3-none-any.whl", hash = "sha256:93e822cd16c32016b414b789aeff4e855d0ccbfc51df563ee34d4dbadbb3bcdc"}, - {file = "httpcore-0.12.3.tar.gz", hash = "sha256:37ae835fb370049b2030c3290e12ed298bf1473c41bb72ca4aa78681eba9b7c9"}, -] -httptools = [ - {file = "httptools-0.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:1e35aa179b67086cc600a984924a88589b90793c9c1b260152ca4908786e09df"}, - {file = "httptools-0.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c4111a0a8a00eff1e495d43ea5230aaf64968a48ddba8ea2d5f982efae827404"}, - {file = "httptools-0.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:dce59ee45dd6ee6c434346a5ac527c44014326f560866b4b2f414a692ee1aca8"}, - {file = "httptools-0.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f759717ca1b2ef498c67ba4169c2b33eecf943a89f5329abcff8b89d153eb500"}, - {file = "httptools-0.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:08b79e09114e6ab5c3dbf560bba2cb2257ea38cdaeaf99b7cb80d8f92622fcd9"}, - {file = "httptools-0.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:8fcca4b7efe353b13a24017211334c57d055a6e132c7adffed13a10d28efca57"}, - {file = "httptools-0.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:aebdf0bd7bf7c90ae6b3be458692bf6e9e5b610b501f9f74c7979015a51db4c4"}, - {file = "httptools-0.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:fbf7ecd31c39728f251b1c095fd27c84e4d21f60a1d079a0333472ff3ae59d34"}, - {file = "httptools-0.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c1c63d860749841024951b0a78e4dec6f543d23751ef061d6ab60064c7b8b524"}, - {file = "httptools-0.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fb7199b8fb0c50a22e77260bb59017e0c075fa80cb03bb2c8692de76e7bb7fe7"}, - {file = "httptools-0.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bda99a5723e7eab355ce57435c70853fc137a65aebf2f1cd4d15d96e2956da7b"}, - {file = "httptools-0.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:851026bd63ec0af7e7592890d97d15c92b62d9e17094353f19a52c8e2b33710a"}, - {file = "httptools-0.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:31629e1f1b89959f8c0927bad12184dc07977dcf71e24f4772934aa490aa199b"}, - {file = "httptools-0.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:9abd788465aa46a0f288bd3a99e53edd184177d6379e2098fd6097bb359ad9d6"}, - {file = "httptools-0.1.2.tar.gz", hash = "sha256:07659649fe6b3948b6490825f89abe5eb1cec79ebfaaa0b4bf30f3f33f3c2ba8"}, -] -httpx = [ - {file = "httpx-0.16.1-py3-none-any.whl", hash = "sha256:9cffb8ba31fac6536f2c8cde30df859013f59e4bcc5b8d43901cb3654a8e0a5b"}, - {file = "httpx-0.16.1.tar.gz", hash = "sha256:126424c279c842738805974687e0518a94c7ae8d140cd65b9c4f77ac46ffa537"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -immutables = [ - {file = "immutables-0.16-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:acbfa79d44228d96296279068441f980dc63dbed52522d9227ff9f4d96c6627e"}, - {file = "immutables-0.16-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c9ed003eacb92e630ef200e31f47236c2139b39476894f7963b32bd39bafa3"}, - {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a396314b9024fa55bf83a27813fd76cf9f27dce51f53b0f19b51de035146251"}, - {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a2a71678348fb95b13ca108d447f559a754c41b47bd1e7e4fb23974e735682d"}, - {file = "immutables-0.16-cp36-cp36m-win32.whl", hash = "sha256:064001638ab5d36f6aa05b6101446f4a5793fb71e522bc81b8fc65a1894266ff"}, - {file = "immutables-0.16-cp36-cp36m-win_amd64.whl", hash = "sha256:1de393f1b188740ca7b38f946f2bbc7edf3910d2048f03bbb8d01f17a038d67c"}, - {file = "immutables-0.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcf678a3074613119385a02a07c469ec5130559f5ea843c85a0840c80b5b71c6"}, - {file = "immutables-0.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a307eb0984eb43e815dcacea3ac50c11d00a936ecf694c46991cd5a23bcb0ec0"}, - {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a58825ff2254e2612c5a932174398a4ea8fbddd8a64a02c880cc32ee28b8820"}, - {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:798b095381eb42cf40db6876339e7bed84093e5868018a9e73d8e1f7ab4bb21e"}, - {file = "immutables-0.16-cp37-cp37m-win32.whl", hash = "sha256:19bdede174847c2ef1292df0f23868ab3918b560febb09fcac6eec621bd4812b"}, - {file = "immutables-0.16-cp37-cp37m-win_amd64.whl", hash = "sha256:9ccf4c0e3e2e3237012b516c74c49de8872ccdf9129739f7a0b9d7444a8c4862"}, - {file = "immutables-0.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d59beef203a3765db72b1d0943547425c8318ecf7d64c451fd1e130b653c2fbb"}, - {file = "immutables-0.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0020aaa4010b136056c20a46ce53204e1407a9e4464246cb2cf95b90808d9161"}, - {file = "immutables-0.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edd9f67671555af1eb99ad3c7550238487dd7ac0ac5205b40204ed61c9a922ac"}, - {file = "immutables-0.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:298a301f85f307b4c056a0825eb30f060e64d73605e783289f3df37dd762bab8"}, - {file = "immutables-0.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b779617f5b94486bfd0f22162cd72eb5f2beb0214a14b75fdafb7b2c908ed0cb"}, - {file = "immutables-0.16-cp38-cp38-win32.whl", hash = "sha256:511c93d8b1bbbf103ff3f1f120c5a68a9866ce03dea6ac406537f93ca9b19139"}, - {file = "immutables-0.16-cp38-cp38-win_amd64.whl", hash = "sha256:b651b61c1af6cda2ee201450f2ffe048a5959bc88e43e6c312f4c93e69c9e929"}, - {file = "immutables-0.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa7bf572ae1e006104c584be70dc634849cf0dc62f42f4ee194774f97e7fd17d"}, - {file = "immutables-0.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50793a44ba0d228ed8cad4d0925e00dfd62ea32f44ddee8854f8066447272d05"}, - {file = "immutables-0.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799621dcdcdcbb2516546a40123b87bf88de75fe7459f7bd8144f079ace6ec3e"}, - {file = "immutables-0.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7bcf52aeb983bd803b7c6106eae1b2d9a0c7ab1241bc6b45e2174ba2b7283031"}, - {file = "immutables-0.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:734c269e82e5f307fb6e17945953b67659d1731e65309787b8f7ba267d1468f2"}, - {file = "immutables-0.16-cp39-cp39-win32.whl", hash = "sha256:a454d5d3fee4b7cc627345791eb2ca4b27fa3bbb062ccf362ecaaa51679a07ed"}, - {file = "immutables-0.16-cp39-cp39-win_amd64.whl", hash = "sha256:2505d93395d3f8ae4223e21465994c3bc6952015a38dc4f03cb3e07a2b8d8325"}, - {file = "immutables-0.16.tar.gz", hash = "sha256:d67e86859598eed0d926562da33325dac7767b7b1eff84e232c22abea19f4360"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, - {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, -] -importlib-resources = [ - {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, - {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, -] -iso8601 = [ - {file = "iso8601-1.0.2-py3-none-any.whl", hash = "sha256:d7bc01b1c2a43b259570bb307f057abc578786ea734ba2b87b836c5efc5bd443"}, - {file = "iso8601-1.0.2.tar.gz", hash = "sha256:27f503220e6845d9db954fb212b95b0362d8b7e6c1b2326a87061c3de93594b1"}, -] -isort = [ - {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, - {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, -] -itsdangerous = [ - {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, - {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, -] -jinja2 = [ - {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, - {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, -] -jmespath = [ - {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"}, - {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"}, -] -jsonpatch = [ - {file = "jsonpatch-1.32-py2.py3-none-any.whl", hash = "sha256:26ac385719ac9f54df8a2f0827bb8253aa3ea8ab7b3368457bcdb8c14595a397"}, - {file = "jsonpatch-1.32.tar.gz", hash = "sha256:b6ddfe6c3db30d81a96aaeceb6baf916094ffa23d7dd5fa2c13e13f8b6e600c2"}, -] -jsonpointer = [ - {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"}, - {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, -] -keystoneauth1 = [ - {file = "keystoneauth1-3.17.4-py2.py3-none-any.whl", hash = "sha256:b184beb9b75338aaed557a0376d05a3b06c1fa88116b0be335f1402eea23f6f5"}, - {file = "keystoneauth1-3.17.4.tar.gz", hash = "sha256:407d6afacc6bcbd49d6a42770f552340cd1b615fc30b5d6abf98d179ed985862"}, -] -loguru = [ - {file = "loguru-0.5.3-py3-none-any.whl", hash = "sha256:f8087ac396b5ee5f67c963b495d615ebbceac2796379599820e324419d53667c"}, - {file = "loguru-0.5.3.tar.gz", hash = "sha256:b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319"}, -] -mako = [ - {file = "Mako-1.2.0-py3-none-any.whl", hash = "sha256:23aab11fdbbb0f1051b93793a58323ff937e98e34aece1c4219675122e57e4ba"}, - {file = "Mako-1.2.0.tar.gz", hash = "sha256:9a7c7e922b87db3686210cf49d5d767033a41d4010b284e747682c92bddd8b39"}, -] -markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -msgpack = [ - {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079"}, - {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3"}, - {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73"}, - {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147"}, - {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39"}, - {file = "msgpack-1.0.3-cp310-cp310-win32.whl", hash = "sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85"}, - {file = "msgpack-1.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7"}, - {file = "msgpack-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d"}, - {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b"}, - {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec"}, - {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770"}, - {file = "msgpack-1.0.3-cp36-cp36m-win32.whl", hash = "sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9"}, - {file = "msgpack-1.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a"}, - {file = "msgpack-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a"}, - {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc"}, - {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a"}, - {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920"}, - {file = "msgpack-1.0.3-cp37-cp37m-win32.whl", hash = "sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50"}, - {file = "msgpack-1.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba"}, - {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea"}, - {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a"}, - {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef"}, - {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611"}, - {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1"}, - {file = "msgpack-1.0.3-cp38-cp38-win32.whl", hash = "sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4"}, - {file = "msgpack-1.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a"}, - {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3"}, - {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52"}, - {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2"}, - {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996"}, - {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2"}, - {file = "msgpack-1.0.3-cp39-cp39-win32.whl", hash = "sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88"}, - {file = "msgpack-1.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d"}, - {file = "msgpack-1.0.3.tar.gz", hash = "sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e"}, -] -munch = [ - {file = "munch-2.5.0-py2.py3-none-any.whl", hash = "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd"}, - {file = "munch-2.5.0.tar.gz", hash = "sha256:2d735f6f24d4dba3417fa448cae40c6e896ec1fdab6cdb5e6510999758a4dbd2"}, -] -mypy = [ - {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, - {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, - {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, - {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, - {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, - {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, - {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, - {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, - {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, - {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, - {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, - {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, - {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, - {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, - {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, - {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, - {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, - {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, - {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, - {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, - {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, - {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, - {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, -] -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"}, -] -netaddr = [ - {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"}, - {file = "netaddr-0.8.0.tar.gz", hash = "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"}, -] -netifaces = [ - {file = "netifaces-0.11.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eb4813b77d5df99903af4757ce980a98c4d702bbcb81f32a0b305a1537bdf0b1"}, - {file = "netifaces-0.11.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5f9ca13babe4d845e400921973f6165a4c2f9f3379c7abfc7478160e25d196a4"}, - {file = "netifaces-0.11.0-cp27-cp27m-win32.whl", hash = "sha256:7dbb71ea26d304e78ccccf6faccef71bb27ea35e259fb883cfd7fd7b4f17ecb1"}, - {file = "netifaces-0.11.0-cp27-cp27m-win_amd64.whl", hash = "sha256:0f6133ac02521270d9f7c490f0c8c60638ff4aec8338efeff10a1b51506abe85"}, - {file = "netifaces-0.11.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08e3f102a59f9eaef70948340aeb6c89bd09734e0dca0f3b82720305729f63ea"}, - {file = "netifaces-0.11.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c03fb2d4ef4e393f2e6ffc6376410a22a3544f164b336b3a355226653e5efd89"}, - {file = "netifaces-0.11.0-cp34-cp34m-win32.whl", hash = "sha256:73ff21559675150d31deea8f1f8d7e9a9a7e4688732a94d71327082f517fc6b4"}, - {file = "netifaces-0.11.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815eafdf8b8f2e61370afc6add6194bd5a7252ae44c667e96c4c1ecf418811e4"}, - {file = "netifaces-0.11.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:50721858c935a76b83dd0dd1ab472cad0a3ef540a1408057624604002fcfb45b"}, - {file = "netifaces-0.11.0-cp35-cp35m-win32.whl", hash = "sha256:c9a3a47cd3aaeb71e93e681d9816c56406ed755b9442e981b07e3618fb71d2ac"}, - {file = "netifaces-0.11.0-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:aab1dbfdc55086c789f0eb37affccf47b895b98d490738b81f3b2360100426be"}, - {file = "netifaces-0.11.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c37a1ca83825bc6f54dddf5277e9c65dec2f1b4d0ba44b8fd42bc30c91aa6ea1"}, - {file = "netifaces-0.11.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:28f4bf3a1361ab3ed93c5ef360c8b7d4a4ae060176a3529e72e5e4ffc4afd8b0"}, - {file = "netifaces-0.11.0-cp36-cp36m-win32.whl", hash = "sha256:2650beee182fed66617e18474b943e72e52f10a24dc8cac1db36c41ee9c041b7"}, - {file = "netifaces-0.11.0-cp36-cp36m-win_amd64.whl", hash = "sha256:cb925e1ca024d6f9b4f9b01d83215fd00fe69d095d0255ff3f64bffda74025c8"}, - {file = "netifaces-0.11.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:84e4d2e6973eccc52778735befc01638498781ce0e39aa2044ccfd2385c03246"}, - {file = "netifaces-0.11.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18917fbbdcb2d4f897153c5ddbb56b31fa6dd7c3fa9608b7e3c3a663df8206b5"}, - {file = "netifaces-0.11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:48324183af7f1bc44f5f197f3dad54a809ad1ef0c78baee2c88f16a5de02c4c9"}, - {file = "netifaces-0.11.0-cp37-cp37m-win32.whl", hash = "sha256:8f7da24eab0d4184715d96208b38d373fd15c37b0dafb74756c638bd619ba150"}, - {file = "netifaces-0.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2479bb4bb50968089a7c045f24d120f37026d7e802ec134c4490eae994c729b5"}, - {file = "netifaces-0.11.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:3ecb3f37c31d5d51d2a4d935cfa81c9bc956687c6f5237021b36d6fdc2815b2c"}, - {file = "netifaces-0.11.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:96c0fe9696398253f93482c84814f0e7290eee0bfec11563bd07d80d701280c3"}, - {file = "netifaces-0.11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c92ff9ac7c2282009fe0dcb67ee3cd17978cffbe0c8f4b471c00fe4325c9b4d4"}, - {file = "netifaces-0.11.0-cp38-cp38-win32.whl", hash = "sha256:d07b01c51b0b6ceb0f09fc48ec58debd99d2c8430b09e56651addeaf5de48048"}, - {file = "netifaces-0.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:469fc61034f3daf095e02f9f1bbac07927b826c76b745207287bc594884cfd05"}, - {file = "netifaces-0.11.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5be83986100ed1fdfa78f11ccff9e4757297735ac17391b95e17e74335c2047d"}, - {file = "netifaces-0.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54ff6624eb95b8a07e79aa8817288659af174e954cca24cdb0daeeddfc03c4ff"}, - {file = "netifaces-0.11.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:841aa21110a20dc1621e3dd9f922c64ca64dd1eb213c47267a2c324d823f6c8f"}, - {file = "netifaces-0.11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e76c7f351e0444721e85f975ae92718e21c1f361bda946d60a214061de1f00a1"}, - {file = "netifaces-0.11.0.tar.gz", hash = "sha256:043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32"}, -] -openstacksdk = [ - {file = "openstacksdk-0.36.5-py2.py3-none-any.whl", hash = "sha256:3e06b6b2e07e195e5b9a905a9c3c0b067e361340f0b225c96d019117a5598622"}, - {file = "openstacksdk-0.36.5.tar.gz", hash = "sha256:9c2c35552c33d205191ed244cc1e5edf633396aa16cde6ced65654ff065ed167"}, -] -orjson = [ - {file = "orjson-3.6.8-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:3a287a650458de2211db03681b71c3e5cb2212b62f17a39df8ad99fc54855d0f"}, - {file = "orjson-3.6.8-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:5204e25c12cea58e524fc82f7c27ed0586f592f777b33075a92ab7b3eb3687c2"}, - {file = "orjson-3.6.8-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77e8386393add64f959c044e0fb682364fd0e611a6f477aa13f0e6a733bd6a28"}, - {file = "orjson-3.6.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:279f2d2af393fdf8601020744cb206b91b54ad60fb8401e0761819c7bda1f4e4"}, - {file = "orjson-3.6.8-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:c31c9f389be7906f978ed4192eb58a4b74a37ad60556a0b88ddc47c576697770"}, - {file = "orjson-3.6.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0db5c5a0c5b89f092d52f6e5a3701660a9d6ffa9e2968b3ce17c2bc4f5eb0414"}, - {file = "orjson-3.6.8-cp310-none-win_amd64.whl", hash = "sha256:eb22485847b9a0c4bbedc668df860126ac931edbed1d456cf41a59f3cb961ed8"}, - {file = "orjson-3.6.8-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:1a5fe569310bc819279bd4d5f2c349910b104ed3207936246dd5d5e0b085e74a"}, - {file = "orjson-3.6.8-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:ccb356a47ab1067cd3549847e9db1d279a63fe0482d315b3ffd6e7abef35ef77"}, - {file = "orjson-3.6.8-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab29c069c222248ce302a25855b4e1664f9436e8ae5a131fb0859daf31676d2b"}, - {file = "orjson-3.6.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d2b5e4cba9e774ac011071d9d27760f97f4b8cd46003e971d122e712f971345"}, - {file = "orjson-3.6.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:c311ec504414d22834d5b972a209619925b48263856a11a14d90230f9682d49c"}, - {file = "orjson-3.6.8-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:a3dfec7950b90fb8d143743503ee53fa06b32e6068bdea792fc866284da3d71d"}, - {file = "orjson-3.6.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b890dbbada2cbb26eb29bd43a848426f007f094bb0758df10dfe7a438e1cb4b4"}, - {file = "orjson-3.6.8-cp37-none-win_amd64.whl", hash = "sha256:9143ae2c52771525be9ad11a7a8cc8e7fd75391b107e7e644a9e0050496f6b4f"}, - {file = "orjson-3.6.8-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:33a82199fd42f6436f833e210ae5129c922a5c355629356ca7a8e82964da7285"}, - {file = "orjson-3.6.8-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:90159ea8b9a5a2a98fa33dc7b421cfac4d2ae91ba5e1058f5909e7f059f6b467"}, - {file = "orjson-3.6.8-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:656fbe15d9ef0733e740d9def78f4fdb4153102f4836ee774a05123499005931"}, - {file = "orjson-3.6.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7be3be6153843e0f01351b1313a5ad4723595427680dac2dfff22a37e652ce02"}, - {file = "orjson-3.6.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:dd24f66b6697ee7424f7da575ec6cbffc8ede441114d53470949cda4d97c6e56"}, - {file = "orjson-3.6.8-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:b07c780f7345ecf5901356dc21dee0669defc489c38ce7b9ab0f5e008cc0385c"}, - {file = "orjson-3.6.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ea32015a5d8a4ce00d348a0de5dc7040e0ad58f970a8fcbb5713a1eac129e493"}, - {file = "orjson-3.6.8-cp38-none-win_amd64.whl", hash = "sha256:c5a3e382194c838988ec128a26b08aa92044e5e055491cc4056142af0c1c54d7"}, - {file = "orjson-3.6.8-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:83a8424e857ae1bf53530e88b4eb2f16ca2b489073b924e655f1575cacd7f52a"}, - {file = "orjson-3.6.8-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:81e1a6a2d67f15007dadacbf9ba5d3d79237e5e33786c028557fe5a2b72f1c9a"}, - {file = "orjson-3.6.8-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:137b539881c77866eba86ff6a11df910daf2eb9ab8f1acae62f879e83d7c38af"}, - {file = "orjson-3.6.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2cbd358f3b3ad539a27e36900e8e7d172d0e1b72ad9dd7d69544dcbc0f067ee7"}, - {file = "orjson-3.6.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:6ab94701542d40b90903ecfc339333f458884979a01cb9268bc662cc67a5f6d8"}, - {file = "orjson-3.6.8-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:32b6f26593a9eb606b40775826beb0dac152e3d224ea393688fced036045a821"}, - {file = "orjson-3.6.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:afd9e329ebd3418cac3cd747769b1d52daa25fa672bbf414ab59f0e0881b32b9"}, - {file = "orjson-3.6.8-cp39-none-win_amd64.whl", hash = "sha256:0c89b419914d3d1f65a1b0883f377abe42a6e44f6624ba1c63e8846cbfc2fa60"}, - {file = "orjson-3.6.8.tar.gz", hash = "sha256:e19d23741c5de13689bb316abfccea15a19c264e3ec8eb332a5319a583595ace"}, -] -os-client-config = [ - {file = "os-client-config-2.1.0.tar.gz", hash = "sha256:abc38a351f8c006d34f7ee5f3f648de5e3ecf6455cc5d76cfd889d291cdf3f4e"}, - {file = "os_client_config-2.1.0-py3-none-any.whl", hash = "sha256:27bdc338f8a872814dc77ff3427844b4ea483cf95796571273aaf50dd1faf770"}, -] -os-service-types = [ - {file = "os-service-types-1.7.0.tar.gz", hash = "sha256:31800299a82239363995b91f1ebf9106ac7758542a1e4ef6dc737a5932878c6c"}, - {file = "os_service_types-1.7.0-py2.py3-none-any.whl", hash = "sha256:0505c72205690910077fb72b88f2a1f07533c8d39f2fe75b29583481764965d6"}, -] -osc-lib = [ - {file = "osc-lib-2.5.0.tar.gz", hash = "sha256:d8f8a450fab2a1294e0aef8cdc9a255a1bcc5b58e1b2f6098e35e6db1e13e9d1"}, - {file = "osc_lib-2.5.0-py3-none-any.whl", hash = "sha256:d6ad4f39a4582bc0ac9fba93a73b29d5ac22cb36e325db646194039fed5fa33b"}, -] -osc-placement = [ - {file = "osc-placement-1.7.0.tar.gz", hash = "sha256:68ac7dc7c58982a3b0cf625108e1d74092c01ec38a25769270074bc8093dcac1"}, - {file = "osc_placement-1.7.0-py2.py3-none-any.whl", hash = "sha256:fd6b867af2f0cd37ef8fe1e96c75d98c102ab14f0dbd5ddd5b32f6a1551246b0"}, -] -"oslo.config" = [ - {file = "oslo.config-8.8.0-py3-none-any.whl", hash = "sha256:b1e2a398450ea35a8e5630d8b23057b8939838c4433cd25a20cc3a36d5df9e3b"}, - {file = "oslo.config-8.8.0.tar.gz", hash = "sha256:96933d3011dae15608a11616bfb00d947e22da3cb09b6ff37ddd7576abd4764c"}, -] -"oslo.context" = [ - {file = "oslo.context-4.1.0-py3-none-any.whl", hash = "sha256:a0cf84fe7970cc070a821c1a88dc66dfceb81233a93f137a3715108804c7b9d5"}, - {file = "oslo.context-4.1.0.tar.gz", hash = "sha256:75a9a722a552fba8a89e8a01028fa82a6190ab317a9591bb83303a2210a79144"}, -] -"oslo.i18n" = [ - {file = "oslo.i18n-5.1.0-py3-none-any.whl", hash = "sha256:75086cfd898819638ca741159f677e2073a78ca86a9c9be8d38b46800cdf2dc9"}, - {file = "oslo.i18n-5.1.0.tar.gz", hash = "sha256:6bf111a6357d5449640852de4640eae4159b5562bbba4c90febb0034abc095d0"}, -] -"oslo.log" = [ - {file = "oslo.log-4.8.0-py3-none-any.whl", hash = "sha256:b061c66ec176cf5b197432709a7f14517b913abb6ea854ce6aaa997c8f7a4cb6"}, - {file = "oslo.log-4.8.0.tar.gz", hash = "sha256:9eddf6f6a2035327f2a3231a108b98e21ad90c0680380d9d1bc647ac9663e056"}, -] -"oslo.policy" = [ - {file = "oslo.policy-3.8.2-py3-none-any.whl", hash = "sha256:4102cb537ebabf23e6e5ca6df344bcc4c6725252434f07427b9baa4f101183d4"}, - {file = "oslo.policy-3.8.2.tar.gz", hash = "sha256:233030f9acbc3cb894c66943fd71406ec12825776021f5dda4afab6f1762837f"}, -] -"oslo.serialization" = [ - {file = "oslo.serialization-4.3.0-py3-none-any.whl", hash = "sha256:6c1c483231c3827787af9b6ca4a45f4e45fe364772a24692b02de78fe48eafb1"}, - {file = "oslo.serialization-4.3.0.tar.gz", hash = "sha256:3aa472f434aee8bbcc0725312b7f409aa1fa54bbc134904124cf49b0e86b9115"}, -] -"oslo.utils" = [ - {file = "oslo.utils-4.13.0-py3-none-any.whl", hash = "sha256:dab26f205980a379fe7068dd4f9010809a2ae7dddcbecde53e18cf8fa4a251d9"}, - {file = "oslo.utils-4.13.0.tar.gz", hash = "sha256:45ba8aaa5ed056a8e8e46059ef93d5c2d7b9c99bc7480e361cf5783e47f28fba"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pbr = [ - {file = "pbr-5.9.0-py2.py3-none-any.whl", hash = "sha256:e547125940bcc052856ded43be8e101f63828c2d94239ffbe2b327ba3d5ccf0a"}, - {file = "pbr-5.9.0.tar.gz", hash = "sha256:e8dca2f4b43560edef58813969f52a56cef023146cbb8931626db80e6c1c4308"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -prettytable = [ - {file = "prettytable-0.7.2.tar.bz2", hash = "sha256:853c116513625c738dc3ce1aee148b5b5757a86727e67eff6502c7ca59d43c36"}, - {file = "prettytable-0.7.2.tar.gz", hash = "sha256:2d5460dc9db74a32bcc8f9f67de68b2c4f4d2f01fa3bd518764c69156d9cacd9"}, - {file = "prettytable-0.7.2.zip", hash = "sha256:a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"}, -] -pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pydantic = [ - {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"}, - {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"}, - {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"}, - {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"}, - {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"}, - {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"}, - {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"}, - {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"}, - {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, - {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pyinotify = [ - {file = "pyinotify-0.9.6.tar.gz", hash = "sha256:9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4"}, -] -pymysql = [ - {file = "PyMySQL-0.9.3-py2.py3-none-any.whl", hash = "sha256:3943fbbbc1e902f41daf7f9165519f140c4451c179380677e6a848587042561a"}, - {file = "PyMySQL-0.9.3.tar.gz", hash = "sha256:d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7"}, -] -pyopenssl = [ - {file = "pyOpenSSL-22.0.0-py2.py3-none-any.whl", hash = "sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0"}, - {file = "pyOpenSSL-22.0.0.tar.gz", hash = "sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyperclip = [ - {file = "pyperclip-1.8.2.tar.gz", hash = "sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57"}, -] -pyreadline3 = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] -pyrsistent = [ - {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, - {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, - {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, - {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, -] -python-cinderclient = [ - {file = "python-cinderclient-5.0.2.tar.gz", hash = "sha256:4fa0822cdf9eae8ee2c4a5c6625a17ad36205ace8fee2fa02d2229f86a0aeb94"}, - {file = "python_cinderclient-5.0.2-py2.py3-none-any.whl", hash = "sha256:895e79be709d476d168e6966491aeb2587606f16af67592eedfa59c3be25d9c3"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -python-dotenv = [ - {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"}, - {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"}, -] -python-glanceclient = [ - {file = "python-glanceclient-2.17.1.tar.gz", hash = "sha256:342ae26f9be89fef5929384843b8f0601dd1149a618329774b846cb3540fac8e"}, - {file = "python_glanceclient-2.17.1-py2.py3-none-any.whl", hash = "sha256:e537fc6e17b5bae6ed9fa296544882d0131b92e6a676f03d14309851839096f0"}, -] -python-heatclient = [ - {file = "python-heatclient-1.18.1.tar.gz", hash = "sha256:299b6048fb87e53af358a4a71ef6c1f39237187b402bb132e9bb5802d96ac35a"}, - {file = "python_heatclient-1.18.1-py2.py3-none-any.whl", hash = "sha256:c08a22020fc348c40f9b73cb518d40f0852008c97467c956c3c28a46f918d7aa"}, -] -python-jose = [ - {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"}, - {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"}, -] -python-keystoneclient = [ - {file = "python-keystoneclient-3.21.0.tar.gz", hash = "sha256:1a34aa80bc65bbe9b3beb24df317e773d98a270cdd53a307fd5c00cfa833ea0e"}, - {file = "python_keystoneclient-3.21.0-py2.py3-none-any.whl", hash = "sha256:0825eed18fb854b0bd106b45adff227ee01d0315462b1e66c63278e878e35c87"}, -] -python-multipart = [ - {file = "python-multipart-0.0.5.tar.gz", hash = "sha256:f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43"}, -] -python-neutronclient = [ - {file = "python-neutronclient-6.14.1.tar.gz", hash = "sha256:c53c5b9a1df8b2bc0fef949c40752a5030cdb2f6aa435464c454e2dca5f0f531"}, - {file = "python_neutronclient-6.14.1-py2.py3-none-any.whl", hash = "sha256:af9a81a9ea6d673a0b8d87a6114b835d13abddaad8c43ec5b050fe1e9f350e91"}, -] -python-novaclient = [ - {file = "python-novaclient-15.1.1.tar.gz", hash = "sha256:2d7e3d26ca5e14cdef79a8c6cbf4890d3fb1a83d64f1dedc6f15b56eb9077289"}, - {file = "python_novaclient-15.1.1-py2.py3-none-any.whl", hash = "sha256:2e7bb7a033b068e756e0ee70454887c6e17fa588bd17eef8ec5fd13ad9199966"}, -] -python-octaviaclient = [ - {file = "python-octaviaclient-1.10.1.tar.gz", hash = "sha256:5d887a58105a77c566fd835af30de11af07d8a5b13a4bdcaff0d940f371c6f25"}, - {file = "python_octaviaclient-1.10.1-py3-none-any.whl", hash = "sha256:983e8d93a482cc50bf844536f9e7043f153bb8d3c720b28e238d54aced09c273"}, -] -python-openstackclient = [ - {file = "python-openstackclient-4.0.2.tar.gz", hash = "sha256:b82edfe707988fe3b0eefc125f8775394289dc50e604f6a2aa814e535e4a764a"}, - {file = "python_openstackclient-4.0.2-py2.py3-none-any.whl", hash = "sha256:06f728711b3f19582637b7227656d0a4d330d2a67cabd586be56f9f4713a97c0"}, -] -python-swiftclient = [ - {file = "python-swiftclient-3.13.1.tar.gz", hash = "sha256:2d26c90b6392f6befa7fbb16fcda7be44aa26e2ae8a5bee2705d1d1c813833f0"}, - {file = "python_swiftclient-3.13.1-py2.py3-none-any.whl", hash = "sha256:984805daa56148eba4e7fc8c4d76e0b044572f9ccdee0390bf8027bc3c2e43a8"}, -] -pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, -] -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"}, -] -regex = [ - {file = "regex-2022.4.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f86aef546add4ff1202e1f31e9bb54f9268f17d996b2428877283146bf9bc013"}, - {file = "regex-2022.4.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e944268445b5694f5d41292c9228f0ca46d5a32a67f195d5f8547c1f1d91f4bc"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8da3145f4b72f7ce6181c804eaa44cdcea313c8998cdade3d9e20a8717a9cb"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fd464e547dbabf4652ca5fe9d88d75ec30182981e737c07b3410235a44b9939"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:071bcb625e890f28b7c4573124a6512ea65107152b1d3ca101ce33a52dad4593"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c2de7f32fa87d04d40f54bce3843af430697aba51c3a114aa62837a0772f219"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a07e8366115069f26822c47732122ab61598830a69f5629a37ea8881487c107"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:036d1c1fbe69eba3ee253c107e71749cdbb4776db93d674bc0d5e28f30300734"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:af1e687ffab18a75409e5e5d6215b6ccd41a5a1a0ea6ce9665e01253f737a0d3"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:165cc75cfa5aa0f12adb2ac6286330e7229a06dc0e6c004ec35da682b5b89579"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:3e35c50b27f36176c792738cb9b858523053bc495044d2c2b44db24376b266f1"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:43ee0df35925ae4b0cc6ee3f60b73369e559dd2ac40945044da9394dd9d3a51d"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58521abdab76583bd41ef47e5e2ddd93b32501aee4ee8cee71dee10a45ba46b1"}, - {file = "regex-2022.4.24-cp310-cp310-win32.whl", hash = "sha256:275afc7352982ee947fc88f67a034b52c78395977b5fc7c9be15f7dc95b76f06"}, - {file = "regex-2022.4.24-cp310-cp310-win_amd64.whl", hash = "sha256:253f858a0255cd91a0424a4b15c2eedb12f20274f85731b0d861c8137e843065"}, - {file = "regex-2022.4.24-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:85b7ee4d0c7a46296d884f6b489af8b960c4291d76aea4b22fd4fbe05e6ec08e"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0da7ef160d4f3eb3d4d3e39a02c3c42f7dbcfce62c81f784cc99fc7059765f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f2e2cef324ca9355049ee1e712f68e2e92716eba24275e6767b9bfa15f1f478"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6165e737acb3bea3271372e8aa5ebe7226c8a8e8da1b94af2d6547c5a09d689d"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f6bd8178cce5bb56336722d5569d19c50bba5915a69a2050c497fb921e7cb0f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45b761406777a681db0c24686178532134c937d24448d9e085279b69e9eb7da4"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dfbadb7b74d95f72f9f9dbf9778f7de92722ab520a109ceaf7927461fa85b10"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9913bcf730eb6e9b441fb176832eea9acbebab6035542c7c89d90c803f5cd3be"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:68aed3fb0c61296bd6d234f558f78c51671f79ccb069cbcd428c2eea6fee7a5b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8e7d33f93cdd01868327d834d0f5bb029241cd293b47d51b96814dec27fc9b4b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:82b7fc67e49fdce671bdbec1127189fc979badf062ce6e79dc95ef5e07a8bf92"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c36906a7855ec33a9083608e6cd595e4729dab18aeb9aad0dd0b039240266239"}, - {file = "regex-2022.4.24-cp36-cp36m-win32.whl", hash = "sha256:b2df3ede85d778c949d9bd2a50237072cee3df0a423c91f5514f78f8035bde87"}, - {file = "regex-2022.4.24-cp36-cp36m-win_amd64.whl", hash = "sha256:dffd9114ade73137ab2b79a8faf864683dbd2dbbb6b23a305fbbd4cbaeeb2187"}, - {file = "regex-2022.4.24-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a0ef57cccd8089b4249eebad95065390e56c04d4a92c51316eab4131bca96a9"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12af15b6edb00e425f713160cfd361126e624ec0de86e74f7cad4b97b7f169b3"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f271d0831d8ebc56e17b37f9fa1824b0379221d1238ae77c18a6e8c47f1fdce"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37903d5ca11fa47577e8952d2e2c6de28553b11c70defee827afb941ab2c6729"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b747cef8e5dcdaf394192d43a0c02f5825aeb0ecd3d43e63ae500332ab830b0"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:582ea06079a03750b5f71e20a87cd99e646d796638b5894ff85987ebf5e04924"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa6daa189db9104787ff1fd7a7623ce017077aa59eaac609d0d25ba95ed251a0"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7dbc96419ef0fb6ac56626014e6d3a345aeb8b17a3df8830235a88626ffc8d84"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0fb6cb16518ac7eff29d1e0b0cce90275dfae0f17154165491058c31d58bdd1d"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bea61de0c688198e3d9479344228c7accaa22a78b58ec408e41750ebafee6c08"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:46cbc5b23f85e94161b093dba1b49035697cf44c7db3c930adabfc0e6d861b95"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:50b77622016f03989cd06ecf6b602c7a6b4ed2e3ce04133876b041d109c934ee"}, - {file = "regex-2022.4.24-cp37-cp37m-win32.whl", hash = "sha256:2bde99f2cdfd6db1ec7e02d68cadd384ffe7413831373ea7cc68c5415a0cb577"}, - {file = "regex-2022.4.24-cp37-cp37m-win_amd64.whl", hash = "sha256:66fb765b2173d90389384708e3e1d3e4be1148bd8d4d50476b1469da5a2f0229"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:709396c0c95b95045fac89b94f997410ff39b81a09863fe21002f390d48cc7d3"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a608022f4593fc67518c6c599ae5abdb03bb8acd75993c82cd7a4c8100eff81"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb7107faf0168de087f62a2f2ed00f9e9da12e0b801582b516ddac236b871cda"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aabc28f7599f781ddaeac168d0b566d0db82182cc3dcf62129f0a4fc2927b811"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92ad03f928675ca05b79d3b1d3dfc149e2226d57ed9d57808f82105d511d0212"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ba3c304a4a5d8112dbd30df8b3e4ef59b4b07807957d3c410d9713abaee9a8"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2acf5c66fbb62b5fe4c40978ddebafa50818f00bf79d60569d9762f6356336e"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c4d9770e579eb11b582b2e2fd19fa204a15cb1589ae73cd4dcbb63b64f3e828"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:02543d6d5c32d361b7cc468079ba4cddaaf4a6544f655901ba1ff9d8e3f18755"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:73ed1b06abadbf6b61f6033a07c06f36ec0ddca117e41ef2ac37056705e46458"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3241db067a7f69da57fba8bca543ac8a7ca415d91e77315690202749b9fdaba1"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d128e278e5e554c5c022c7bed410ca851e00bacebbb4460de546a73bc53f8de4"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1d53835922cd0f9b74b2742453a444865a70abae38d12eb41c59271da66f38d"}, - {file = "regex-2022.4.24-cp38-cp38-win32.whl", hash = "sha256:f2a5d9f612091812dee18375a45d046526452142e7b78c4e21ab192db15453d5"}, - {file = "regex-2022.4.24-cp38-cp38-win_amd64.whl", hash = "sha256:a850f5f369f1e3b6239da7fb43d1d029c1e178263df671819889c47caf7e4ff3"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bedb3d01ad35ea1745bdb1d57f3ee0f996f988c98f5bbae9d068c3bb3065d210"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8bf867ba71856414a482e4b683500f946c300c4896e472e51d3db8dfa8dc8f32"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b415b82e5be7389ec5ee7ee35431e4a549ea327caacf73b697c6b3538cb5c87f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dae5affbb66178dad6c6fd5b02221ca9917e016c75ee3945e9a9563eb1fbb6f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e65580ae3137bce712f505ec7c2d700aef0014a3878c4767b74aff5895fc454f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e9e983fc8e0d4d5ded7caa5aed39ca2cf6026d7e39801ef6f0af0b1b6cd9276"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad3a770839aa456ff9a9aa0e253d98b628d005a3ccb37da1ff9be7c84fee16"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed625205f5f26984382b68e4cbcbc08e6603c9e84c14b38457170b0cc71c823b"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c4fdf837666f7793a5c3cfa2f2f39f03eb6c7e92e831bc64486c2f547580c2b3"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ed26c3d2d62c6588e0dad175b8d8cc0942a638f32d07b80f92043e5d73b7db67"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f89d26e50a4c7453cb8c415acd09e72fbade2610606a9c500a1e48c43210a42d"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:97af238389cb029d63d5f2d931a7e8f5954ad96e812de5faaed373b68e74df86"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:be392d9cd5309509175a9d7660dc17bf57084501108dbff0c5a8bfc3646048c3"}, - {file = "regex-2022.4.24-cp39-cp39-win32.whl", hash = "sha256:bcc6f7a3a95119c3568c572ca167ada75f8319890706283b9ba59b3489c9bcb3"}, - {file = "regex-2022.4.24-cp39-cp39-win_amd64.whl", hash = "sha256:5b9c7b6895a01204296e9523b3e12b43e013835a9de035a783907c2c1bc447f0"}, - {file = "regex-2022.4.24.tar.gz", hash = "sha256:92183e9180c392371079262879c6532ccf55f808e6900df5d9f03c9ca8807255"}, -] -requests = [ - {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, - {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, -] -requestsexceptions = [ - {file = "requestsexceptions-1.4.0-py2.py3-none-any.whl", hash = "sha256:3083d872b6e07dc5c323563ef37671d992214ad9a32b0ca4a3d7f5500bf38ce3"}, - {file = "requestsexceptions-1.4.0.tar.gz", hash = "sha256:b095cbc77618f066d459a02b137b020c37da9f46d9b057704019c9f77dba3065"}, -] -rfc3986 = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] -rsa = [ - {file = "rsa-4.8-py3-none-any.whl", hash = "sha256:95c5d300c4e879ee69708c428ba566c59478fd653cc3a22243eeb8ed846950bb"}, - {file = "rsa-4.8.tar.gz", hash = "sha256:5c6bd9dc7a543b7fe4304a631f8a8a3b674e2bbfc49c2ae96200cdbe55df6b17"}, -] -simplejson = [ - {file = "simplejson-3.17.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a89acae02b2975b1f8e4974cb8cdf9bf9f6c91162fb8dec50c259ce700f2770a"}, - {file = "simplejson-3.17.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:82ff356ff91be0ab2293fc6d8d262451eb6ac4fd999244c4b5f863e049ba219c"}, - {file = "simplejson-3.17.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:0de783e9c2b87bdd75b57efa2b6260c24b94605b5c9843517577d40ee0c3cc8a"}, - {file = "simplejson-3.17.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:d24a9e61df7a7787b338a58abfba975414937b609eb6b18973e25f573bc0eeeb"}, - {file = "simplejson-3.17.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e8603e691580487f11306ecb066c76f1f4a8b54fb3bdb23fa40643a059509366"}, - {file = "simplejson-3.17.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9b01e7b00654115965a206e3015f0166674ec1e575198a62a977355597c0bef5"}, - {file = "simplejson-3.17.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:37bc0cf0e5599f36072077e56e248f3336917ded1d33d2688624d8ed3cefd7d2"}, - {file = "simplejson-3.17.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cf6e7d5fe2aeb54898df18db1baf479863eae581cce05410f61f6b4188c8ada1"}, - {file = "simplejson-3.17.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:bdfc54b4468ed4cd7415928cbe782f4d782722a81aeb0f81e2ddca9932632211"}, - {file = "simplejson-3.17.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd16302d39c4d6f4afde80edd0c97d4db643327d355a312762ccd9bd2ca515ed"}, - {file = "simplejson-3.17.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:deac4bdafa19bbb89edfb73b19f7f69a52d0b5bd3bb0c4ad404c1bbfd7b4b7fd"}, - {file = "simplejson-3.17.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8bbdb166e2fb816e43ab034c865147edafe28e1b19c72433147789ac83e2dda"}, - {file = "simplejson-3.17.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7854326920d41c3b5d468154318fe6ba4390cb2410480976787c640707e0180"}, - {file = "simplejson-3.17.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:04e31fa6ac8e326480703fb6ded1488bfa6f1d3f760d32e29dbf66d0838982ce"}, - {file = "simplejson-3.17.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f63600ec06982cdf480899026f4fda622776f5fabed9a869fdb32d72bc17e99a"}, - {file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e03c3b8cc7883a54c3f34a6a135c4a17bc9088a33f36796acdb47162791b02f6"}, - {file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a2d30d6c1652140181dc6861f564449ad71a45e4f165a6868c27d36745b65d40"}, - {file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1aa6e4cae8e3b8d5321be4f51c5ce77188faf7baa9fe1e78611f93a8eed2882"}, - {file = "simplejson-3.17.6-cp310-cp310-win32.whl", hash = "sha256:97202f939c3ff341fc3fa84d15db86156b1edc669424ba20b0a1fcd4a796a045"}, - {file = "simplejson-3.17.6-cp310-cp310-win_amd64.whl", hash = "sha256:80d3bc9944be1d73e5b1726c3bbfd2628d3d7fe2880711b1eb90b617b9b8ac70"}, - {file = "simplejson-3.17.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9fa621b3c0c05d965882c920347b6593751b7ab20d8fa81e426f1735ca1a9fc7"}, - {file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2fb11922f58df8528adfca123f6a84748ad17d066007e7ac977720063556bd"}, - {file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:724c1fe135aa437d5126138d977004d165a3b5e2ee98fc4eb3e7c0ef645e7e27"}, - {file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4ff4ac6ff3aa8f814ac0f50bf218a2e1a434a17aafad4f0400a57a8cc62ef17f"}, - {file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:67093a526e42981fdd954868062e56c9b67fdd7e712616cc3265ad0c210ecb51"}, - {file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b4af7ad7e4ac515bc6e602e7b79e2204e25dbd10ab3aa2beef3c5a9cad2c7"}, - {file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:1c9b1ed7ed282b36571638297525f8ef80f34b3e2d600a56f962c6044f24200d"}, - {file = "simplejson-3.17.6-cp36-cp36m-win32.whl", hash = "sha256:632ecbbd2228575e6860c9e49ea3cc5423764d5aa70b92acc4e74096fb434044"}, - {file = "simplejson-3.17.6-cp36-cp36m-win_amd64.whl", hash = "sha256:4c09868ddb86bf79b1feb4e3e7e4a35cd6e61ddb3452b54e20cf296313622566"}, - {file = "simplejson-3.17.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b6bd8144f15a491c662f06814bd8eaa54b17f26095bb775411f39bacaf66837"}, - {file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5decdc78849617917c206b01e9fc1d694fd58caa961be816cb37d3150d613d9a"}, - {file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:521877c7bd060470806eb6335926e27453d740ac1958eaf0d8c00911bc5e1802"}, - {file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:65b998193bd7b0c7ecdfffbc825d808eac66279313cb67d8892bb259c9d91494"}, - {file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ac786f6cb7aa10d44e9641c7a7d16d7f6e095b138795cd43503769d4154e0dc2"}, - {file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3ff5b3464e1ce86a8de8c88e61d4836927d5595c2162cab22e96ff551b916e81"}, - {file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:69bd56b1d257a91e763256d63606937ae4eb890b18a789b66951c00062afec33"}, - {file = "simplejson-3.17.6-cp37-cp37m-win32.whl", hash = "sha256:b81076552d34c27e5149a40187a8f7e2abb2d3185576a317aaf14aeeedad862a"}, - {file = "simplejson-3.17.6-cp37-cp37m-win_amd64.whl", hash = "sha256:07ecaafc1b1501f275bf5acdee34a4ad33c7c24ede287183ea77a02dc071e0c0"}, - {file = "simplejson-3.17.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:068670af975247acbb9fc3d5393293368cda17026db467bf7a51548ee8f17ee1"}, - {file = "simplejson-3.17.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4d1c135af0c72cb28dd259cf7ba218338f4dc027061262e46fe058b4e6a4c6a3"}, - {file = "simplejson-3.17.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23fe704da910ff45e72543cbba152821685a889cf00fc58d5c8ee96a9bad5f94"}, - {file = "simplejson-3.17.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f444762fed1bc1fd75187ef14a20ed900c1fbb245d45be9e834b822a0223bc81"}, - {file = "simplejson-3.17.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:681eb4d37c9a9a6eb9b3245a5e89d7f7b2b9895590bb08a20aa598c1eb0a1d9d"}, - {file = "simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e8607d8f6b4f9d46fee11447e334d6ab50e993dd4dbfb22f674616ce20907ab"}, - {file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b10556817f09d46d420edd982dd0653940b90151d0576f09143a8e773459f6fe"}, - {file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e1ec8a9ee0987d4524ffd6299e778c16cc35fef6d1a2764e609f90962f0b293a"}, - {file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0b4126cac7d69ac06ff22efd3e0b3328a4a70624fcd6bca4fc1b4e6d9e2e12bf"}, - {file = "simplejson-3.17.6-cp38-cp38-win32.whl", hash = "sha256:35a49ebef25f1ebdef54262e54ae80904d8692367a9f208cdfbc38dbf649e00a"}, - {file = "simplejson-3.17.6-cp38-cp38-win_amd64.whl", hash = "sha256:743cd768affaa508a21499f4858c5b824ffa2e1394ed94eb85caf47ac0732198"}, - {file = "simplejson-3.17.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb62d517a516128bacf08cb6a86ecd39fb06d08e7c4980251f5d5601d29989ba"}, - {file = "simplejson-3.17.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:12133863178a8080a3dccbf5cb2edfab0001bc41e5d6d2446af2a1131105adfe"}, - {file = "simplejson-3.17.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5540fba2d437edaf4aa4fbb80f43f42a8334206ad1ad3b27aef577fd989f20d9"}, - {file = "simplejson-3.17.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d74ee72b5071818a1a5dab47338e87f08a738cb938a3b0653b9e4d959ddd1fd9"}, - {file = "simplejson-3.17.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28221620f4dcabdeac310846629b976e599a13f59abb21616356a85231ebd6ad"}, - {file = "simplejson-3.17.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b09bc62e5193e31d7f9876220fb429ec13a6a181a24d897b9edfbbdbcd678851"}, - {file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7255a37ff50593c9b2f1afa8fafd6ef5763213c1ed5a9e2c6f5b9cc925ab979f"}, - {file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:401d40969cee3df7bda211e57b903a534561b77a7ade0dd622a8d1a31eaa8ba7"}, - {file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a649d0f66029c7eb67042b15374bd93a26aae202591d9afd71e111dd0006b198"}, - {file = "simplejson-3.17.6-cp39-cp39-win32.whl", hash = "sha256:522fad7be85de57430d6d287c4b635813932946ebf41b913fe7e880d154ade2e"}, - {file = "simplejson-3.17.6-cp39-cp39-win_amd64.whl", hash = "sha256:3fe87570168b2ae018391e2b43fbf66e8593a86feccb4b0500d134c998983ccc"}, - {file = "simplejson-3.17.6.tar.gz", hash = "sha256:cf98038d2abf63a1ada5730e91e84c642ba6c225b0198c3684151b1f80c5f8a6"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -skyline-apiserver = [] -skyline-config = [] -skyline-console = [ - {file = "skyline_console-0.1.0-py2.py3-none-any.whl", hash = "sha256:42b25a064f7e12bd12c5128608016123efd28576974cffe5c63645264aa006d7"}, -] -skyline-log = [] -sniffio = [ - {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, - {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, -] -sqlalchemy = [ - {file = "SQLAlchemy-1.3.24-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:87a2725ad7d41cd7376373c15fd8bf674e9c33ca56d0b8036add2d634dba372e"}, - {file = "SQLAlchemy-1.3.24-cp27-cp27m-win32.whl", hash = "sha256:f597a243b8550a3a0b15122b14e49d8a7e622ba1c9d29776af741f1845478d79"}, - {file = "SQLAlchemy-1.3.24-cp27-cp27m-win_amd64.whl", hash = "sha256:fc4cddb0b474b12ed7bdce6be1b9edc65352e8ce66bc10ff8cbbfb3d4047dbf4"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:f1149d6e5c49d069163e58a3196865e4321bad1803d7886e07d8710de392c548"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:14f0eb5db872c231b20c18b1e5806352723a3a89fb4254af3b3e14f22eaaec75"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:e98d09f487267f1e8d1179bf3b9d7709b30a916491997137dd24d6ae44d18d79"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:fc1f2a5a5963e2e73bac4926bdaf7790c4d7d77e8fc0590817880e22dd9d0b8b"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-win32.whl", hash = "sha256:f3c5c52f7cb8b84bfaaf22d82cb9e6e9a8297f7c2ed14d806a0f5e4d22e83fb7"}, - {file = "SQLAlchemy-1.3.24-cp35-cp35m-win_amd64.whl", hash = "sha256:0352db1befcbed2f9282e72843f1963860bf0e0472a4fa5cf8ee084318e0e6ab"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:2ed6343b625b16bcb63c5b10523fd15ed8934e1ed0f772c534985e9f5e73d894"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:34fcec18f6e4b24b4a5f6185205a04f1eab1e56f8f1d028a2a03694ebcc2ddd4"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e47e257ba5934550d7235665eee6c911dc7178419b614ba9e1fbb1ce6325b14f"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:816de75418ea0953b5eb7b8a74933ee5a46719491cd2b16f718afc4b291a9658"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-win32.whl", hash = "sha256:26155ea7a243cbf23287f390dba13d7927ffa1586d3208e0e8d615d0c506f996"}, - {file = "SQLAlchemy-1.3.24-cp36-cp36m-win_amd64.whl", hash = "sha256:f03bd97650d2e42710fbe4cf8a59fae657f191df851fc9fc683ecef10746a375"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:a006d05d9aa052657ee3e4dc92544faae5fcbaafc6128217310945610d862d39"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1e2f89d2e5e3c7a88e25a3b0e43626dba8db2aa700253023b82e630d12b37109"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0d5d862b1cfbec5028ce1ecac06a3b42bc7703eb80e4b53fceb2738724311443"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:0172423a27fbcae3751ef016663b72e1a516777de324a76e30efa170dbd3dd2d"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-win32.whl", hash = "sha256:d37843fb8df90376e9e91336724d78a32b988d3d20ab6656da4eb8ee3a45b63c"}, - {file = "SQLAlchemy-1.3.24-cp37-cp37m-win_amd64.whl", hash = "sha256:c10ff6112d119f82b1618b6dc28126798481b9355d8748b64b9b55051eb4f01b"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:861e459b0e97673af6cc5e7f597035c2e3acdfb2608132665406cded25ba64c7"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5de2464c254380d8a6c20a2746614d5a436260be1507491442cf1088e59430d2"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d375d8ccd3cebae8d90270f7aa8532fe05908f79e78ae489068f3b4eee5994e8"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:014ea143572fee1c18322b7908140ad23b3994036ef4c0d630110faf942652f8"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-win32.whl", hash = "sha256:6607ae6cd3a07f8a4c3198ffbf256c261661965742e2b5265a77cd5c679c9bba"}, - {file = "SQLAlchemy-1.3.24-cp38-cp38-win_amd64.whl", hash = "sha256:fcb251305fa24a490b6a9ee2180e5f8252915fb778d3dafc70f9cc3f863827b9"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01aa5f803db724447c1d423ed583e42bf5264c597fd55e4add4301f163b0be48"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4d0e3515ef98aa4f0dc289ff2eebb0ece6260bbf37c2ea2022aad63797eacf60"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:bce28277f308db43a6b4965734366f533b3ff009571ec7ffa583cb77539b84d6"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:8110e6c414d3efc574543109ee618fe2c1f96fa31833a1ff36cc34e968c4f233"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-win32.whl", hash = "sha256:ee5f5188edb20a29c1cc4a039b074fdc5575337c9a68f3063449ab47757bb064"}, - {file = "SQLAlchemy-1.3.24-cp39-cp39-win_amd64.whl", hash = "sha256:09083c2487ca3c0865dc588e07aeaa25416da3d95f7482c07e92f47e080aa17b"}, - {file = "SQLAlchemy-1.3.24.tar.gz", hash = "sha256:ebbb777cbf9312359b897bf81ba00dae0f5cb69fba2a18265dcc18a6f5ef7519"}, -] -starlette = [ - {file = "starlette-0.13.4-py3-none-any.whl", hash = "sha256:0fb4b38d22945b46acb880fedee7ee143fd6c0542992501be8c45c0ed737dd1a"}, - {file = "starlette-0.13.4.tar.gz", hash = "sha256:04fe51d86fd9a594d9b71356ed322ccde5c9b448fc716ac74155e5821a922f8d"}, -] -stevedore = [ - {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, - {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, -] -tokenize-rt = [ - {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, - {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, -] -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-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -ujson = [ - {file = "ujson-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:754e9da96a24535ae5ab2a52e1d1dfc65a6a717c14063855b83f327fdf2173ea"}, - {file = "ujson-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6227597d0201ceadc902d1a8edaffaeb244050b197368ed25e6f6be0df170a6f"}, - {file = "ujson-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be909514a47b6272e34cd1213feee324ca35a354e07f1ae3aba12d3694a5279f"}, - {file = "ujson-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:489d495431c80dc0048c4551a0d6cdbf1209e2d274f47c3f72415c91842eeb68"}, - {file = "ujson-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d1ed3897e45477b2a4a1371186df299b13938d4d44d850953a4bb0ea4cb38f3"}, - {file = "ujson-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:102b8eb5e15e6c5537426414d180c28dbf0489e51f7c22b706511ac84aae4458"}, - {file = "ujson-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2c04456de1fc92cc7062904c176c74e6ea220469b949508be42e819646a28457"}, - {file = "ujson-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a3c6798035b574ceba747de83f3223a622622b7ab77a24f8b4fbea2cb92f14b0"}, - {file = "ujson-5.2.0-cp310-cp310-win32.whl", hash = "sha256:27a254a150e46980608b16ef3b609e703173492cfa738f4644c81d7e7d77494c"}, - {file = "ujson-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c3f7578a62d9255650ef32e78d3345e98262e064c9ba3f205311b4c9eb507a6"}, - {file = "ujson-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:584c558c23ddc21f5b07d2c54ee527731bd9716101c27829023ab7f3ffbaa8fc"}, - {file = "ujson-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d57a87bbc77d66b8a2b74bab66357c3bb6194f5d248f1053fb8044787abde73f"}, - {file = "ujson-5.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb4555df1fe018806ba14cc38786269c8e213930103c6d0ac81e506d09d1de7e"}, - {file = "ujson-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d38c2a58c892c680080b22b59eebd77b7c6f4ae24361111fba115f9ed3651dcf"}, - {file = "ujson-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a6f3ad3b11578bc4e25d5bd256c938fe2c7c015d8f504bc7835f127ed26a0818"}, - {file = "ujson-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b5fcbaabf3d115cb816eb165f3fa5de5c5bc795473a554ae55620d134ddf2d36"}, - {file = "ujson-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a1a55b3310632661a03ce68ccfb92264031aea21626d6fa5c8f6c32e769be7b6"}, - {file = "ujson-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:04a8c388b2d16316df3365c81f368955662581f6a4ff033e9aba2dd1ffc9e05e"}, - {file = "ujson-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d2357ce7d93eadd29b6efbe72228809948cc59ec6682c20fa6de08aeef1703f8"}, - {file = "ujson-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e53388fb092197cb8f956673792aca994872917d897ca42a0abf7a35e293575a"}, - {file = "ujson-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dc71ead5706e81fdf1054c8c11e4aaab43527da450a2701213c20717852d1a51"}, - {file = "ujson-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:350a3010db0045e1306bbdf889d1bdaee9bb095856c317716f0a74108cf4afe9"}, - {file = "ujson-5.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acc874128baddeff908736db251597e4cbd007a384730377a59a61b08886599"}, - {file = "ujson-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c549d5a7652c3a0dd00ef6ff910fb01878bc116c66c94ac455a55cffa32cc229"}, - {file = "ujson-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ed78a5b169ece75a1e1368935ce6ab051dcbcd5c158b9796b2f1fa6cc467a651"}, - {file = "ujson-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:468d7d8dcbafc3fd40cc73e4a533a7a1d4f935f605c15ae6cac32c6d53c4c6aa"}, - {file = "ujson-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dc5fd1d5b48edd3cc64e89ea94abe231509fdc938bdeafafe9aef3a05810159f"}, - {file = "ujson-5.2.0-cp38-cp38-win32.whl", hash = "sha256:49ce8521b0cdf210481bd89887fd1bd0a975f66088b1256dafc77c67c8ccb89d"}, - {file = "ujson-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:c519743a53bbe8aac6b743bcf50eb83057d1e0341e1ca8f8491f729a885af640"}, - {file = "ujson-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b3671e1dfc49a4b4453d89fd7438aa9d7cca28afe329c70eba84e2a5778dbf3f"}, - {file = "ujson-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11f735870f189bff1841c720115226894415ab6a7796dee8ab46bc767ea2e743"}, - {file = "ujson-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90de04391916c5adc7bbcc69bd778e263ed45cc83c070099cb07ed25068d6a12"}, - {file = "ujson-5.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c7712da662b92f80442a8efc0df09cea3a5efb42b0dd6a642e36b1b40a260d4"}, - {file = "ujson-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9b1c3d2b22c040a81ff4e5927ce307919f7ac8bf888afded714d925edc8d0a4"}, - {file = "ujson-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c5bbe6de6c9a5fe8dca56e36fb5c4a42e1a01d4aae1ac20cd8d7d82ccff9430"}, - {file = "ujson-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:940f35e9a0969440621445dbb6adffaa2cea77d0262abc74fce78704120c4534"}, - {file = "ujson-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6677bee8690c71f5e6cf519a6d8400f04fbd3ff9f6c50f35f1b664bc94546f84"}, - {file = "ujson-5.2.0-cp39-cp39-win32.whl", hash = "sha256:0b47a138203bb06bdac03b2a89ac9b2993fd32cb7daded06c966dd84300a5786"}, - {file = "ujson-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:e991b7b3a08ac9e9d3a51589ef1c359c8d44ece730351cfac055684bf3787372"}, - {file = "ujson-5.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d1e5c635b7c3465ab8d2e3dc97c341ef1801c53a378f1d1d4cb934f6c90ec66c"}, - {file = "ujson-5.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef868bf01851869a26c0ca5f88036903836c3a6b463c74d96b37f294f6bdeea4"}, - {file = "ujson-5.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5e374e793b0a3c7df20ee4c8234e89859ddb2b2821cc3300ae94ab5b08fa6d0"}, - {file = "ujson-5.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:080da13f81740c076e5f16c254a10d0e32f45d225a5e6b0687a86493cfcfbafb"}, - {file = "ujson-5.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:75a886bd89d8e5a004a39a6c5dc8a43bb7fcf05129d2dccd16a59602a612823a"}, - {file = "ujson-5.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:54ee7c46615b42f7ae9dca90f54d204a4d2041a4c926b08fffa953aa3a246e54"}, - {file = "ujson-5.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b455a62bd20e890b2124a65df45313b4292dbea851ef38574e5e2de94691ad5"}, - {file = "ujson-5.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1a619bad9894dad144184b735c98179c7d92d7b40fbda28eb8b0857bdfdf52"}, - {file = "ujson-5.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:729af63e4de30c54b527b54b4100266f79833c1e8ba35e784f01b44c2aca88d8"}, - {file = "ujson-5.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25522c674b35c33f375586ac98d92ce731e79059424507ecbccbfcbce832d597"}, - {file = "ujson-5.2.0.tar.gz", hash = "sha256:163191b88842d874e081707d35de2e205e0e396e70fd068d1038879bca8b17ad"}, -] -urllib3 = [ - {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, - {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, -] -uvicorn = [ - {file = "uvicorn-0.12.3-py3-none-any.whl", hash = "sha256:562ef6aaa8fa723ab6b82cf9e67a774088179d0ec57cb17e447b15d58b603bcf"}, - {file = "uvicorn-0.12.3.tar.gz", hash = "sha256:5836edaf4d278fe67ba0298c0537bdb6398cf359eb644f79e6500ca1aad232b3"}, -] -uvloop = [ - {file = "uvloop-0.16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6224f1401025b748ffecb7a6e2652b17768f30b1a6a3f7b44660e5b5b690b12d"}, - {file = "uvloop-0.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30ba9dcbd0965f5c812b7c2112a1ddf60cf904c1c160f398e7eed3a6b82dcd9c"}, - {file = "uvloop-0.16.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bd53f7f5db562f37cd64a3af5012df8cac2c464c97e732ed556800129505bd64"}, - {file = "uvloop-0.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:772206116b9b57cd625c8a88f2413df2fcfd0b496eb188b82a43bed7af2c2ec9"}, - {file = "uvloop-0.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b572256409f194521a9895aef274cea88731d14732343da3ecdb175228881638"}, - {file = "uvloop-0.16.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:04ff57aa137230d8cc968f03481176041ae789308b4d5079118331ab01112450"}, - {file = "uvloop-0.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a19828c4f15687675ea912cc28bbcb48e9bb907c801873bd1519b96b04fb805"}, - {file = "uvloop-0.16.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e814ac2c6f9daf4c36eb8e85266859f42174a4ff0d71b99405ed559257750382"}, - {file = "uvloop-0.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd8f42ea1ea8f4e84d265769089964ddda95eb2bb38b5cbe26712b0616c3edee"}, - {file = "uvloop-0.16.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:647e481940379eebd314c00440314c81ea547aa636056f554d491e40503c8464"}, - {file = "uvloop-0.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0d26fa5875d43ddbb0d9d79a447d2ace4180d9e3239788208527c4784f7cab"}, - {file = "uvloop-0.16.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ccd57ae8db17d677e9e06192e9c9ec4bd2066b77790f9aa7dede2cc4008ee8f"}, - {file = "uvloop-0.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:089b4834fd299d82d83a25e3335372f12117a7d38525217c2258e9b9f4578897"}, - {file = "uvloop-0.16.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98d117332cc9e5ea8dfdc2b28b0a23f60370d02e1395f88f40d1effd2cb86c4f"}, - {file = "uvloop-0.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e5f2e2ff51aefe6c19ee98af12b4ae61f5be456cd24396953244a30880ad861"}, - {file = "uvloop-0.16.0.tar.gz", hash = "sha256:f74bc20c7b67d1c27c72601c78cf95be99d5c2cdd4514502b4f3eb0933ff1228"}, -] -warlock = [ - {file = "warlock-1.3.3.tar.gz", hash = "sha256:a093c4d04b42b7907f69086e476a766b7639dca50d95edc83aef6aeab9db2090"}, -] -watchgod = [ - {file = "watchgod-0.6-py35.py36.py37-none-any.whl", hash = "sha256:59700dab7445aa8e6067a5b94f37bae90fc367554549b1ed2e9d0f4f38a90d2a"}, - {file = "watchgod-0.6.tar.gz", hash = "sha256:e9cca0ab9c63f17fc85df9fd8bd18156ff00aff04ebe5976cee473f4968c6858"}, -] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -websockets = [ - {file = "websockets-8.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:3762791ab8b38948f0c4d281c8b2ddfa99b7e510e46bd8dfa942a5fff621068c"}, - {file = "websockets-8.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:3db87421956f1b0779a7564915875ba774295cc86e81bc671631379371af1170"}, - {file = "websockets-8.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4f9f7d28ce1d8f1295717c2c25b732c2bc0645db3215cf757551c392177d7cb8"}, - {file = "websockets-8.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:295359a2cc78736737dd88c343cd0747546b2174b5e1adc223824bcaf3e164cb"}, - {file = "websockets-8.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:1d3f1bf059d04a4e0eb4985a887d49195e15ebabc42364f4eb564b1d065793f5"}, - {file = "websockets-8.1-cp36-cp36m-win32.whl", hash = "sha256:2db62a9142e88535038a6bcfea70ef9447696ea77891aebb730a333a51ed559a"}, - {file = "websockets-8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:0e4fb4de42701340bd2353bb2eee45314651caa6ccee80dbd5f5d5978888fed5"}, - {file = "websockets-8.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:9b248ba3dd8a03b1a10b19efe7d4f7fa41d158fdaa95e2cf65af5a7b95a4f989"}, - {file = "websockets-8.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ce85b06a10fc65e6143518b96d3dca27b081a740bae261c2fb20375801a9d56d"}, - {file = "websockets-8.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:965889d9f0e2a75edd81a07592d0ced54daa5b0785f57dc429c378edbcffe779"}, - {file = "websockets-8.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:751a556205d8245ff94aeef23546a1113b1dd4f6e4d102ded66c39b99c2ce6c8"}, - {file = "websockets-8.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:3ef56fcc7b1ff90de46ccd5a687bbd13a3180132268c4254fc0fa44ecf4fc422"}, - {file = "websockets-8.1-cp37-cp37m-win32.whl", hash = "sha256:7ff46d441db78241f4c6c27b3868c9ae71473fe03341340d2dfdbe8d79310acc"}, - {file = "websockets-8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:20891f0dddade307ffddf593c733a3fdb6b83e6f9eef85908113e628fa5a8308"}, - {file = "websockets-8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c1ec8db4fac31850286b7cd3b9c0e1b944204668b8eb721674916d4e28744092"}, - {file = "websockets-8.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:5c01fd846263a75bc8a2b9542606927cfad57e7282965d96b93c387622487485"}, - {file = "websockets-8.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9bef37ee224e104a413f0780e29adb3e514a5b698aabe0d969a6ba426b8435d1"}, - {file = "websockets-8.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d705f8aeecdf3262379644e4b55107a3b55860eb812b673b28d0fbc347a60c55"}, - {file = "websockets-8.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:c8a116feafdb1f84607cb3b14aa1418424ae71fee131642fc568d21423b51824"}, - {file = "websockets-8.1-cp38-cp38-win32.whl", hash = "sha256:e898a0863421650f0bebac8ba40840fc02258ef4714cb7e1fd76b6a6354bda36"}, - {file = "websockets-8.1-cp38-cp38-win_amd64.whl", hash = "sha256:f8a7bff6e8664afc4e6c28b983845c5bc14965030e3fb98789734d416af77c4b"}, - {file = "websockets-8.1.tar.gz", hash = "sha256:5c65d2da8c6bce0fca2528f69f44b2f977e06954c8512a952222cea50dad430f"}, -] -win32-setctime = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] -wrapt = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, -] -zipp = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] diff --git a/libs/skyline-nginx/poetry.toml b/libs/skyline-nginx/poetry.toml deleted file mode 100644 index ab1033b..0000000 --- a/libs/skyline-nginx/poetry.toml +++ /dev/null @@ -1,2 +0,0 @@ -[virtualenvs] -in-project = true diff --git a/libs/skyline-nginx/pyproject.toml b/libs/skyline-nginx/pyproject.toml deleted file mode 100644 index c09a703..0000000 --- a/libs/skyline-nginx/pyproject.toml +++ /dev/null @@ -1,37 +0,0 @@ -[tool.poetry] -name = "skyline-nginx" -version = "0.1.0" -description = "" -license = "Apache-2.0" -authors = ["OpenStack "] - -[tool.poetry.dependencies] -python = "^3.8" -pydantic = "1.8.2" -click = "7.1.2" -jinja2 = "2.11.3" -markupsafe = "2.0.1" -python-keystoneclient = "3.21.0" -keystoneauth1 = "3.17.4" -skyline-config = "*" -skyline-log = "*" -skyline-console = "*" -skyline-apiserver = "*" - -[tool.poetry.dev-dependencies] -isort = "5.9.3" -black = "21.9b0" -add-trailing-comma = "2.1.0" -flake8 = "3.9.2" -mypy = "0.910" -skyline-config = {path = "../skyline-config", develop = true} -skyline-log = {path = "../skyline-log", develop = true} -skyline-apiserver = {path = "../skyline-apiserver", develop = true} -skyline-console = "*" - -[tool.poetry.scripts] -nginx-generator = 'skyline_nginx.cmd.generate_nginx:main' - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/libs/skyline-nginx/skyline_nginx/__init__.py b/libs/skyline-nginx/skyline_nginx/__init__.py deleted file mode 100644 index 0b747ca..0000000 --- a/libs/skyline-nginx/skyline_nginx/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -__version__ = "0.1.0" diff --git a/libs/skyline-nginx/skyline_nginx/cmd/__init__.py b/libs/skyline-nginx/skyline_nginx/cmd/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-nginx/skyline_nginx/cmd/generate_nginx.py b/libs/skyline-nginx/skyline_nginx/cmd/generate_nginx.py deleted file mode 100644 index 5dc318d..0000000 --- a/libs/skyline-nginx/skyline_nginx/cmd/generate_nginx.py +++ /dev/null @@ -1,189 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import sys -from logging import StreamHandler -from pathlib import Path, PurePath -from typing import Dict -from urllib.parse import urlparse - -import click -import skyline_nginx -from jinja2 import Template -from keystoneauth1.identity.v3 import Password -from keystoneauth1.session import Session -from keystoneclient.client import Client as KeystoneClient -from pydantic import BaseModel -from skyline_console import static_path -from skyline_log import LOG, setup -from skyline_nginx.config import CONF, configure - - -class CommandException(Exception): - EXIT_CODE = 1 - - -class ProxyEndpoint(BaseModel): - part: str - location: str - url: str - - -def get_system_session() -> Session: - auth = Password( - auth_url=CONF.openstack.keystone_url, - user_domain_name=CONF.openstack.system_user_domain, - username=CONF.openstack.system_user_name, - password=CONF.openstack.system_user_password, - project_name=CONF.openstack.system_project, - project_domain_name=CONF.openstack.system_project_domain, - reauthenticate=True, - ) - return Session(auth=auth, verify=False, timeout=30) - - -def get_proxy_endpoints() -> Dict[str, ProxyEndpoint]: - ks_client = KeystoneClient( - session=get_system_session(), - interface=CONF.openstack.interface_type, - region_name=CONF.openstack.default_region, - ) - endpoints_list = ks_client.endpoints.list(interface=CONF.openstack.interface_type) - service_list = ks_client.services.list() - services = {s.id: s.type for s in service_list} - - endpoints = {} - for endpoint in endpoints_list: - proxy = ProxyEndpoint(part="", location="", url="") - region = endpoint.region - service_type = services.get(endpoint.service_id) - service = CONF.openstack.service_mapping.get(service_type) - if service is None: - continue - if f"{region}-{service_type}" in endpoints: - raise KeyError( - f'Region "{region}" service type "{service_type}" conflict in endpoints.', - ) - - proxy.part = f"# {region} {service}" - location = PurePath("/").joinpath( - CONF.openstack.nginx_prefix, - region.lower(), - service, - ) - proxy.location = f"{str(location)}/" - - raw_url = urlparse(endpoint.url) - path = "" - if raw_url.path: - raw_path = PurePath(raw_url.path) - if len(raw_path.parts) > 1: - if raw_path.match("*[%$](*_id)s"): - # glob-style pattern: *, ?, [], [!], [-] - # The url of endpoint maybe like: - # 1. $(tenant_id)s or %(tenant_id)s - # 2. $(project_id)s or %(project_id)s - # 3. AUTH_$(tenant_id)s or AUTH_%(tenant_id)s - # 4. AUTH_$(project_id)s or AUTH_%(project_id)s - path = "" if str(raw_path.parents[1]) == "/" else raw_path.parents[1] - elif raw_path.match("v[0-9]") or raw_path.match("v[0-9][.][0-9]"): - path = "" if str(raw_path.parents[0]) == "/" else raw_path.parents[0] - else: - path = raw_path - - proxy.url = raw_url._replace(path=f"{str(path)}/").geturl() - endpoints[f"{region}-{service_type}"] = proxy - - return dict(sorted(endpoints.items(), key=lambda d: d[0])) - - -@click.command(help="Generate nginx proxy config file.") -@click.option( - "-o", - "--output-file", - "output_file_path", - help=( - "The path of the output file, this file is to generate a reverse proxy configuration " - "file based on the openstack endpoint and should be used in the location part of nginx." - ), -) -@click.option( - "--ssl-certfile", - "ssl_certfile", - help=("SSL certificate file path."), -) -@click.option( - "--ssl-keyfile", - "ssl_keyfile", - help=("SSL key file path."), -) -@click.option( - "--listen-address", - "listen_address", - help=("nginx listen address."), -) -@click.option( - "--log-dir", - "log_dir", - help=("skyline log file address."), -) -def main( - output_file_path: str, - ssl_certfile: str, - ssl_keyfile: str, - listen_address: str, - log_dir: str, -) -> None: - try: - configure("skyline") - setup(StreamHandler(), debug=CONF.default.debug) - - template_file_path = ( - Path(skyline_nginx.__file__).parent.joinpath("templates").joinpath("nginx.conf.j2") - ) - content = "" - with template_file_path.open() as f: - content = f.read() - template = Template(content) - - endpoints = get_proxy_endpoints() - context = { - "skyline_console_static_path": static_path, - "endpoints": [i.dict() for i in endpoints.values()], - } - if ssl_certfile: - context.update(ssl_certfile=ssl_certfile) - if ssl_keyfile: - context.update(ssl_keyfile=ssl_keyfile) - if listen_address: - context.update(listen_address=listen_address) - if log_dir: - context.update(log_dir=log_dir) - result = template.render(**context) - - if output_file_path: - with open(output_file_path, mode="w") as f: - f.write(result) - else: - print(result) - - except CommandException as e: - LOG.error(e) - sys.exit(e.EXIT_CODE) - - -if __name__ == "__main__": - main() diff --git a/libs/skyline-nginx/skyline_nginx/config/__init__.py b/libs/skyline-nginx/skyline_nginx/config/__init__.py deleted file mode 100644 index a8ce9dd..0000000 --- a/libs/skyline-nginx/skyline_nginx/config/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import os - -from skyline_config import Configuration, Group - -from . import default, openstack - -CONF = Configuration() - - -def configure(project: str, setup: bool = True) -> None: - conf_modules = ( - (default.GROUP_NAME, default.ALL_OPTS), - (openstack.GROUP_NAME, openstack.ALL_OPTS), - ) - groups = [Group(*item) for item in conf_modules] - CONF(groups) - if setup: - CONF.setup(project, os.environ.copy()) - - -__all__ = ("CONF", "configure") diff --git a/libs/skyline-nginx/skyline_nginx/config/default.py b/libs/skyline-nginx/skyline_nginx/config/default.py deleted file mode 100644 index 5156605..0000000 --- a/libs/skyline-nginx/skyline_nginx/config/default.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from skyline_apiserver.config.default import debug - -GROUP_NAME = __name__.split(".")[-1] -ALL_OPTS = (debug,) - -__all__ = ("GROUP_NAME", "ALL_OPTS") diff --git a/libs/skyline-nginx/skyline_nginx/config/openstack.py b/libs/skyline-nginx/skyline_nginx/config/openstack.py deleted file mode 100644 index 17d76ff..0000000 --- a/libs/skyline-nginx/skyline_nginx/config/openstack.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from skyline_apiserver.config.openstack import ( - default_region, - interface_type, - keystone_url, - nginx_prefix, - service_mapping, - system_project, - system_project_domain, - system_user_domain, - system_user_name, - system_user_password, -) - -GROUP_NAME = __name__.split(".")[-1] -ALL_OPTS = ( - default_region, - keystone_url, - system_project_domain, - system_project, - system_user_domain, - system_user_name, - system_user_password, - interface_type, - nginx_prefix, - service_mapping, -) - -__all__ = ("GROUP_NAME", "ALL_OPTS") diff --git a/libs/skyline-nginx/skyline_nginx/py.typed b/libs/skyline-nginx/skyline_nginx/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-nginx/skyline_nginx/templates/nginx.conf.j2 b/libs/skyline-nginx/skyline_nginx/templates/nginx.conf.j2 deleted file mode 100644 index 40bb97d..0000000 --- a/libs/skyline-nginx/skyline_nginx/templates/nginx.conf.j2 +++ /dev/null @@ -1,116 +0,0 @@ -worker_processes auto; -pid /run/nginx.pid; -include /etc/nginx/modules-enabled/*.conf; - -events { - worker_connections 1024; - multi_accept on; -} - -http { - - ## - # Basic Settings - ## - sendfile on; - tcp_nopush on; - tcp_nodelay on; - client_max_body_size 0; - types_hash_max_size 2048; - proxy_request_buffering off; - server_tokens off; - - # server_names_hash_bucket_size 64; - # server_name_in_redirect off; - - include /etc/nginx/mime.types; - default_type application/octet-stream; - - ## - # SSL Settings - ## - ssl_protocols TLSv1.2 TLSv1.3; - ssl_prefer_server_ciphers on; - - # Self signed certs generated by the ssl-cert package - # Don't use them in a production server! - ssl_certificate {{ ssl_certfile | default('/etc/ssl/certs/ssl-cert-snakeoil.pem') }}; - ssl_certificate_key {{ ssl_keyfile | default('/etc/ssl/private/ssl-cert-snakeoil.key') }}; - - ## - # Logging Settings - ## - log_format main '$remote_addr - $remote_user [$time_local] "$request_time" ' - '"$upstream_response_time" "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - access_log {{ log_dir | default('/var/log') }}/skyline/nginx_access.log main; - error_log {{ log_dir | default('/var/log') }}/skyline/nginx_error.log; - - ## - # Gzip Settings - ## - gzip on; - gzip_static on; - gzip_disable "msie6"; - - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - # gzip_http_version 1.1; - gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; - - upstream skyline { - server unix:/var/lib/skyline/skyline.sock fail_timeout=0; - } - - ## - # Virtual Host Configs - ## - server { - listen {{ listen_address | default('0.0.0.0:9999') }} ssl http2 default_server; - - root {{ skyline_console_static_path }}; - - # Add index.php to the list if you are using PHP - index index.html; - - server_name _; - - error_page 497 https://$http_host$request_uri; - - location / { - # First attempt to serve request as file, then - # as directory, then fall back to displaying a 404. - try_files $uri $uri/ /index.html; - expires 1d; - add_header Cache-Control "public"; - } - - location /api/openstack/skyline/ { - proxy_pass http://skyline/; - proxy_redirect off; - proxy_buffering off; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header Host $http_host; - } - - {% for endpoint in endpoints %} - {{ endpoint["part"] }} - location {{ endpoint["location"] }} { - proxy_pass {{ endpoint["url"] }}; - proxy_redirect {{ endpoint["url"] }} {{ endpoint["location"] }}; - proxy_buffering off; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header Host $http_host; - } - {% endfor %} - } - -} - diff --git a/libs/skyline-nginx/tests/__init__.py b/libs/skyline-nginx/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-nginx/tests/test_skyline_nginx.py b/libs/skyline-nginx/tests/test_skyline_nginx.py deleted file mode 100644 index c126c97..0000000 --- a/libs/skyline-nginx/tests/test_skyline_nginx.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from skyline_log import __version__ - - -def test_version(): - assert __version__ == "0.1.0" diff --git a/libs/skyline-policy-manager/Makefile b/libs/skyline-policy-manager/Makefile deleted file mode 100644 index a5ae631..0000000 --- a/libs/skyline-policy-manager/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -PYTHON ?= python3 -PY_FILES := $(shell git ls-files -- *.py | xargs) - - -.PHONY: all -all: install fmt lint test package - - -.PHONY: venv -venv: - poetry env use $(PYTHON) - - -.PHONY: install -install: venv - poetry run pip install -U pip setuptools'<58.0.0' - poetry install -vvv - tools/post_install.sh - - -.PHONY: package -package: - poetry build - - -.PHONY: fmt -fmt: - poetry run isort $(PY_FILES) - poetry run black --config ../../pyproject.toml $(PY_FILES) - poetry run add-trailing-comma --py36-plus --exit-zero-even-if-changed $(PY_FILES) - - -.PHONY: lint -lint: - # poetry run mypy --strict --config-file=../../mypy.ini $(PY_FILES) - poetry run isort --check-only --diff $(PY_FILES) - poetry run black --check --diff --color --config ../../pyproject.toml $(PY_FILES) - poetry run flake8 --config ../../.flake8 $(PY_FILES) - - -.PHONY: test -test: - poetry run pytest - - -.PHONY: clean -clean: - rm -rf .venv dist tmp htmlcov .coverage diff --git a/libs/skyline-policy-manager/poetry.lock b/libs/skyline-policy-manager/poetry.lock deleted file mode 100644 index 311aefb..0000000 --- a/libs/skyline-policy-manager/poetry.lock +++ /dev/null @@ -1,2712 +0,0 @@ -[[package]] -name = "add-trailing-comma" -version = "2.1.0" -description = "Automatically add trailing commas to calls and literals" -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -tokenize-rt = ">=3.0.1" - -[[package]] -name = "alembic" -version = "1.7.7" -description = "A database migration tool for SQLAlchemy." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -importlib-resources = {version = "*", markers = "python_version < \"3.9\""} -Mako = "*" -SQLAlchemy = ">=1.3.0" - -[package.extras] -tz = ["python-dateutil"] - -[[package]] -name = "amqp" -version = "5.1.1" -description = "Low-level AMQP client for Python (fork of amqplib)." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -vine = ">=5.0.0" - -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "bcrypt" -version = "3.2.2" -description = "Modern password hashing for your software and your servers" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.1" - -[package.extras] -tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)"] -typecheck = ["mypy"] - -[[package]] -name = "beautifulsoup4" -version = "4.11.1" -description = "Screen-scraping library" -category = "dev" -optional = false -python-versions = ">=3.6.0" - -[package.dependencies] -soupsieve = ">1.2" - -[package.extras] -html5lib = ["html5lib"] -lxml = ["lxml"] - -[[package]] -name = "black" -version = "21.9b0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -regex = ">=2020.1.8" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.6.0)", "aiohttp-cors (>=0.4.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.2)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "cachetools" -version = "5.0.0" -description = "Extensible memoizing collections and decorators" -category = "dev" -optional = false -python-versions = "~=3.7" - -[[package]] -name = "certifi" -version = "2021.10.8" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "cffi" -version = "1.15.0" -description = "Foreign Function Interface for Python calling C code." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "2.0.12" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = ">=3.5.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - -[[package]] -name = "click" -version = "7.1.2" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "colorama" -version = "0.4.4" -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 = "6.3.2" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "debtcollector" -version = "2.5.0" -description = "A collection of Python deprecation patterns and strategies that help you collect your technical debt in a non-destructive manner." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -wrapt = ">=1.7.0" - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "dnspython" -version = "2.2.1" -description = "DNS toolkit" -category = "dev" -optional = false -python-versions = ">=3.6,<4.0" - -[package.extras] -dnssec = ["cryptography (>=2.6,<37.0)"] -curio = ["curio (>=1.2,<2.0)", "sniffio (>=1.1,<2.0)"] -doh = ["h2 (>=4.1.0)", "httpx (>=0.21.1)", "requests (>=2.23.0,<3.0.0)", "requests-toolbelt (>=0.9.1,<0.10.0)"] -idna = ["idna (>=2.1,<4.0)"] -trio = ["trio (>=0.14,<0.20)"] -wmi = ["wmi (>=1.5.1,<2.0.0)"] - -[[package]] -name = "eventlet" -version = "0.33.0" -description = "Highly concurrent networking library" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -dnspython = ">=1.15.0" -greenlet = ">=0.3" -six = ">=1.10.0" - -[[package]] -name = "execnet" -version = "1.9.0" -description = "execnet: rapid multi-Python deployment" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -testing = ["pre-commit"] - -[[package]] -name = "extras" -version = "1.0.0" -description = "Useful extra bits for Python - things that shold be in the standard library" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "fasteners" -version = "0.17.3" -description = "A python package that provides useful locks" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "fixtures" -version = "4.0.0" -description = "Fixtures, reusable state for writing clean tests and more." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pbr = ">=5.7.0" -testtools = ">=2.5.0" - -[package.extras] -docs = ["docutils"] -streams = ["testtools"] -test = ["mock", "testtools"] - -[[package]] -name = "flake8" -version = "3.9.2" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - -[[package]] -name = "futurist" -version = "2.4.1" -description = "Useful additions to futures, from the future." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "greenlet" -version = "1.1.2" -description = "Lightweight in-process concurrent programming" -category = "dev" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" - -[package.extras] -docs = ["sphinx"] - -[[package]] -name = "idna" -version = "3.3" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "importlib-metadata" -version = "4.11.3" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] - -[[package]] -name = "importlib-resources" -version = "5.7.1" -description = "Read resources from Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "iso8601" -version = "1.0.2" -description = "Simple module to parse ISO 8601 dates" -category = "main" -optional = false -python-versions = ">=3.6.2,<4.0" - -[[package]] -name = "isort" -version = "5.9.3" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.6.1,<4.0" - -[package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] - -[[package]] -name = "jinja2" -version = "3.1.2" -description = "A very fast and expressive template engine." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "keystoneauth1" -version = "4.5.0" -description = "Authentication Library for OpenStack Identity" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -iso8601 = ">=0.1.11" -os-service-types = ">=1.2.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -requests = ">=2.14.2" -six = ">=1.10.0" -stevedore = ">=1.20.0" - -[package.extras] -betamax = ["betamax (>=0.7.0)", "fixtures (>=3.0.0)", "mock (>=2.0.0)"] -kerberos = ["requests-kerberos (>=0.8.0)"] -oauth1 = ["oauthlib (>=0.6.2)"] -saml2 = ["lxml (>=4.2.0)"] -test = ["PyYAML (>=3.12)", "bandit (>=1.1.0,<1.6.0)", "betamax (>=0.7.0)", "coverage (>=4.0,<4.4 || >4.4)", "fixtures (>=3.0.0)", "flake8-docstrings (0.2.1.post1)", "flake8-import-order (>=0.17.1)", "hacking (>=3.0.1,<3.1.0)", "lxml (>=4.2.0)", "oauthlib (>=0.6.2)", "oslo.config (>=5.2.0)", "oslo.utils (>=3.33.0)", "oslotest (>=3.2.0)", "pycodestyle (>=2.0.0,<2.6.0)", "reno (>=3.1.0)", "requests-kerberos (>=0.8.0)", "requests-mock (>=1.2.0)", "stestr (>=1.0.0)", "testresources (>=2.0.0)", "testtools (>=2.2.0)"] - -[[package]] -name = "kombu" -version = "5.2.4" -description = "Messaging library for Python." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -amqp = ">=5.0.9,<6.0.0" -vine = "*" - -[package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (>=3.3.0,<3.12.1)"] -msgpack = ["msgpack"] -pyro = ["pyro4"] -qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.4.1,<4.0.0 || >4.0.0,<4.0.1 || >4.0.1)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] - -[[package]] -name = "loguru" -version = "0.5.3" -description = "Python logging made (stupidly) simple" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["codecov (>=2.0.15)", "colorama (>=0.3.4)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "tox-travis (>=0.12)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "Sphinx (>=2.2.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "black (>=19.10b0)", "isort (>=5.1.1)"] - -[[package]] -name = "logutils" -version = "0.3.5" -description = "Logging utilities" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mako" -version = "1.2.0" -description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -MarkupSafe = ">=0.9.2" - -[package.extras] -babel = ["babel"] -lingua = ["lingua"] -testing = ["pytest"] - -[[package]] -name = "markupsafe" -version = "2.1.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mimesis" -version = "4.1.3" -description = "Mimesis: fake data generator." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "msgpack" -version = "1.0.3" -description = "MessagePack (de)serializer." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "mypy" -version = "0.910" -description = "Optional static typing for Python" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -mypy-extensions = ">=0.4.3,<0.5.0" -toml = "*" -typing-extensions = ">=3.7.4" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -python2 = ["typed-ast (>=1.4.0,<1.5.0)"] - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "netaddr" -version = "0.8.0" -description = "A network address manipulation library for Python" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "netifaces" -version = "0.11.0" -description = "Portable network interface information." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "neutron-lib" -version = "2.15.0" -description = "Neutron shared routines and utilities" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -keystoneauth1 = ">=3.14.0" -netaddr = ">=0.7.18" -os-ken = ">=0.3.0" -os-traits = ">=0.9.0" -"oslo.concurrency" = ">=3.26.0" -"oslo.config" = ">=8.0.0" -"oslo.context" = ">=2.22.0" -"oslo.db" = ">=4.44.0" -"oslo.i18n" = ">=3.20.0" -"oslo.log" = ">=4.3.0" -"oslo.messaging" = ">=7.0.0" -"oslo.policy" = ">=3.6.2" -"oslo.serialization" = ">=2.25.0" -"oslo.service" = ">=1.24.0,<1.28.1 || >1.28.1" -"oslo.utils" = ">=4.5.0" -"oslo.versionedobjects" = ">=1.31.2" -osprofiler = ">=1.4.0" -pbr = ">=4.0.0" -pecan = ">=1.0.0,<1.0.2 || >1.0.2,<1.0.3 || >1.0.3,<1.0.4 || >1.0.4,<1.2 || >1.2" -setproctitle = ">=1.1.10" -SQLAlchemy = ">=1.2.0" -stevedore = ">=1.20.0" -WebOb = ">=1.7.1" - -[[package]] -name = "os-ken" -version = "2.3.1" -description = "A component-based software defined networking framework for OpenStack." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -eventlet = ">=0.26.1" -msgpack = ">=1.0.0" -netaddr = ">=0.7.18" -"oslo.config" = ">=5.1.0" -ovs = ">=2.8.0" -pbr = ">=2.0.0" -Routes = ">=2.3.1" -six = ">=1.10.0" -WebOb = ">=1.8.2" - -[[package]] -name = "os-service-types" -version = "1.7.0" -description = "Python library for consuming OpenStack sevice-types-authority data" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "os-traits" -version = "2.7.0" -description = "A library containing standardized trait strings" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "oslo.concurrency" -version = "4.5.1" -description = "Oslo Concurrency library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -fasteners = ">=0.7.0" -"oslo.config" = ">=5.2.0" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "oslo.config" -version = "8.8.0" -description = "Oslo Configuration API" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -netaddr = ">=0.7.18" -"oslo.i18n" = ">=3.15.3" -PyYAML = ">=5.1" -requests = ">=2.18.0" -rfc3986 = ">=1.2.0" -stevedore = ">=1.20.0" - -[package.extras] -rst_generator = ["rst2txt (>=1.1.0)", "sphinx (>=1.8.0,<2.1.0 || >2.1.0)"] -test = ["bandit (>=1.6.0,<1.7.0)", "coverage (>=4.0,<4.4 || >4.4)", "fixtures (>=3.0.0)", "hacking (>=3.0.1,<3.1.0)", "mypy (>=0.720)", "oslo.log (>=3.36.0)", "oslotest (>=3.2.0)", "pre-commit (>=2.6.0)", "requests-mock (>=1.5.0)", "stestr (>=2.1.0)", "testscenarios (>=0.4)", "testtools (>=2.2.0)"] - -[[package]] -name = "oslo.context" -version = "4.1.0" -description = "Oslo Context library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "oslo.db" -version = "11.3.0" -description = "Oslo Database library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -alembic = ">=0.9.6" -debtcollector = ">=1.2.0" -"oslo.config" = ">=5.2.0" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -SQLAlchemy = ">=1.4.0" -sqlalchemy-migrate = ">=0.11.0" -stevedore = ">=1.20.0" -testresources = ">=2.0.0" -testscenarios = ">=0.4" - -[package.extras] -mysql = ["PyMySQL (>=0.7.6)"] -postgresql = ["psycopg2 (>=2.8.0)"] -test = ["PyMySQL (>=0.7.6)", "bandit (>=1.6.0,<1.7.0)", "coverage (>=4.0,<4.4 || >4.4)", "eventlet (>=0.18.2,<0.18.3 || >0.18.3,<0.20.1 || >0.20.1)", "fixtures (>=3.0.0)", "hacking (>=3.0.1,<3.1.0)", "oslo.context (>=2.19.2)", "oslotest (>=3.2.0)", "pifpaf (>=0.10.0)", "pre-commit (>=2.6.0)", "psycopg2 (>=2.8.0)", "python-subunit (>=1.0.0)", "stestr (>=2.0.0)", "testtools (>=2.2.0)"] - -[[package]] -name = "oslo.i18n" -version = "5.1.0" -description = "Oslo i18n library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "oslo.log" -version = "4.8.0" -description = "oslo.log library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.19.0" -"oslo.config" = ">=5.2.0" -"oslo.context" = ">=2.21.0" -"oslo.i18n" = ">=3.20.0" -"oslo.serialization" = ">=2.25.0" -"oslo.utils" = ">=3.36.0" -pbr = ">=3.1.1" -pyinotify = {version = ">=0.9.6", markers = "sys_platform != \"win32\" and sys_platform != \"darwin\" and sys_platform != \"sunos5\""} -python-dateutil = ">=2.7.0" - -[package.extras] -fixtures = ["fixtures (>=3.0.0)"] -systemd = ["systemd-python (>=234)"] -test = ["bandit (>=1.6.0,<1.7.0)", "coverage (>=4.5.1)", "fixtures (>=3.0.0)", "hacking (>=2.0.0,<2.1.0)", "oslotest (>=3.3.0)", "pre-commit (>=2.6.0)", "stestr (>=2.0.0)", "testtools (>=2.3.0)"] - -[[package]] -name = "oslo.messaging" -version = "12.13.0" -description = "Oslo Messaging API" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -amqp = ">=2.5.2" -cachetools = ">=2.0.0" -debtcollector = ">=1.2.0" -futurist = ">=1.2.0" -kombu = ">=4.6.6" -"oslo.config" = ">=5.2.0" -"oslo.log" = ">=3.36.0" -"oslo.metrics" = ">=0.2.1" -"oslo.middleware" = ">=3.31.0" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.service" = ">=1.24.0,<1.28.1 || >1.28.1" -"oslo.utils" = ">=3.37.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -PyYAML = ">=3.13" -stevedore = ">=1.20.0" -WebOb = ">=1.7.1" - -[package.extras] -amqp1 = ["pyngus (>=2.2.0)"] -kafka = ["confluent-kafka (>=1.3.0)"] -test = ["bandit (>=1.6.0,<1.7.0)", "confluent-kafka (>=1.3.0)", "coverage (>=4.0,<4.4 || >4.4)", "eventlet (>=0.23.0)", "fixtures (>=3.0.0)", "greenlet (>=0.4.15)", "hacking (>=3.0.1,<3.1.0)", "oslotest (>=3.2.0)", "pifpaf (>=2.2.0)", "pre-commit (>=2.6.0)", "pyngus (>=2.2.0)", "stestr (>=2.0.0)", "testscenarios (>=0.4)", "testtools (>=2.2.0)"] - -[[package]] -name = "oslo.metrics" -version = "0.4.0" -description = "Oslo Metrics API" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -"oslo.config" = ">=6.9.0" -"oslo.log" = ">=3.44.0" -"oslo.utils" = ">=3.41.0" -pbr = ">=3.1.1" -prometheus-client = ">=0.6.0" - -[[package]] -name = "oslo.middleware" -version = "4.5.1" -description = "Oslo Middleware library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -bcrypt = ">=3.1.3" -debtcollector = ">=1.2.0" -Jinja2 = ">=2.10" -"oslo.config" = ">=5.2.0" -"oslo.context" = ">=2.19.2" -"oslo.i18n" = ">=3.15.3" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -statsd = ">=3.2.1" -stevedore = ">=1.20.0" -WebOb = ">=1.8.0" - -[[package]] -name = "oslo.policy" -version = "3.8.2" -description = "Oslo Policy library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -"oslo.config" = ">=6.0.0" -"oslo.context" = ">=2.22.0" -"oslo.i18n" = ">=3.15.3" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=3.40.0" -PyYAML = ">=5.1" -requests = ">=2.14.2" -stevedore = ">=1.20.0" - -[[package]] -name = "oslo.serialization" -version = "4.3.0" -description = "Oslo Serialization library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -msgpack = ">=0.5.2" -"oslo.utils" = ">=3.33.0" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -pytz = ">=2013.6" - -[[package]] -name = "oslo.service" -version = "2.8.0" -description = "oslo.service library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -eventlet = ">=0.25.2" -fixtures = ">=3.0.0" -greenlet = ">=0.4.15" -"oslo.concurrency" = ">=3.25.0" -"oslo.config" = ">=5.1.0" -"oslo.i18n" = ">=3.15.3" -"oslo.log" = ">=3.36.0" -"oslo.utils" = ">=3.40.2" -Paste = ">=2.0.2" -PasteDeploy = ">=1.5.0" -Routes = ">=2.3.1" -WebOb = ">=1.7.1" -Yappi = ">=1.0" - -[[package]] -name = "oslo.utils" -version = "4.13.0" -description = "Oslo Utility library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -debtcollector = ">=1.2.0" -iso8601 = ">=0.1.11" -netaddr = ">=0.7.18" -netifaces = ">=0.10.4" -"oslo.i18n" = ">=3.15.3" -packaging = ">=20.4" -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -pyparsing = ">=2.1.0" -pytz = ">=2013.6" - -[[package]] -name = "oslo.versionedobjects" -version = "2.6.0" -description = "Oslo Versioned Objects library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -iso8601 = ">=0.1.11" -netaddr = ">=0.7.18" -"oslo.concurrency" = ">=3.26.0" -"oslo.config" = ">=5.2.0" -"oslo.context" = ">=2.19.2" -"oslo.i18n" = ">=3.15.3" -"oslo.log" = ">=3.36.0" -"oslo.messaging" = ">=5.29.0" -"oslo.serialization" = ">=2.18.0,<2.19.1 || >2.19.1" -"oslo.utils" = ">=4.7.0" -WebOb = ">=1.7.1" - -[[package]] -name = "osprofiler" -version = "3.4.3" -description = "OpenStack Profiler Library" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -netaddr = ">=0.7.18" -"oslo.concurrency" = ">=3.26.0" -"oslo.serialization" = ">=2.18.0" -"oslo.utils" = ">=3.33.0" -PrettyTable = ">=0.7.2" -requests = ">=2.14.2" -WebOb = ">=1.7.1" - -[package.extras] -oslo_config = ["oslo.config (>=5.2.0)"] -test = ["bandit (>=1.6.0,<1.7.0)", "coverage (>=4.0)", "ddt (>=1.0.1)", "docutils (>=0.14)", "elasticsearch (>=2.0.0,<3.0.0)", "flake8-import-order (0.18.1)", "hacking (>=3.1.0,<3.2.0)", "jaeger-client (>=3.8.0)", "pre-commit (>=2.6.0)", "pymongo (>=3.0.2,<3.1 || >3.1)", "redis (>=2.10.0)", "stestr (>=2.0.0)", "testtools (>=2.2.0)"] - -[[package]] -name = "ovs" -version = "2.17.1.post1" -description = "Open vSwitch library" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\""} -sortedcontainers = "*" - -[[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 = "paste" -version = "3.5.0" -description = "Tools for using a Web Server Gateway Interface stack" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -six = ">=1.4.0" - -[package.extras] -flup = ["flup"] -openid = ["python-openid"] - -[[package]] -name = "pastedeploy" -version = "2.1.1" -description = "Load, configure, and compose WSGI applications and servers" -category = "dev" -optional = false -python-versions = "*" - -[package.extras] -paste = ["paste"] -docs = ["Sphinx (>=1.7.5)", "pylons-sphinx-themes"] - -[[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 = "pbr" -version = "5.9.0" -description = "Python Build Reasonableness" -category = "main" -optional = false -python-versions = ">=2.6" - -[[package]] -name = "pecan" -version = "1.4.1" -description = "A WSGI object-dispatching web framework, designed to be lean and fast, with few dependencies." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -logutils = ">=0.3" -Mako = ">=0.4.0" -six = "*" -WebOb = ">=1.8" -WebTest = ">=1.3.1" - -[[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-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "prettytable" -version = "3.3.0" -description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -wcwidth = "*" - -[package.extras] -tests = ["pytest", "pytest-cov", "pytest-lazy-fixture"] - -[[package]] -name = "prometheus-client" -version = "0.14.1" -description = "Python client for the Prometheus monitoring system." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pycodestyle" -version = "2.7.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pydantic" -version = "1.8.2" -description = "Data validation and settings management using python 3.6 type hinting" -category = "main" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -typing-extensions = ">=3.7.4.3" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pyflakes" -version = "2.3.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pyinotify" -version = "0.9.6" -description = "Linux filesystem events monitoring" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pyparsing" -version = "3.0.8" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" -optional = false -python-versions = ">=3.6.8" - -[package.extras] -diagrams = ["railroad-diagrams", "jinja2"] - -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "pytest-cov" -version = "2.12.1" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -coverage = ">=5.2.1" -pytest = ">=4.6" -toml = "*" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-forked" -version = "1.4.0" -description = "run tests in isolated forked subprocesses" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -py = "*" -pytest = ">=3.10" - -[[package]] -name = "pytest-html" -version = "3.1.1" -description = "pytest plugin for generating HTML reports" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytest = ">=5.0,<6.0.0 || >6.0.0" -pytest-metadata = "*" - -[[package]] -name = "pytest-metadata" -version = "1.11.0" -description = "pytest plugin for test session metadata" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.dependencies] -pytest = ">=2.9.0" - -[[package]] -name = "pytest-xdist" -version = "2.4.0" -description = "pytest xdist plugin for distributed testing and loop-on-failing modes" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -execnet = ">=1.1" -pytest = ">=6.0.0" -pytest-forked = "*" - -[package.extras] -psutil = ["psutil (>=3.0)"] -setproctitle = ["setproctitle"] -testing = ["filelock"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pytz" -version = "2022.1" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "pywin32" -version = "304" -description = "Python for Window Extensions" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "regex" -version = "2022.4.24" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "repoze.lru" -version = "0.7" -description = "A tiny LRU cache implementation and decorator" -category = "dev" -optional = false -python-versions = "*" - -[package.extras] -docs = ["sphinx"] -testing = ["coverage", "nose"] - -[[package]] -name = "requests" -version = "2.27.1" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] - -[[package]] -name = "rfc3986" -version = "2.0.0" -description = "Validating URI References per RFC 3986" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -idna2008 = ["idna"] - -[[package]] -name = "routes" -version = "2.5.1" -description = "Routing Recognition and Generation Tools" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -"repoze.lru" = ">=0.3" -six = "*" - -[package.extras] -docs = ["sphinx", "webob"] -middleware = ["webob"] - -[[package]] -name = "setproctitle" -version = "1.2.3" -description = "A Python module to customize the process title" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "skyline-log" -version = "0.1.0" -description = "" -category = "main" -optional = false -python-versions = "^3.8" -develop = true - -[package.dependencies] -loguru = "0.5.3" - -[package.source] -type = "directory" -url = "../skyline-log" - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "soupsieve" -version = "2.3.2.post1" -description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "sqlalchemy" -version = "1.4.36" -description = "Database Abstraction Library" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} - -[package.extras] -aiomysql = ["greenlet (!=0.4.17)", "aiomysql"] -aiosqlite = ["typing_extensions (!=3.10.0.1)", "greenlet (!=0.4.17)", "aiosqlite"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["greenlet (!=0.4.17)", "asyncmy (>=0.2.3,<0.2.4 || >0.2.4)"] -mariadb_connector = ["mariadb (>=1.0.1)"] -mssql = ["pyodbc"] -mssql_pymssql = ["pymssql"] -mssql_pyodbc = ["pyodbc"] -mypy = ["sqlalchemy2-stubs", "mypy (>=0.910)"] -mysql = ["mysqlclient (>=1.4.0,<2)", "mysqlclient (>=1.4.0)"] -mysql_connector = ["mysql-connector-python"] -oracle = ["cx_oracle (>=7,<8)", "cx_oracle (>=7)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql_asyncpg = ["greenlet (!=0.4.17)", "asyncpg"] -postgresql_pg8000 = ["pg8000 (>=1.16.6)"] -postgresql_psycopg2binary = ["psycopg2-binary"] -postgresql_psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql (<1)", "pymysql"] -sqlcipher = ["sqlcipher3-binary"] - -[[package]] -name = "sqlalchemy-migrate" -version = "0.13.0" -description = "Database schema migration for SQLAlchemy" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -decorator = "*" -pbr = ">=1.8" -six = ">=1.7.0" -SQLAlchemy = ">=0.9.6" -sqlparse = "*" -Tempita = ">=0.4" - -[[package]] -name = "sqlparse" -version = "0.4.2" -description = "A non-validating SQL parser." -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "statsd" -version = "3.3.0" -description = "A simple statsd client." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "stevedore" -version = "3.5.0" -description = "Manage dynamic plugins for Python applications" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "tempita" -version = "0.5.2" -description = "A very small text templating language" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "testresources" -version = "2.0.1" -description = "Testresources, a pyunit extension for managing expensive test resources" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -pbr = ">=1.8" - -[package.extras] -test = ["docutils", "fixtures", "testtools"] - -[[package]] -name = "testscenarios" -version = "0.5.0" -description = "Testscenarios, a pyunit extension for dependency injection" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -pbr = ">=0.11" -testtools = "*" - -[[package]] -name = "testtools" -version = "2.5.0" -description = "Extensions to the Python standard library unit testing framework" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -extras = ">=1.0.0" -fixtures = ">=1.3.0" -pbr = ">=0.11" - -[package.extras] -test = ["testscenarios", "testresources"] - -[[package]] -name = "tokenize-rt" -version = "4.2.1" -description = "A wrapper around the stdlib `tokenize` which roundtrips." -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.2.3" -description = "A lil' TOML parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.2.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "urllib3" -version = "1.26.9" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] - -[[package]] -name = "vine" -version = "5.0.0" -description = "Promises, promises, promises." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "waitress" -version = "2.1.1" -description = "Waitress WSGI server" -category = "dev" -optional = false -python-versions = ">=3.7.0" - -[package.extras] -docs = ["Sphinx (>=1.8.1)", "docutils", "pylons-sphinx-themes (>=1.0.9)"] -testing = ["pytest", "pytest-cover", "coverage (>=5.0)"] - -[[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "webob" -version = "1.8.7" -description = "WSGI request and response object" -category = "dev" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" - -[package.extras] -docs = ["Sphinx (>=1.7.5)", "pylons-sphinx-themes"] -testing = ["pytest (>=3.1.0)", "coverage", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "webtest" -version = "3.0.0" -description = "Helper to test WSGI applications" -category = "dev" -optional = false -python-versions = ">=3.6, <4" - -[package.dependencies] -beautifulsoup4 = "*" -waitress = ">=0.8.5" -WebOb = ">=1.2" - -[package.extras] -docs = ["docutils", "pylons-sphinx-themes (>=1.0.8)", "Sphinx (>=1.8.1)"] -tests = ["coverage", "pastedeploy", "pyquery", "pytest", "pytest-cov", "wsgiproxy2"] - -[[package]] -name = "werkzeug" -version = "2.0.1" -description = "The comprehensive WSGI web application library." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -watchdog = ["watchdog"] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -category = "main" -optional = false -python-versions = ">=3.5" - -[package.extras] -dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] - -[[package]] -name = "wrapt" -version = "1.14.1" -description = "Module for decorators, wrappers and monkey patching." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "yappi" -version = "1.3.3" -description = "Yet Another Python Profiler" -category = "dev" -optional = false -python-versions = "*" - -[package.extras] -test = ["gevent (>=20.6.2)"] - -[[package]] -name = "zipp" -version = "3.8.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "1.1" -python-versions = "^3.8" -content-hash = "3bb2f76214777ab8c244056fea4b36beaf5d02a2a60f217006d9af25eb1bab67" - -[metadata.files] -add-trailing-comma = [ - {file = "add_trailing_comma-2.1.0-py2.py3-none-any.whl", hash = "sha256:f462403aa2e997e20855708edb57536d1d3310d5c5fac7e80542578eb47fdb10"}, - {file = "add_trailing_comma-2.1.0.tar.gz", hash = "sha256:f9864ffbc12ea4e54916a356d57341ab58f612867c2ad453339c51004807e8ce"}, -] -alembic = [ - {file = "alembic-1.7.7-py3-none-any.whl", hash = "sha256:29be0856ec7591c39f4e1cb10f198045d890e6e2274cf8da80cb5e721a09642b"}, - {file = "alembic-1.7.7.tar.gz", hash = "sha256:4961248173ead7ce8a21efb3de378f13b8398e6630fab0eb258dc74a8af24c58"}, -] -amqp = [ - {file = "amqp-5.1.1-py3-none-any.whl", hash = "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359"}, - {file = "amqp-5.1.1.tar.gz", hash = "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -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"}, -] -beautifulsoup4 = [ - {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, - {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, -] -black = [ - {file = "black-21.9b0-py3-none-any.whl", hash = "sha256:380f1b5da05e5a1429225676655dddb96f5ae8c75bdf91e53d798871b902a115"}, - {file = "black-21.9b0.tar.gz", hash = "sha256:7de4cfc7eb6b710de325712d40125689101d21d25283eed7e9998722cf10eb91"}, -] -cachetools = [ - {file = "cachetools-5.0.0-py3-none-any.whl", hash = "sha256:8fecd4203a38af17928be7b90689d8083603073622229ca7077b72d8e5a976e4"}, - {file = "cachetools-5.0.0.tar.gz", hash = "sha256:486471dfa8799eb7ec503a8059e263db000cdda20075ce5e48903087f79d5fd6"}, -] -certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, -] -cffi = [ - {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, - {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, - {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, - {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, - {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, - {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, - {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, - {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, - {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, - {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, - {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, - {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, - {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, - {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, - {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, - {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, - {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, -] -click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -coverage = [ - {file = "coverage-6.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9b27d894748475fa858f9597c0ee1d4829f44683f3813633aaf94b19cb5453cf"}, - {file = "coverage-6.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37d1141ad6b2466a7b53a22e08fe76994c2d35a5b6b469590424a9953155afac"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9987b0354b06d4df0f4d3e0ec1ae76d7ce7cbca9a2f98c25041eb79eec766f1"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:26e2deacd414fc2f97dd9f7676ee3eaecd299ca751412d89f40bc01557a6b1b4"}, - {file = "coverage-6.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dd8bafa458b5c7d061540f1ee9f18025a68e2d8471b3e858a9dad47c8d41903"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:46191097ebc381fbf89bdce207a6c107ac4ec0890d8d20f3360345ff5976155c"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6f89d05e028d274ce4fa1a86887b071ae1755082ef94a6740238cd7a8178804f"}, - {file = "coverage-6.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58303469e9a272b4abdb9e302a780072c0633cdcc0165db7eec0f9e32f901e05"}, - {file = "coverage-6.3.2-cp310-cp310-win32.whl", hash = "sha256:2fea046bfb455510e05be95e879f0e768d45c10c11509e20e06d8fcaa31d9e39"}, - {file = "coverage-6.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:a2a8b8bcc399edb4347a5ca8b9b87e7524c0967b335fbb08a83c8421489ddee1"}, - {file = "coverage-6.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f1555ea6d6da108e1999b2463ea1003fe03f29213e459145e70edbaf3e004aaa"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5f4e1edcf57ce94e5475fe09e5afa3e3145081318e5fd1a43a6b4539a97e518"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a15dc0a14008f1da3d1ebd44bdda3e357dbabdf5a0b5034d38fcde0b5c234b7"}, - {file = "coverage-6.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21b7745788866028adeb1e0eca3bf1101109e2dc58456cb49d2d9b99a8c516e6"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8ce257cac556cb03be4a248d92ed36904a59a4a5ff55a994e92214cde15c5bad"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b0be84e5a6209858a1d3e8d1806c46214e867ce1b0fd32e4ea03f4bd8b2e3359"}, - {file = "coverage-6.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:acf53bc2cf7282ab9b8ba346746afe703474004d9e566ad164c91a7a59f188a4"}, - {file = "coverage-6.3.2-cp37-cp37m-win32.whl", hash = "sha256:8bdde1177f2311ee552f47ae6e5aa7750c0e3291ca6b75f71f7ffe1f1dab3dca"}, - {file = "coverage-6.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b31651d018b23ec463e95cf10070d0b2c548aa950a03d0b559eaa11c7e5a6fa3"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07e6db90cd9686c767dcc593dff16c8c09f9814f5e9c51034066cad3373b914d"}, - {file = "coverage-6.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c6dbb42f3ad25760010c45191e9757e7dce981cbfb90e42feef301d71540059"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76aeef1b95aff3905fb2ae2d96e319caca5b76fa41d3470b19d4e4a3a313512"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cf5cfcb1521dc3255d845d9dca3ff204b3229401994ef8d1984b32746bb45ca"}, - {file = "coverage-6.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbbdc8d55990eac1b0919ca69eb5a988a802b854488c34b8f37f3e2025fa90d"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ec6bc7fe73a938933d4178c9b23c4e0568e43e220aef9472c4f6044bfc6dd0f0"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9baff2a45ae1f17c8078452e9e5962e518eab705e50a0aa8083733ea7d45f3a6"}, - {file = "coverage-6.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd9e830e9d8d89b20ab1e5af09b32d33e1a08ef4c4e14411e559556fd788e6b2"}, - {file = "coverage-6.3.2-cp38-cp38-win32.whl", hash = "sha256:f7331dbf301b7289013175087636bbaf5b2405e57259dd2c42fdcc9fcc47325e"}, - {file = "coverage-6.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:68353fe7cdf91f109fc7d474461b46e7f1f14e533e911a2a2cbb8b0fc8613cf1"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b78e5afb39941572209f71866aa0b206c12f0109835aa0d601e41552f9b3e620"}, - {file = "coverage-6.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e21876082ed887baed0146fe222f861b5815455ada3b33b890f4105d806128d"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34626a7eee2a3da12af0507780bb51eb52dca0e1751fd1471d0810539cefb536"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebf730d2381158ecf3dfd4453fbca0613e16eaa547b4170e2450c9707665ce7"}, - {file = "coverage-6.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd6fe30bd519694b356cbfcaca9bd5c1737cddd20778c6a581ae20dc8c04def2"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:96f8a1cb43ca1422f36492bebe63312d396491a9165ed3b9231e778d43a7fca4"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:dd035edafefee4d573140a76fdc785dc38829fe5a455c4bb12bac8c20cfc3d69"}, - {file = "coverage-6.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ca5aeb4344b30d0bec47481536b8ba1181d50dbe783b0e4ad03c95dc1296684"}, - {file = "coverage-6.3.2-cp39-cp39-win32.whl", hash = "sha256:f5fa5803f47e095d7ad8443d28b01d48c0359484fec1b9d8606d0e3282084bc4"}, - {file = "coverage-6.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:9548f10d8be799551eb3a9c74bbf2b4934ddb330e08a73320123c07f95cc2d92"}, - {file = "coverage-6.3.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:18d520c6860515a771708937d2f78f63cc47ab3b80cb78e86573b0a760161faf"}, - {file = "coverage-6.3.2.tar.gz", hash = "sha256:03e2a7826086b91ef345ff18742ee9fc47a6839ccd517061ef8fa1976e652ce9"}, -] -debtcollector = [ - {file = "debtcollector-2.5.0-py3-none-any.whl", hash = "sha256:1393a527d2c72f143ffa6a629e9c33face6642634eece475b48cab7b04ba61f3"}, - {file = "debtcollector-2.5.0.tar.gz", hash = "sha256:dc9d1ad3f745c43f4bbedbca30f9ffe8905a8c028c9926e61077847d5ea257ab"}, -] -decorator = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] -dnspython = [ - {file = "dnspython-2.2.1-py3-none-any.whl", hash = "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f"}, - {file = "dnspython-2.2.1.tar.gz", hash = "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e"}, -] -eventlet = [ - {file = "eventlet-0.33.0-py2.py3-none-any.whl", hash = "sha256:d10a8fcc9e33381905d9873303fde96ebe3541c03fb795055d2c7347dce0639c"}, - {file = "eventlet-0.33.0.tar.gz", hash = "sha256:80144f489c1bb273a51b6f96ff9785a382d2866b9bab1f5bd748385019f4141f"}, -] -execnet = [ - {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, - {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, -] -extras = [ - {file = "extras-1.0.0-py2.py3-none-any.whl", hash = "sha256:f689f08df47e2decf76aa6208c081306e7bd472630eb1ec8a875c67de2366e87"}, - {file = "extras-1.0.0.tar.gz", hash = "sha256:132e36de10b9c91d5d4cc620160a476e0468a88f16c9431817a6729611a81b4e"}, -] -fasteners = [ - {file = "fasteners-0.17.3-py3-none-any.whl", hash = "sha256:cae0772df265923e71435cc5057840138f4e8b6302f888a567d06ed8e1cbca03"}, - {file = "fasteners-0.17.3.tar.gz", hash = "sha256:a9a42a208573d4074c77d041447336cf4e3c1389a256fd3e113ef59cf29b7980"}, -] -fixtures = [ - {file = "fixtures-4.0.0-py3-none-any.whl", hash = "sha256:c579191f96a088b16095eb60e21d3eb6334f006a93e248f4decdcb6bfef238d8"}, - {file = "fixtures-4.0.0.tar.gz", hash = "sha256:81ac3a8a627bfa5fce577adf9c60ec7b347896c78d8e0ceccaf94f3a53d39163"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -futurist = [ - {file = "futurist-2.4.1-py3-none-any.whl", hash = "sha256:3ef3a1f63eca3c4f6ebc8f4cff0bb1492241a0df93622e0bf3e6e90ca822e0e0"}, - {file = "futurist-2.4.1.tar.gz", hash = "sha256:9c1760a877c0fe3260d04b6a6d4352a6d25ac58e483f1d6cd495e33dc3740ff7"}, -] -greenlet = [ - {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, - {file = "greenlet-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a"}, - {file = "greenlet-1.1.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d"}, - {file = "greenlet-1.1.2-cp27-cp27m-win32.whl", hash = "sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713"}, - {file = "greenlet-1.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40"}, - {file = "greenlet-1.1.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d"}, - {file = "greenlet-1.1.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8"}, - {file = "greenlet-1.1.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d"}, - {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497"}, - {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1"}, - {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58"}, - {file = "greenlet-1.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965"}, - {file = "greenlet-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708"}, - {file = "greenlet-1.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23"}, - {file = "greenlet-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee"}, - {file = "greenlet-1.1.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c"}, - {file = "greenlet-1.1.2-cp35-cp35m-win32.whl", hash = "sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963"}, - {file = "greenlet-1.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e"}, - {file = "greenlet-1.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073"}, - {file = "greenlet-1.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c"}, - {file = "greenlet-1.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e"}, - {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce"}, - {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08"}, - {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168"}, - {file = "greenlet-1.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f"}, - {file = "greenlet-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa"}, - {file = "greenlet-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d"}, - {file = "greenlet-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4"}, - {file = "greenlet-1.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b"}, - {file = "greenlet-1.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c"}, - {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1"}, - {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28"}, - {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5"}, - {file = "greenlet-1.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe"}, - {file = "greenlet-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc"}, - {file = "greenlet-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06"}, - {file = "greenlet-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0"}, - {file = "greenlet-1.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627"}, - {file = "greenlet-1.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478"}, - {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43"}, - {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711"}, - {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b"}, - {file = "greenlet-1.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2"}, - {file = "greenlet-1.1.2-cp38-cp38-win32.whl", hash = "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd"}, - {file = "greenlet-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3"}, - {file = "greenlet-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67"}, - {file = "greenlet-1.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab"}, - {file = "greenlet-1.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5"}, - {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88"}, - {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b"}, - {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3"}, - {file = "greenlet-1.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3"}, - {file = "greenlet-1.1.2-cp39-cp39-win32.whl", hash = "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf"}, - {file = "greenlet-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd"}, - {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, - {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, -] -importlib-resources = [ - {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, - {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -iso8601 = [ - {file = "iso8601-1.0.2-py3-none-any.whl", hash = "sha256:d7bc01b1c2a43b259570bb307f057abc578786ea734ba2b87b836c5efc5bd443"}, - {file = "iso8601-1.0.2.tar.gz", hash = "sha256:27f503220e6845d9db954fb212b95b0362d8b7e6c1b2326a87061c3de93594b1"}, -] -isort = [ - {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, - {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, -] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -keystoneauth1 = [ - {file = "keystoneauth1-4.5.0-py3-none-any.whl", hash = "sha256:47b526d2e813482bd1018916a1c768a5ac6d83c0865a4dc904cb8d6ffd530f1c"}, - {file = "keystoneauth1-4.5.0.tar.gz", hash = "sha256:49b3488966a43eeb0200ea511b997e6403c25d563a984c6330e82a0ebfc4540c"}, -] -kombu = [ - {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, - {file = "kombu-5.2.4.tar.gz", hash = "sha256:37cee3ee725f94ea8bb173eaab7c1760203ea53bbebae226328600f9d2799610"}, -] -loguru = [ - {file = "loguru-0.5.3-py3-none-any.whl", hash = "sha256:f8087ac396b5ee5f67c963b495d615ebbceac2796379599820e324419d53667c"}, - {file = "loguru-0.5.3.tar.gz", hash = "sha256:b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319"}, -] -logutils = [ - {file = "logutils-0.3.5.tar.gz", hash = "sha256:bc058a25d5c209461f134e1f03cab637d66a7a5ccc12e593db56fbb279899a82"}, -] -mako = [ - {file = "Mako-1.2.0-py3-none-any.whl", hash = "sha256:23aab11fdbbb0f1051b93793a58323ff937e98e34aece1c4219675122e57e4ba"}, - {file = "Mako-1.2.0.tar.gz", hash = "sha256:9a7c7e922b87db3686210cf49d5d767033a41d4010b284e747682c92bddd8b39"}, -] -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"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mimesis = [ - {file = "mimesis-4.1.3.tar.gz", hash = "sha256:90f36c21c1bb9944afc17178eb5868b0c85aa1fe49eb04bcbdafafd1ad4ca2ba"}, -] -msgpack = [ - {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96acc674bb9c9be63fa8b6dabc3248fdc575c4adc005c440ad02f87ca7edd079"}, - {file = "msgpack-1.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2c3ca57c96c8e69c1a0d2926a6acf2d9a522b41dc4253a8945c4c6cd4981a4e3"}, - {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0a792c091bac433dfe0a70ac17fc2087d4595ab835b47b89defc8bbabcf5c73"}, - {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c58cdec1cb5fcea8c2f1771d7b5fec79307d056874f746690bd2bdd609ab147"}, - {file = "msgpack-1.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f97c0f35b3b096a330bb4a1a9247d0bd7e1f3a2eba7ab69795501504b1c2c39"}, - {file = "msgpack-1.0.3-cp310-cp310-win32.whl", hash = "sha256:36a64a10b16c2ab31dcd5f32d9787ed41fe68ab23dd66957ca2826c7f10d0b85"}, - {file = "msgpack-1.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c1ba333b4024c17c7591f0f372e2daa3c31db495a9b2af3cf664aef3c14354f7"}, - {file = "msgpack-1.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c2140cf7a3ec475ef0938edb6eb363fa704159e0bf71dde15d953bacc1cf9d7d"}, - {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f4c22717c74d44bcd7af353024ce71c6b55346dad5e2cc1ddc17ce8c4507c6b"}, - {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d733a15ade190540c703de209ffbc42a3367600421b62ac0c09fde594da6ec"}, - {file = "msgpack-1.0.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7e03b06f2982aa98d4ddd082a210c3db200471da523f9ac197f2828e80e7770"}, - {file = "msgpack-1.0.3-cp36-cp36m-win32.whl", hash = "sha256:3d875631ecab42f65f9dce6f55ce6d736696ced240f2634633188de2f5f21af9"}, - {file = "msgpack-1.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:40fb89b4625d12d6027a19f4df18a4de5c64f6f3314325049f219683e07e678a"}, - {file = "msgpack-1.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6eef0cf8db3857b2b556213d97dd82de76e28a6524853a9beb3264983391dc1a"}, - {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d8c332f53ffff01953ad25131272506500b14750c1d0ce8614b17d098252fbc"}, - {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c0903bd93cbd34653dd63bbfcb99d7539c372795201f39d16fdfde4418de43a"}, - {file = "msgpack-1.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf1e6bfed4860d72106f4e0a1ab519546982b45689937b40257cfd820650b920"}, - {file = "msgpack-1.0.3-cp37-cp37m-win32.whl", hash = "sha256:d02cea2252abc3756b2ac31f781f7a98e89ff9759b2e7450a1c7a0d13302ff50"}, - {file = "msgpack-1.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f30dd0dc4dfe6231ad253b6f9f7128ac3202ae49edd3f10d311adc358772dba"}, - {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f201d34dc89342fabb2a10ed7c9a9aaaed9b7af0f16a5923f1ae562b31258dea"}, - {file = "msgpack-1.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bb87f23ae7d14b7b3c21009c4b1705ec107cb21ee71975992f6aca571fb4a42a"}, - {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a3a5c4b16e9d0edb823fe54b59b5660cc8d4782d7bf2c214cb4b91a1940a8ef"}, - {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74da1e5fcf20ade12c6bf1baa17a2dc3604958922de8dc83cbe3eff22e8b611"}, - {file = "msgpack-1.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73a80bd6eb6bcb338c1ec0da273f87420829c266379c8c82fa14c23fb586cfa1"}, - {file = "msgpack-1.0.3-cp38-cp38-win32.whl", hash = "sha256:9fce00156e79af37bb6db4e7587b30d11e7ac6a02cb5bac387f023808cd7d7f4"}, - {file = "msgpack-1.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:9b6f2d714c506e79cbead331de9aae6837c8dd36190d02da74cb409b36162e8a"}, - {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:89908aea5f46ee1474cc37fbc146677f8529ac99201bc2faf4ef8edc023c2bf3"}, - {file = "msgpack-1.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:973ad69fd7e31159eae8f580f3f707b718b61141838321c6fa4d891c4a2cca52"}, - {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da24375ab4c50e5b7486c115a3198d207954fe10aaa5708f7b65105df09109b2"}, - {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a598d0685e4ae07a0672b59792d2cc767d09d7a7f39fd9bd37ff84e060b1a996"}, - {file = "msgpack-1.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4c309a68cb5d6bbd0c50d5c71a25ae81f268c2dc675c6f4ea8ab2feec2ac4e2"}, - {file = "msgpack-1.0.3-cp39-cp39-win32.whl", hash = "sha256:494471d65b25a8751d19c83f1a482fd411d7ca7a3b9e17d25980a74075ba0e88"}, - {file = "msgpack-1.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:f01b26c2290cbd74316990ba84a14ac3d599af9cebefc543d241a66e785cf17d"}, - {file = "msgpack-1.0.3.tar.gz", hash = "sha256:51fdc7fb93615286428ee7758cecc2f374d5ff363bdd884c7ea622a7a327a81e"}, -] -mypy = [ - {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, - {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, - {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, - {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, - {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, - {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, - {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, - {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, - {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, - {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, - {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, - {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, - {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, - {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, - {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, - {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, - {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, - {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, - {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, - {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, - {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, - {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, - {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, -] -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"}, -] -netaddr = [ - {file = "netaddr-0.8.0-py2.py3-none-any.whl", hash = "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac"}, - {file = "netaddr-0.8.0.tar.gz", hash = "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243"}, -] -netifaces = [ - {file = "netifaces-0.11.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eb4813b77d5df99903af4757ce980a98c4d702bbcb81f32a0b305a1537bdf0b1"}, - {file = "netifaces-0.11.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5f9ca13babe4d845e400921973f6165a4c2f9f3379c7abfc7478160e25d196a4"}, - {file = "netifaces-0.11.0-cp27-cp27m-win32.whl", hash = "sha256:7dbb71ea26d304e78ccccf6faccef71bb27ea35e259fb883cfd7fd7b4f17ecb1"}, - {file = "netifaces-0.11.0-cp27-cp27m-win_amd64.whl", hash = "sha256:0f6133ac02521270d9f7c490f0c8c60638ff4aec8338efeff10a1b51506abe85"}, - {file = "netifaces-0.11.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:08e3f102a59f9eaef70948340aeb6c89bd09734e0dca0f3b82720305729f63ea"}, - {file = "netifaces-0.11.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c03fb2d4ef4e393f2e6ffc6376410a22a3544f164b336b3a355226653e5efd89"}, - {file = "netifaces-0.11.0-cp34-cp34m-win32.whl", hash = "sha256:73ff21559675150d31deea8f1f8d7e9a9a7e4688732a94d71327082f517fc6b4"}, - {file = "netifaces-0.11.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815eafdf8b8f2e61370afc6add6194bd5a7252ae44c667e96c4c1ecf418811e4"}, - {file = "netifaces-0.11.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:50721858c935a76b83dd0dd1ab472cad0a3ef540a1408057624604002fcfb45b"}, - {file = "netifaces-0.11.0-cp35-cp35m-win32.whl", hash = "sha256:c9a3a47cd3aaeb71e93e681d9816c56406ed755b9442e981b07e3618fb71d2ac"}, - {file = "netifaces-0.11.0-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:aab1dbfdc55086c789f0eb37affccf47b895b98d490738b81f3b2360100426be"}, - {file = "netifaces-0.11.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c37a1ca83825bc6f54dddf5277e9c65dec2f1b4d0ba44b8fd42bc30c91aa6ea1"}, - {file = "netifaces-0.11.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:28f4bf3a1361ab3ed93c5ef360c8b7d4a4ae060176a3529e72e5e4ffc4afd8b0"}, - {file = "netifaces-0.11.0-cp36-cp36m-win32.whl", hash = "sha256:2650beee182fed66617e18474b943e72e52f10a24dc8cac1db36c41ee9c041b7"}, - {file = "netifaces-0.11.0-cp36-cp36m-win_amd64.whl", hash = "sha256:cb925e1ca024d6f9b4f9b01d83215fd00fe69d095d0255ff3f64bffda74025c8"}, - {file = "netifaces-0.11.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:84e4d2e6973eccc52778735befc01638498781ce0e39aa2044ccfd2385c03246"}, - {file = "netifaces-0.11.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18917fbbdcb2d4f897153c5ddbb56b31fa6dd7c3fa9608b7e3c3a663df8206b5"}, - {file = "netifaces-0.11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:48324183af7f1bc44f5f197f3dad54a809ad1ef0c78baee2c88f16a5de02c4c9"}, - {file = "netifaces-0.11.0-cp37-cp37m-win32.whl", hash = "sha256:8f7da24eab0d4184715d96208b38d373fd15c37b0dafb74756c638bd619ba150"}, - {file = "netifaces-0.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2479bb4bb50968089a7c045f24d120f37026d7e802ec134c4490eae994c729b5"}, - {file = "netifaces-0.11.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:3ecb3f37c31d5d51d2a4d935cfa81c9bc956687c6f5237021b36d6fdc2815b2c"}, - {file = "netifaces-0.11.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:96c0fe9696398253f93482c84814f0e7290eee0bfec11563bd07d80d701280c3"}, - {file = "netifaces-0.11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c92ff9ac7c2282009fe0dcb67ee3cd17978cffbe0c8f4b471c00fe4325c9b4d4"}, - {file = "netifaces-0.11.0-cp38-cp38-win32.whl", hash = "sha256:d07b01c51b0b6ceb0f09fc48ec58debd99d2c8430b09e56651addeaf5de48048"}, - {file = "netifaces-0.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:469fc61034f3daf095e02f9f1bbac07927b826c76b745207287bc594884cfd05"}, - {file = "netifaces-0.11.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5be83986100ed1fdfa78f11ccff9e4757297735ac17391b95e17e74335c2047d"}, - {file = "netifaces-0.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54ff6624eb95b8a07e79aa8817288659af174e954cca24cdb0daeeddfc03c4ff"}, - {file = "netifaces-0.11.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:841aa21110a20dc1621e3dd9f922c64ca64dd1eb213c47267a2c324d823f6c8f"}, - {file = "netifaces-0.11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e76c7f351e0444721e85f975ae92718e21c1f361bda946d60a214061de1f00a1"}, - {file = "netifaces-0.11.0.tar.gz", hash = "sha256:043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32"}, -] -neutron-lib = [ - {file = "neutron-lib-2.15.0.tar.gz", hash = "sha256:88a25675fedc6760443fbc4180357e6437160bf5237eae132f05f7114eba0508"}, - {file = "neutron_lib-2.15.0-py3-none-any.whl", hash = "sha256:c77ecb54123cf2b113de3eefa8cc738469689e627c27048e0170e8797dbcb76b"}, -] -os-ken = [ - {file = "os-ken-2.3.1.tar.gz", hash = "sha256:3ac8d565ed78093d34bd5fe3f0c5191d6599a4c0dcef5e1f200dc1f0fdb51af7"}, - {file = "os_ken-2.3.1-py3-none-any.whl", hash = "sha256:b90ef275a44c649d3e74fab8040c8db673e14aa4a42b3160be769f9ff9597a2a"}, -] -os-service-types = [ - {file = "os-service-types-1.7.0.tar.gz", hash = "sha256:31800299a82239363995b91f1ebf9106ac7758542a1e4ef6dc737a5932878c6c"}, - {file = "os_service_types-1.7.0-py2.py3-none-any.whl", hash = "sha256:0505c72205690910077fb72b88f2a1f07533c8d39f2fe75b29583481764965d6"}, -] -os-traits = [ - {file = "os-traits-2.7.0.tar.gz", hash = "sha256:aa2ba03b4cd02f5c8bf65924bfc510f9c09c704c3c36e507522b4e8fa3857151"}, - {file = "os_traits-2.7.0-py3-none-any.whl", hash = "sha256:be1986df0aa71710e0f09ac6a43b0d88a004243367c9a6bc36c05950f91c5324"}, -] -"oslo.concurrency" = [ - {file = "oslo.concurrency-4.5.1-py3-none-any.whl", hash = "sha256:2464f8b5b30ee93670169990207d683fa9ee09aa671c404b17427d960515c37d"}, - {file = "oslo.concurrency-4.5.1.tar.gz", hash = "sha256:6869b946b93d95babf20cd16be06fc35a5ec14d07ea2c1f315f4ac6ea5f0da17"}, -] -"oslo.config" = [ - {file = "oslo.config-8.8.0-py3-none-any.whl", hash = "sha256:b1e2a398450ea35a8e5630d8b23057b8939838c4433cd25a20cc3a36d5df9e3b"}, - {file = "oslo.config-8.8.0.tar.gz", hash = "sha256:96933d3011dae15608a11616bfb00d947e22da3cb09b6ff37ddd7576abd4764c"}, -] -"oslo.context" = [ - {file = "oslo.context-4.1.0-py3-none-any.whl", hash = "sha256:a0cf84fe7970cc070a821c1a88dc66dfceb81233a93f137a3715108804c7b9d5"}, - {file = "oslo.context-4.1.0.tar.gz", hash = "sha256:75a9a722a552fba8a89e8a01028fa82a6190ab317a9591bb83303a2210a79144"}, -] -"oslo.db" = [ - {file = "oslo.db-11.3.0-py3-none-any.whl", hash = "sha256:c334ff4de3a3c30f98e67f78d6a24e69a210ec3f004972ceaf39da0c89b2137f"}, - {file = "oslo.db-11.3.0.tar.gz", hash = "sha256:092959234e55f29fa50a08cf706e8b662e32da754dac586323de530ccfd62673"}, -] -"oslo.i18n" = [ - {file = "oslo.i18n-5.1.0-py3-none-any.whl", hash = "sha256:75086cfd898819638ca741159f677e2073a78ca86a9c9be8d38b46800cdf2dc9"}, - {file = "oslo.i18n-5.1.0.tar.gz", hash = "sha256:6bf111a6357d5449640852de4640eae4159b5562bbba4c90febb0034abc095d0"}, -] -"oslo.log" = [ - {file = "oslo.log-4.8.0-py3-none-any.whl", hash = "sha256:b061c66ec176cf5b197432709a7f14517b913abb6ea854ce6aaa997c8f7a4cb6"}, - {file = "oslo.log-4.8.0.tar.gz", hash = "sha256:9eddf6f6a2035327f2a3231a108b98e21ad90c0680380d9d1bc647ac9663e056"}, -] -"oslo.messaging" = [ - {file = "oslo.messaging-12.13.0-py3-none-any.whl", hash = "sha256:cef851e4ad16c368633246bf0ba3179be04a267e6cccbd5a9aece1a7fd3e6b7c"}, - {file = "oslo.messaging-12.13.0.tar.gz", hash = "sha256:2a5ef1d3b8edfb3c7b0fde07033175f81a97d010188616829cc1db05c57124e8"}, -] -"oslo.metrics" = [ - {file = "oslo.metrics-0.4.0-py3-none-any.whl", hash = "sha256:0f03845838f84379f6773a4f18a928a4438db4a5810c44623650ec9c4ef3b629"}, - {file = "oslo.metrics-0.4.0.tar.gz", hash = "sha256:ebbd9eab24869dcd9ef6445d0ad6a806329b42cb409139598056c06f1b0f1f3a"}, -] -"oslo.middleware" = [ - {file = "oslo.middleware-4.5.1-py3-none-any.whl", hash = "sha256:e1ce23564837bd35ba44862b7538dde187fc405f012e562c97b3ec10a8c4dafc"}, - {file = "oslo.middleware-4.5.1.tar.gz", hash = "sha256:c286933ce38ceeedae6b613599ad329546373ca27e0b130d506b6f0cce1099b3"}, -] -"oslo.policy" = [ - {file = "oslo.policy-3.8.2-py3-none-any.whl", hash = "sha256:4102cb537ebabf23e6e5ca6df344bcc4c6725252434f07427b9baa4f101183d4"}, - {file = "oslo.policy-3.8.2.tar.gz", hash = "sha256:233030f9acbc3cb894c66943fd71406ec12825776021f5dda4afab6f1762837f"}, -] -"oslo.serialization" = [ - {file = "oslo.serialization-4.3.0-py3-none-any.whl", hash = "sha256:6c1c483231c3827787af9b6ca4a45f4e45fe364772a24692b02de78fe48eafb1"}, - {file = "oslo.serialization-4.3.0.tar.gz", hash = "sha256:3aa472f434aee8bbcc0725312b7f409aa1fa54bbc134904124cf49b0e86b9115"}, -] -"oslo.service" = [ - {file = "oslo.service-2.8.0-py3-none-any.whl", hash = "sha256:9ce36992aa96b0adacc0377c5b16acf579f5d274560432c6deaa141d20e914bc"}, - {file = "oslo.service-2.8.0.tar.gz", hash = "sha256:15680c007cc8f45e3e0ee98881b58e21baffac1a31d0aa7f855c6a788f04bd8e"}, -] -"oslo.utils" = [ - {file = "oslo.utils-4.13.0-py3-none-any.whl", hash = "sha256:dab26f205980a379fe7068dd4f9010809a2ae7dddcbecde53e18cf8fa4a251d9"}, - {file = "oslo.utils-4.13.0.tar.gz", hash = "sha256:45ba8aaa5ed056a8e8e46059ef93d5c2d7b9c99bc7480e361cf5783e47f28fba"}, -] -"oslo.versionedobjects" = [ - {file = "oslo.versionedobjects-2.6.0-py3-none-any.whl", hash = "sha256:ab4c592aa746ec819807bea34bd9060ad9e48ffac5b194977bcbd43f86f9629f"}, - {file = "oslo.versionedobjects-2.6.0.tar.gz", hash = "sha256:3debcb6adae9fac5440b9d30e913feda1994ff45647b980b750e37ab5851aecb"}, -] -osprofiler = [ - {file = "osprofiler-3.4.3-py3-none-any.whl", hash = "sha256:163fa20149316c4a41bd48aece5805f70bf960d58a4e5de38b1c881e40f0cc4c"}, - {file = "osprofiler-3.4.3.tar.gz", hash = "sha256:5cea450598a873e4e11d353ff9f0d16e9f3a72e9e2007e7f056b90379dcd54e1"}, -] -ovs = [ - {file = "ovs-2.17.1.post1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:963a031e2f719e71847f0f3ef62f8ee893df673d9841f63c603f0910fed59b82"}, - {file = "ovs-2.17.1.post1-py3-none-any.whl", hash = "sha256:abae07b4449093a92b9338cf5760955d67de0b1f139db9ff460658ceb88a038f"}, - {file = "ovs-2.17.1.post1.tar.gz", hash = "sha256:575c2d1aecf3599a77ea4c0634ca0a71a6089775c46d4b6ce04d69502428d9d8"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -paste = [ - {file = "Paste-3.5.0-py2.py3-none-any.whl", hash = "sha256:8e08200a570f7e29dfafd4eea0e1b38a6193cfda6446bb515db74250b632c53b"}, - {file = "Paste-3.5.0.tar.gz", hash = "sha256:1b095c42dc91d426f3ae85101796b14d265887f8f36f3aad143a5f29effdc39d"}, -] -pastedeploy = [ - {file = "PasteDeploy-2.1.1-py2.py3-none-any.whl", hash = "sha256:14923cfd6ad4281b570693afc278bab5076fbdd4cd15aa9d99b042d694aa4217"}, - {file = "PasteDeploy-2.1.1.tar.gz", hash = "sha256:6dead6ab9823a85d585ef27f878bc647f787edb9ca8da0716aa9f1261b464817"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pbr = [ - {file = "pbr-5.9.0-py2.py3-none-any.whl", hash = "sha256:e547125940bcc052856ded43be8e101f63828c2d94239ffbe2b327ba3d5ccf0a"}, - {file = "pbr-5.9.0.tar.gz", hash = "sha256:e8dca2f4b43560edef58813969f52a56cef023146cbb8931626db80e6c1c4308"}, -] -pecan = [ - {file = "pecan-1.4.1.tar.gz", hash = "sha256:2cbd0eedbb5747c04cdf18c4aae4f1c6e9d950f3af70af2544b074f7ed7a0480"}, -] -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-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -prettytable = [ - {file = "prettytable-3.3.0-py3-none-any.whl", hash = "sha256:d1c34d72ea2c0ffd6ce5958e71c428eb21a3d40bf3133afe319b24aeed5af407"}, - {file = "prettytable-3.3.0.tar.gz", hash = "sha256:118eb54fd2794049b810893653b20952349df6d3bc1764e7facd8a18064fa9b0"}, -] -prometheus-client = [ - {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, - {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pydantic = [ - {file = "pydantic-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:05ddfd37c1720c392f4e0d43c484217b7521558302e7069ce8d318438d297739"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a7c6002203fe2c5a1b5cbb141bb85060cbff88c2d78eccbc72d97eb7022c43e4"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:589eb6cd6361e8ac341db97602eb7f354551482368a37f4fd086c0733548308e"}, - {file = "pydantic-1.8.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:10e5622224245941efc193ad1d159887872776df7a8fd592ed746aa25d071840"}, - {file = "pydantic-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:99a9fc39470010c45c161a1dc584997f1feb13f689ecf645f59bb4ba623e586b"}, - {file = "pydantic-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a83db7205f60c6a86f2c44a61791d993dff4b73135df1973ecd9eed5ea0bda20"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:41b542c0b3c42dc17da70554bc6f38cbc30d7066d2c2815a94499b5684582ecb"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ea5cb40a3b23b3265f6325727ddfc45141b08ed665458be8c6285e7b85bd73a1"}, - {file = "pydantic-1.8.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:18b5ea242dd3e62dbf89b2b0ec9ba6c7b5abaf6af85b95a97b00279f65845a23"}, - {file = "pydantic-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:234a6c19f1c14e25e362cb05c68afb7f183eb931dd3cd4605eafff055ebbf287"}, - {file = "pydantic-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:021ea0e4133e8c824775a0cfe098677acf6fa5a3cbf9206a376eed3fc09302cd"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e710876437bc07bd414ff453ac8ec63d219e7690128d925c6e82889d674bb505"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:ac8eed4ca3bd3aadc58a13c2aa93cd8a884bcf21cb019f8cfecaae3b6ce3746e"}, - {file = "pydantic-1.8.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:4a03cbbe743e9c7247ceae6f0d8898f7a64bb65800a45cbdc52d65e370570820"}, - {file = "pydantic-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:8621559dcf5afacf0069ed194278f35c255dc1a1385c28b32dd6c110fd6531b3"}, - {file = "pydantic-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8b223557f9510cf0bfd8b01316bf6dd281cf41826607eada99662f5e4963f316"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:244ad78eeb388a43b0c927e74d3af78008e944074b7d0f4f696ddd5b2af43c62"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:05ef5246a7ffd2ce12a619cbb29f3307b7c4509307b1b49f456657b43529dc6f"}, - {file = "pydantic-1.8.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:54cd5121383f4a461ff7644c7ca20c0419d58052db70d8791eacbbe31528916b"}, - {file = "pydantic-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:4be75bebf676a5f0f87937c6ddb061fa39cbea067240d98e298508c1bda6f3f3"}, - {file = "pydantic-1.8.2-py3-none-any.whl", hash = "sha256:fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833"}, - {file = "pydantic-1.8.2.tar.gz", hash = "sha256:26464e57ccaafe72b7ad156fdaa4e9b9ef051f69e175dbbb463283000c05ab7b"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pyinotify = [ - {file = "pyinotify-0.9.6.tar.gz", hash = "sha256:9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4"}, -] -pyparsing = [ - {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, - {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pytest-cov = [ - {file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"}, - {file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"}, -] -pytest-forked = [ - {file = "pytest-forked-1.4.0.tar.gz", hash = "sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e"}, - {file = "pytest_forked-1.4.0-py3-none-any.whl", hash = "sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8"}, -] -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-1.11.0.tar.gz", hash = "sha256:71b506d49d34e539cc3cfdb7ce2c5f072bea5c953320002c95968e0238f8ecf1"}, - {file = "pytest_metadata-1.11.0-py2.py3-none-any.whl", hash = "sha256:576055b8336dd4a9006dd2a47615f76f2f8c30ab12b1b1c039d99e834583523f"}, -] -pytest-xdist = [ - {file = "pytest-xdist-2.4.0.tar.gz", hash = "sha256:89b330316f7fc475f999c81b577c2b926c9569f3d397ae432c0c2e2496d61ff9"}, - {file = "pytest_xdist-2.4.0-py3-none-any.whl", hash = "sha256:7b61ebb46997a0820a263553179d6d1e25a8c50d8a8620cd1aa1e20e3be99168"}, -] -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"}, -] -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-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -regex = [ - {file = "regex-2022.4.24-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f86aef546add4ff1202e1f31e9bb54f9268f17d996b2428877283146bf9bc013"}, - {file = "regex-2022.4.24-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e944268445b5694f5d41292c9228f0ca46d5a32a67f195d5f8547c1f1d91f4bc"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8da3145f4b72f7ce6181c804eaa44cdcea313c8998cdade3d9e20a8717a9cb"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fd464e547dbabf4652ca5fe9d88d75ec30182981e737c07b3410235a44b9939"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:071bcb625e890f28b7c4573124a6512ea65107152b1d3ca101ce33a52dad4593"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c2de7f32fa87d04d40f54bce3843af430697aba51c3a114aa62837a0772f219"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a07e8366115069f26822c47732122ab61598830a69f5629a37ea8881487c107"}, - {file = "regex-2022.4.24-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:036d1c1fbe69eba3ee253c107e71749cdbb4776db93d674bc0d5e28f30300734"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:af1e687ffab18a75409e5e5d6215b6ccd41a5a1a0ea6ce9665e01253f737a0d3"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:165cc75cfa5aa0f12adb2ac6286330e7229a06dc0e6c004ec35da682b5b89579"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:3e35c50b27f36176c792738cb9b858523053bc495044d2c2b44db24376b266f1"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:43ee0df35925ae4b0cc6ee3f60b73369e559dd2ac40945044da9394dd9d3a51d"}, - {file = "regex-2022.4.24-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:58521abdab76583bd41ef47e5e2ddd93b32501aee4ee8cee71dee10a45ba46b1"}, - {file = "regex-2022.4.24-cp310-cp310-win32.whl", hash = "sha256:275afc7352982ee947fc88f67a034b52c78395977b5fc7c9be15f7dc95b76f06"}, - {file = "regex-2022.4.24-cp310-cp310-win_amd64.whl", hash = "sha256:253f858a0255cd91a0424a4b15c2eedb12f20274f85731b0d861c8137e843065"}, - {file = "regex-2022.4.24-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:85b7ee4d0c7a46296d884f6b489af8b960c4291d76aea4b22fd4fbe05e6ec08e"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0da7ef160d4f3eb3d4d3e39a02c3c42f7dbcfce62c81f784cc99fc7059765f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f2e2cef324ca9355049ee1e712f68e2e92716eba24275e6767b9bfa15f1f478"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6165e737acb3bea3271372e8aa5ebe7226c8a8e8da1b94af2d6547c5a09d689d"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f6bd8178cce5bb56336722d5569d19c50bba5915a69a2050c497fb921e7cb0f"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:45b761406777a681db0c24686178532134c937d24448d9e085279b69e9eb7da4"}, - {file = "regex-2022.4.24-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dfbadb7b74d95f72f9f9dbf9778f7de92722ab520a109ceaf7927461fa85b10"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9913bcf730eb6e9b441fb176832eea9acbebab6035542c7c89d90c803f5cd3be"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:68aed3fb0c61296bd6d234f558f78c51671f79ccb069cbcd428c2eea6fee7a5b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8e7d33f93cdd01868327d834d0f5bb029241cd293b47d51b96814dec27fc9b4b"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:82b7fc67e49fdce671bdbec1127189fc979badf062ce6e79dc95ef5e07a8bf92"}, - {file = "regex-2022.4.24-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c36906a7855ec33a9083608e6cd595e4729dab18aeb9aad0dd0b039240266239"}, - {file = "regex-2022.4.24-cp36-cp36m-win32.whl", hash = "sha256:b2df3ede85d778c949d9bd2a50237072cee3df0a423c91f5514f78f8035bde87"}, - {file = "regex-2022.4.24-cp36-cp36m-win_amd64.whl", hash = "sha256:dffd9114ade73137ab2b79a8faf864683dbd2dbbb6b23a305fbbd4cbaeeb2187"}, - {file = "regex-2022.4.24-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a0ef57cccd8089b4249eebad95065390e56c04d4a92c51316eab4131bca96a9"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12af15b6edb00e425f713160cfd361126e624ec0de86e74f7cad4b97b7f169b3"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f271d0831d8ebc56e17b37f9fa1824b0379221d1238ae77c18a6e8c47f1fdce"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37903d5ca11fa47577e8952d2e2c6de28553b11c70defee827afb941ab2c6729"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b747cef8e5dcdaf394192d43a0c02f5825aeb0ecd3d43e63ae500332ab830b0"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:582ea06079a03750b5f71e20a87cd99e646d796638b5894ff85987ebf5e04924"}, - {file = "regex-2022.4.24-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa6daa189db9104787ff1fd7a7623ce017077aa59eaac609d0d25ba95ed251a0"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7dbc96419ef0fb6ac56626014e6d3a345aeb8b17a3df8830235a88626ffc8d84"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:0fb6cb16518ac7eff29d1e0b0cce90275dfae0f17154165491058c31d58bdd1d"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bea61de0c688198e3d9479344228c7accaa22a78b58ec408e41750ebafee6c08"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:46cbc5b23f85e94161b093dba1b49035697cf44c7db3c930adabfc0e6d861b95"}, - {file = "regex-2022.4.24-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:50b77622016f03989cd06ecf6b602c7a6b4ed2e3ce04133876b041d109c934ee"}, - {file = "regex-2022.4.24-cp37-cp37m-win32.whl", hash = "sha256:2bde99f2cdfd6db1ec7e02d68cadd384ffe7413831373ea7cc68c5415a0cb577"}, - {file = "regex-2022.4.24-cp37-cp37m-win_amd64.whl", hash = "sha256:66fb765b2173d90389384708e3e1d3e4be1148bd8d4d50476b1469da5a2f0229"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:709396c0c95b95045fac89b94f997410ff39b81a09863fe21002f390d48cc7d3"}, - {file = "regex-2022.4.24-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a608022f4593fc67518c6c599ae5abdb03bb8acd75993c82cd7a4c8100eff81"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb7107faf0168de087f62a2f2ed00f9e9da12e0b801582b516ddac236b871cda"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aabc28f7599f781ddaeac168d0b566d0db82182cc3dcf62129f0a4fc2927b811"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92ad03f928675ca05b79d3b1d3dfc149e2226d57ed9d57808f82105d511d0212"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ba3c304a4a5d8112dbd30df8b3e4ef59b4b07807957d3c410d9713abaee9a8"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2acf5c66fbb62b5fe4c40978ddebafa50818f00bf79d60569d9762f6356336e"}, - {file = "regex-2022.4.24-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c4d9770e579eb11b582b2e2fd19fa204a15cb1589ae73cd4dcbb63b64f3e828"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:02543d6d5c32d361b7cc468079ba4cddaaf4a6544f655901ba1ff9d8e3f18755"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:73ed1b06abadbf6b61f6033a07c06f36ec0ddca117e41ef2ac37056705e46458"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3241db067a7f69da57fba8bca543ac8a7ca415d91e77315690202749b9fdaba1"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d128e278e5e554c5c022c7bed410ca851e00bacebbb4460de546a73bc53f8de4"}, - {file = "regex-2022.4.24-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1d53835922cd0f9b74b2742453a444865a70abae38d12eb41c59271da66f38d"}, - {file = "regex-2022.4.24-cp38-cp38-win32.whl", hash = "sha256:f2a5d9f612091812dee18375a45d046526452142e7b78c4e21ab192db15453d5"}, - {file = "regex-2022.4.24-cp38-cp38-win_amd64.whl", hash = "sha256:a850f5f369f1e3b6239da7fb43d1d029c1e178263df671819889c47caf7e4ff3"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bedb3d01ad35ea1745bdb1d57f3ee0f996f988c98f5bbae9d068c3bb3065d210"}, - {file = "regex-2022.4.24-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8bf867ba71856414a482e4b683500f946c300c4896e472e51d3db8dfa8dc8f32"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b415b82e5be7389ec5ee7ee35431e4a549ea327caacf73b697c6b3538cb5c87f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dae5affbb66178dad6c6fd5b02221ca9917e016c75ee3945e9a9563eb1fbb6f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e65580ae3137bce712f505ec7c2d700aef0014a3878c4767b74aff5895fc454f"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e9e983fc8e0d4d5ded7caa5aed39ca2cf6026d7e39801ef6f0af0b1b6cd9276"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad3a770839aa456ff9a9aa0e253d98b628d005a3ccb37da1ff9be7c84fee16"}, - {file = "regex-2022.4.24-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ed625205f5f26984382b68e4cbcbc08e6603c9e84c14b38457170b0cc71c823b"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c4fdf837666f7793a5c3cfa2f2f39f03eb6c7e92e831bc64486c2f547580c2b3"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ed26c3d2d62c6588e0dad175b8d8cc0942a638f32d07b80f92043e5d73b7db67"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f89d26e50a4c7453cb8c415acd09e72fbade2610606a9c500a1e48c43210a42d"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:97af238389cb029d63d5f2d931a7e8f5954ad96e812de5faaed373b68e74df86"}, - {file = "regex-2022.4.24-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:be392d9cd5309509175a9d7660dc17bf57084501108dbff0c5a8bfc3646048c3"}, - {file = "regex-2022.4.24-cp39-cp39-win32.whl", hash = "sha256:bcc6f7a3a95119c3568c572ca167ada75f8319890706283b9ba59b3489c9bcb3"}, - {file = "regex-2022.4.24-cp39-cp39-win_amd64.whl", hash = "sha256:5b9c7b6895a01204296e9523b3e12b43e013835a9de035a783907c2c1bc447f0"}, - {file = "regex-2022.4.24.tar.gz", hash = "sha256:92183e9180c392371079262879c6532ccf55f808e6900df5d9f03c9ca8807255"}, -] -"repoze.lru" = [ - {file = "repoze.lru-0.7-py3-none-any.whl", hash = "sha256:f77bf0e1096ea445beadd35f3479c5cff2aa1efe604a133e67150bc8630a62ea"}, - {file = "repoze.lru-0.7.tar.gz", hash = "sha256:0429a75e19380e4ed50c0694e26ac8819b4ea7851ee1fc7583c8572db80aff77"}, -] -requests = [ - {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, - {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, -] -rfc3986 = [ - {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, - {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, -] -routes = [ - {file = "Routes-2.5.1-py2.py3-none-any.whl", hash = "sha256:fab5a042a3a87778eb271d053ca2723cadf43c95b471532a191a48539cb606ea"}, - {file = "Routes-2.5.1.tar.gz", hash = "sha256:b6346459a15f0cbab01a45a90c3d25caf980d4733d628b4cc1952b865125d053"}, -] -setproctitle = [ - {file = "setproctitle-1.2.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0a668acec8b61a971de54bc4c733869ea7b0eb1348eae5a32b9477f788908e5c"}, - {file = "setproctitle-1.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52265182fe5ac237d179d8e949248d307882a2e6ec7f189c8dac1c9d1b3631fa"}, - {file = "setproctitle-1.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d00ef63a1f78e13c236895badac77b6c8503377467b9c1a4f81fe729d16e03"}, - {file = "setproctitle-1.2.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82a49aaf440232c762539ab3737b5174d31aba0141fd4bf4d8739c28d18624"}, - {file = "setproctitle-1.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:791bed39e4ecbdd008b64999a60c9cc560d17b3836ca0c27cd4708e8e1bcf495"}, - {file = "setproctitle-1.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8e4da68d4d4ba46d4c5db6ae5eb61b11de9c520f25ae8334570f4d0018a8611"}, - {file = "setproctitle-1.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47f97f591ea2335b7d35f5e9ad7d806385338182dc6de5732d091e9c70ed1cc0"}, - {file = "setproctitle-1.2.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:501c084cf3df7d848e91c97d4f8c44d799ba545858a79c6960326ce6f285b4e4"}, - {file = "setproctitle-1.2.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a39b30d7400c0d50941fe19e1fe0b7d35676186fec4d9c010129ac91b883fd26"}, - {file = "setproctitle-1.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b213376fc779c0e1a4b60008f3fd03f74e9baa9665db37fa6646e98d31baa6d8"}, - {file = "setproctitle-1.2.3-cp310-cp310-win32.whl", hash = "sha256:e24fa9251cc22ddb88ef183070063fdca826c9636381f1c4fb9d2a1dccb7c2a4"}, - {file = "setproctitle-1.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:3b1883ccdbee624386dc046cfbcd80c4e75e24c478f35627984a79892e088b88"}, - {file = "setproctitle-1.2.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9cf1098205c23fbcaaaef798afaff714fa9ffadf24166f5e85e6d16b9ef82a1"}, - {file = "setproctitle-1.2.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a546cd2dfaecb227d24122257b98b2e062762871888835c7b608f1c41c3a77ad"}, - {file = "setproctitle-1.2.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e40c35564081983eab6a07f9eb5693867bc447b0edf9c61b69446223d6593814"}, - {file = "setproctitle-1.2.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d083cae02e344e760bd21c28d591ac5f7ddbd6e1a0ecba62092ae724abd5c28"}, - {file = "setproctitle-1.2.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2fa9f4b382a6cf88f2f345044d0916a92f37cac21355585bd14bc7ee91af187"}, - {file = "setproctitle-1.2.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:38855b06a124361dc73c198853dee3f2b775531c4f4b7472f0e3d441192b3d8a"}, - {file = "setproctitle-1.2.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:a81067bdc015fee1cc148c79b346f24fdad1224a8898b4239c7cbdee1add8a60"}, - {file = "setproctitle-1.2.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:409a39f92e123be061626fdfd3e76625b04db103479bb4ba1c85b587db0b9498"}, - {file = "setproctitle-1.2.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a993610383028f093112dce7f77b262e88fce9d70127535fcdc78953179857e8"}, - {file = "setproctitle-1.2.3-cp36-cp36m-win32.whl", hash = "sha256:4eed53c12146de5df959d84384ffc2774651cab406ee4854e12728cf0eee5297"}, - {file = "setproctitle-1.2.3-cp36-cp36m-win_amd64.whl", hash = "sha256:335750c9eb5b18326a138a09266862a52b4f474277c3e410b419bea9a1df8bee"}, - {file = "setproctitle-1.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a72bbe53191fbe574c94c0f8b9451dce535b398b7c47ce2e26e21d55eaa1d7e"}, - {file = "setproctitle-1.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5464e6812d050c986e6e9b97d54ab88c23dbe9d81151a2fa10b48bb5133a1e2c"}, - {file = "setproctitle-1.2.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec7c3a27460ae7811e868e5494e3d8aee5012912744c48fa2d80b5e614b1b972"}, - {file = "setproctitle-1.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01cef383afc7ea7a3b1696818c8712029bf2f1d64f5d4777dbaf0166becf2c00"}, - {file = "setproctitle-1.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c7315e53b49ef2227d47a75c3d28c4c51ea9ee46a066460732c0d0f8e605a7"}, - {file = "setproctitle-1.2.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0b444ed4051161a3b0a85dec2bb9b50922f37c75f5fb86f7784b235cf6754336"}, - {file = "setproctitle-1.2.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:be0b46beeb1c92450079a7f30a025d69b63fd6a5de040ebc478fd6e6bf3b63fc"}, - {file = "setproctitle-1.2.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:60f7a2f5da36a3075dda7edbee2173be5b765b0460b8d401ee01a11f68dee1d2"}, - {file = "setproctitle-1.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:138bfa853e607f06d95b0f253e9152b32a00af3d0dbec96abf0871236a483932"}, - {file = "setproctitle-1.2.3-cp37-cp37m-win32.whl", hash = "sha256:e80fc59739a738b5c67afbbb9d1c238aa47b6d290c2ada872b15c819350ec5f8"}, - {file = "setproctitle-1.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:a912df3f065572cef211e9ed9f157a0dd2bd73d150281f18f00728afa1b1e5d2"}, - {file = "setproctitle-1.2.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d45dbe4171f8c27a515ecb4562f4cd9ef67d98474bea18e0c14dfbdc2b225050"}, - {file = "setproctitle-1.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9d905ac84dde5227de6516ec08639759f99684148bb88ba05f4cbdaebff5d69"}, - {file = "setproctitle-1.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f272b84d79bbe15af26ecf6f7c129bbe642f628866c9253659cdb519216f138f"}, - {file = "setproctitle-1.2.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc586f002fd5dd8695718e22a83771fd9f744f081a2b8e614bf6b5f44135964a"}, - {file = "setproctitle-1.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4051c3a3b07f8a4cca205cd45366a22f322da2f26491c0d6b313a10f8c77b734"}, - {file = "setproctitle-1.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25538341e56f9e75e9759229ff674282dccb5b1ce79a974f968d36208d465674"}, - {file = "setproctitle-1.2.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fdb2231db176e0848b757fc5d9bed08bc8a498b5b9abb8b640f39e9720f309fc"}, - {file = "setproctitle-1.2.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0670f2130a7ca0e167d3d5a7c8e3c707340b8693d6af7416ff55c18ab2a0a43f"}, - {file = "setproctitle-1.2.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9a92978030616f5e20617b7b832efee398df82072b7239c53db41c8026f5fe55"}, - {file = "setproctitle-1.2.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28e0df80d5069586a08a3cb463fb23503a37cbb805826ef93164bc4bfb5f35b9"}, - {file = "setproctitle-1.2.3-cp38-cp38-win32.whl", hash = "sha256:35b869e416a105c59133a48b569c6e808159485d916f55e80c7394a42667a386"}, - {file = "setproctitle-1.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:f47f6704880869d8e8f52efac2f2f60f5ed4cb9662b98fc1c7e916eefe76e61d"}, - {file = "setproctitle-1.2.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ccb0b5334dbf248f7504d88b5e9e9a09a0da119eeafacd6f7247f7c055443522"}, - {file = "setproctitle-1.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:14641a4ec2f2110cf4afc666eaecc82ba67814e927e02647fa1f4cf74476e752"}, - {file = "setproctitle-1.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4a3cb19346a0cd680617742f5e39fdd14596f6fd91d6c9038272663e37441b4"}, - {file = "setproctitle-1.2.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2ac0ebd9c63c3d19f768966be2f771bf088bc7373c63ed6fcbb3444a30d0f62"}, - {file = "setproctitle-1.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32a84cc309b9e595f06a55bec2fa335a23c307a55d2989864b60ecd71ea87897"}, - {file = "setproctitle-1.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f55493c987935fa540ef9ffb7ee7db03b4a18a9d5cc103681e2e6a6dfbd7054"}, - {file = "setproctitle-1.2.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f2a137984d3436f13e4bf7c8ca6f6f292df119c009c5e39556cabba4f4bfbf92"}, - {file = "setproctitle-1.2.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f06ff922254023eaabef6af6631f89e5f2f420cf0112865d57d7703f933d4e9f"}, - {file = "setproctitle-1.2.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:eb06c1086cf8c8cf12ce45a02450befcb408dfd646d0ccb47d388fd6e73c333a"}, - {file = "setproctitle-1.2.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2c8c245e08f6a296fdaa1b36894ec40e20464a4fc6458e6178c8d55a2f83457a"}, - {file = "setproctitle-1.2.3-cp39-cp39-win32.whl", hash = "sha256:21d6e064b8fee4e58eb00cdd8771c638de1bc30bb6c02d0208af9ca0a1c00898"}, - {file = "setproctitle-1.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:efb3001fd9e71d3ae939d826bf436f0446fd30a6ac01e0ce08cd7eb55ee5ac57"}, - {file = "setproctitle-1.2.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3dbe87e76197f9a303451512088c18c96f09a6fc4f871a92e5bd695f46f94a26"}, - {file = "setproctitle-1.2.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b207de9e4f4aa5265b36dd826a1f6ef6566b064a042033bd7447efb7e9a7664"}, - {file = "setproctitle-1.2.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ac48a94040ef21be37366cbc8270fcba2ca103d6c64da6099d5a7b034f72d0"}, - {file = "setproctitle-1.2.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9fb5d2e66f94eebc3d06cda9e71a3fffef24c5273971180a4b5628a37fae05a5"}, - {file = "setproctitle-1.2.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:423f8a6d8116acf975ebf93d6b5c4a752f7d2039fa9aafe175a62de86e17016e"}, - {file = "setproctitle-1.2.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c0be45535e934deab3aa72ed1a8487174af4ea12cec124478c68a312e1c8b13"}, - {file = "setproctitle-1.2.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65a9384cafdfed98f91416e93705ad08f049c298afcb9c515882beba23153bd0"}, - {file = "setproctitle-1.2.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d312a170f539895c8093b5e68ba126aa131c9f0d00f6360410db27ec50bf7afa"}, - {file = "setproctitle-1.2.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c93a2272740e60cddf59d3e1d35dbb89fcc3676f5ca9618bb4e6ae9633fdf13c"}, - {file = "setproctitle-1.2.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f59444a25fb42ca07f53a4474b1545d97a06f016e6c6b8246eee5b146820b5"}, - {file = "setproctitle-1.2.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06aab65e68163ead9d046b452dd9ad1fc6834ce6bde490f63fdce3be53e9cc73"}, - {file = "setproctitle-1.2.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97accd117392b1e57e09888792750c403d7729b7e4b193005178b3736b325ea0"}, - {file = "setproctitle-1.2.3.tar.gz", hash = "sha256:ecf28b1c07a799d76f4326e508157b71aeda07b84b90368ea451c0710dbd32c0"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -skyline-log = [] -sortedcontainers = [ - {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, - {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, -] -soupsieve = [ - {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, - {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, -] -sqlalchemy = [ - {file = "SQLAlchemy-1.4.36-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:81e53bd383c2c33de9d578bfcc243f559bd3801a0e57f2bcc9a943c790662e0c"}, - {file = "SQLAlchemy-1.4.36-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6e1fe00ee85c768807f2a139b83469c1e52a9ffd58a6eb51aa7aeb524325ab18"}, - {file = "SQLAlchemy-1.4.36-cp27-cp27m-win32.whl", hash = "sha256:d57ac32f8dc731fddeb6f5d1358b4ca5456e72594e664769f0a9163f13df2a31"}, - {file = "SQLAlchemy-1.4.36-cp27-cp27m-win_amd64.whl", hash = "sha256:fca8322e04b2dde722fcb0558682740eebd3bd239bea7a0d0febbc190e99dc15"}, - {file = "SQLAlchemy-1.4.36-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:53d2d9ee93970c969bc4e3c78b1277d7129554642f6ffea039c282c7dc4577bc"}, - {file = "SQLAlchemy-1.4.36-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:f0394a3acfb8925db178f7728adb38c027ed7e303665b225906bfa8099dc1ce8"}, - {file = "SQLAlchemy-1.4.36-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c606d8238feae2f360b8742ffbe67741937eb0a05b57f536948d198a3def96"}, - {file = "SQLAlchemy-1.4.36-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8d07fe2de0325d06e7e73281e9a9b5e259fbd7cbfbe398a0433cbb0082ad8fa7"}, - {file = "SQLAlchemy-1.4.36-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5041474dcab7973baa91ec1f3112049a9dd4652898d6a95a6a895ff5c58beb6b"}, - {file = "SQLAlchemy-1.4.36-cp310-cp310-win32.whl", hash = "sha256:be094460930087e50fd08297db9d7aadaed8408ad896baf758e9190c335632da"}, - {file = "SQLAlchemy-1.4.36-cp310-cp310-win_amd64.whl", hash = "sha256:64d796e9af522162f7f2bf7a3c5531a0a550764c426782797bbeed809d0646c5"}, - {file = "SQLAlchemy-1.4.36-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a0ae3aa2e86a4613f2d4c49eb7da23da536e6ce80b2bfd60bbb2f55fc02b0b32"}, - {file = "SQLAlchemy-1.4.36-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d50cb71c1dbed70646d521a0975fb0f92b7c3f84c61fa59e07be23a1aaeecfc"}, - {file = "SQLAlchemy-1.4.36-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:16abf35af37a3d5af92725fc9ec507dd9e9183d261c2069b6606d60981ed1c6e"}, - {file = "SQLAlchemy-1.4.36-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864a83bd345871ad9699ce466388f836db7572003d67d9392a71998092210e3"}, - {file = "SQLAlchemy-1.4.36-cp36-cp36m-win32.whl", hash = "sha256:fbf8c09fe9728168f8cc1b40c239eab10baf9c422c18be7f53213d70434dea43"}, - {file = "SQLAlchemy-1.4.36-cp36-cp36m-win_amd64.whl", hash = "sha256:6e859fa96605027bd50d8e966db1c4e1b03e7b3267abbc4b89ae658c99393c58"}, - {file = "SQLAlchemy-1.4.36-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:166a3887ec355f7d2f12738f7fa25dc8ac541867147a255f790f2f41f614cb44"}, - {file = "SQLAlchemy-1.4.36-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e885548da361aa3f8a9433db4cfb335b2107e533bf314359ae3952821d84b3e"}, - {file = "SQLAlchemy-1.4.36-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5c90ef955d429966d84326d772eb34333178737ebb669845f1d529eb00c75e72"}, - {file = "SQLAlchemy-1.4.36-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a052bd9f53004f8993c624c452dfad8ec600f572dd0ed0445fbe64b22f5570e"}, - {file = "SQLAlchemy-1.4.36-cp37-cp37m-win32.whl", hash = "sha256:dce3468bf1fc12374a1a732c9efd146ce034f91bb0482b602a9311cb6166a920"}, - {file = "SQLAlchemy-1.4.36-cp37-cp37m-win_amd64.whl", hash = "sha256:6cb4c4f57a20710cea277edf720d249d514e587f796b75785ad2c25e1c0fed26"}, - {file = "SQLAlchemy-1.4.36-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e74ce103b81c375c3853b436297952ef8d7863d801dcffb6728d01544e5191b5"}, - {file = "SQLAlchemy-1.4.36-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b20c4178ead9bc398be479428568ff31b6c296eb22e75776273781a6551973f"}, - {file = "SQLAlchemy-1.4.36-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:af2587ae11400157753115612d6c6ad255143efba791406ad8a0cbcccf2edcb3"}, - {file = "SQLAlchemy-1.4.36-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cf3077712be9f65c9aaa0b5bc47bc1a44789fd45053e2e3ecd59ff17c63fe9"}, - {file = "SQLAlchemy-1.4.36-cp38-cp38-win32.whl", hash = "sha256:ce20f5da141f8af26c123ebaa1b7771835ca6c161225ce728962a79054f528c3"}, - {file = "SQLAlchemy-1.4.36-cp38-cp38-win_amd64.whl", hash = "sha256:316c7e5304dda3e3ad711569ac5d02698bbc71299b168ac56a7076b86259f7ea"}, - {file = "SQLAlchemy-1.4.36-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:f522214f6749bc073262529c056f7dfd660f3b5ec4180c5354d985eb7219801e"}, - {file = "SQLAlchemy-1.4.36-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ecac4db8c1aa4a269f5829df7e706639a24b780d2ac46b3e485cbbd27ec0028"}, - {file = "SQLAlchemy-1.4.36-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3db741beaa983d4cbf9087558620e7787106319f7e63a066990a70657dd6b35"}, - {file = "SQLAlchemy-1.4.36-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ec89bf98cc6a0f5d1e28e3ad28e9be6f3b4bdbd521a4053c7ae8d5e1289a8a1"}, - {file = "SQLAlchemy-1.4.36-cp39-cp39-win32.whl", hash = "sha256:e12532c4d3f614678623da5d852f038ace1f01869b89f003ed6fe8c793f0c6a3"}, - {file = "SQLAlchemy-1.4.36-cp39-cp39-win_amd64.whl", hash = "sha256:cb441ca461bf97d00877b607f132772644b623518b39ced54da433215adce691"}, - {file = "SQLAlchemy-1.4.36.tar.gz", hash = "sha256:64678ac321d64a45901ef2e24725ec5e783f1f4a588305e196431447e7ace243"}, -] -sqlalchemy-migrate = [ - {file = "sqlalchemy-migrate-0.13.0.tar.gz", hash = "sha256:0bc02e292a040ade5e35a01d3ea744119e1309cdddb704fdb99bac13236614f8"}, - {file = "sqlalchemy_migrate-0.13.0-py2.py3-none-any.whl", hash = "sha256:e5d2348db19a5062132d93e3b4d9e7644af552fffbec4c78cc5358f848d2f6c1"}, -] -sqlparse = [ - {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"}, - {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, -] -statsd = [ - {file = "statsd-3.3.0-py2.py3-none-any.whl", hash = "sha256:c610fb80347fca0ef62666d241bce64184bd7cc1efe582f9690e045c25535eaa"}, - {file = "statsd-3.3.0.tar.gz", hash = "sha256:e3e6db4c246f7c59003e51c9720a51a7f39a396541cb9b147ff4b14d15b5dd1f"}, -] -stevedore = [ - {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, - {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, -] -tempita = [ - {file = "Tempita-0.5.2-py3-none-any.whl", hash = "sha256:f4554840cb59c6b4a5df4fad27eea4e3cb47ca7089bfeefb5890ff1bb8af2117"}, - {file = "Tempita-0.5.2.tar.gz", hash = "sha256:cacecf0baa674d356641f1d406b8bff1d756d739c46b869a54de515d08e6fc9c"}, -] -testresources = [ - {file = "testresources-2.0.1-py2.py3-none-any.whl", hash = "sha256:67a361c3a2412231963b91ab04192209aa91a1aa052f0ab87245dbea889d1282"}, - {file = "testresources-2.0.1.tar.gz", hash = "sha256:ee9d1982154a1e212d4e4bac6b610800bfb558e4fb853572a827bc14a96e4417"}, -] -testscenarios = [ - {file = "testscenarios-0.5.0-py2.py3-none-any.whl", hash = "sha256:480263fa5d6e618125bdf092aab129a3aeed5996b1e668428f12cc56d6d01d28"}, - {file = "testscenarios-0.5.0.tar.gz", hash = "sha256:c257cb6b90ea7e6f8fef3158121d430543412c9a87df30b5dde6ec8b9b57a2b6"}, -] -testtools = [ - {file = "testtools-2.5.0-py3-none-any.whl", hash = "sha256:798525999f053e4df4e352c0c198baeb9f5079f34bad5bd57a44e97a54fa0330"}, - {file = "testtools-2.5.0.tar.gz", hash = "sha256:57c13433d94f9ffde3be6534177d10fb0c1507cc499319128958ca91a65cb23f"}, -] -tokenize-rt = [ - {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, - {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, -] -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-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -urllib3 = [ - {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, - {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, -] -vine = [ - {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, - {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, -] -waitress = [ - {file = "waitress-2.1.1-py3-none-any.whl", hash = "sha256:c549f5b2b4afd44d9d97d7cec79f3ef581e25d832827f415dc175327af674aa8"}, - {file = "waitress-2.1.1.tar.gz", hash = "sha256:e2e60576cf14a1539da79f7b7ee1e79a71e64f366a0b47db54a15e971f57bb16"}, -] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -webob = [ - {file = "WebOb-1.8.7-py2.py3-none-any.whl", hash = "sha256:73aae30359291c14fa3b956f8b5ca31960e420c28c1bec002547fb04928cf89b"}, - {file = "WebOb-1.8.7.tar.gz", hash = "sha256:b64ef5141be559cfade448f044fa45c2260351edcb6a8ef6b7e00c7dcef0c323"}, -] -webtest = [ - {file = "WebTest-3.0.0-py3-none-any.whl", hash = "sha256:2a001a9efa40d2a7e5d9cd8d1527c75f41814eb6afce2c3d207402547b1e5ead"}, - {file = "WebTest-3.0.0.tar.gz", hash = "sha256:54bd969725838d9861a9fa27f8d971f79d275d94ae255f5c501f53bb6d9929eb"}, -] -werkzeug = [ - {file = "Werkzeug-2.0.1-py3-none-any.whl", hash = "sha256:6c1ec500dcdba0baa27600f6a22f6333d8b662d22027ff9f6202e3367413caa8"}, - {file = "Werkzeug-2.0.1.tar.gz", hash = "sha256:1de1db30d010ff1af14a009224ec49ab2329ad2cde454c8a708130642d579c42"}, -] -win32-setctime = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] -wrapt = [ - {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, - {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, - {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, - {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, - {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, - {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, - {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, - {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, - {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, - {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, - {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, - {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, - {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, - {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, - {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, - {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, - {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, - {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, - {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, - {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, - {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, - {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, - {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, - {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, - {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, - {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, - {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, - {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, - {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, - {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, - {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, - {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, -] -yappi = [ - {file = "yappi-1.3.3.tar.gz", hash = "sha256:855890cd9a90d833dd2df632d648de8ccd0a4c3131f1edc8abd004db0625b5e8"}, -] -zipp = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] diff --git a/libs/skyline-policy-manager/poetry.toml b/libs/skyline-policy-manager/poetry.toml deleted file mode 100644 index ab1033b..0000000 --- a/libs/skyline-policy-manager/poetry.toml +++ /dev/null @@ -1,2 +0,0 @@ -[virtualenvs] -in-project = true diff --git a/libs/skyline-policy-manager/pyproject.toml b/libs/skyline-policy-manager/pyproject.toml deleted file mode 100644 index a74514f..0000000 --- a/libs/skyline-policy-manager/pyproject.toml +++ /dev/null @@ -1,46 +0,0 @@ -[tool.poetry] -name = "skyline-policy-manager" -version = "0.1.0" -description = "" -license = "Apache-2.0" -authors = ["OpenStack "] - -[tool.poetry.dependencies] -python = "^3.8" -pydantic = "1.8.2" -"oslo.policy" = "3.8.2" -Werkzeug = "2.0.1" -click = "7.1.2" -skyline-log = "*" - -[tool.poetry.dev-dependencies] -isort = "5.9.3" -black = "21.9b0" -add-trailing-comma = "2.1.0" -flake8 = "3.9.2" -mypy = "0.910" -pytest = "6.2.5" -pytest-xdist = "2.4.0" -pytest-cov = "2.12.1" -pytest-html = "3.1.1" -mimesis = "4.1.3" -"oslo.log" = "4.8.0" -neutron-lib = "2.15.0" -skyline-log = {path = "../skyline-log", develop = true} - -[tool.pytest.ini_options] -minversion = "6.0" -addopts = "-v -s -p no:cacheprovider -n auto --cov=skyline_policy_manager --cov-append --cov-report=term-missing --cov-report=html" -testpaths = [ - "tests", -] -markers = [ - "ddt(*args: TestData): Mark the test as a data-driven test." -] - -[tool.poetry.scripts] -skyline-policy-manager = "skyline_policy_manager.cmd.manage:main" - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/libs/skyline-policy-manager/skyline_policy_manager/__init__.py b/libs/skyline-policy-manager/skyline_policy_manager/__init__.py deleted file mode 100644 index 0b747ca..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -__version__ = "0.1.0" diff --git a/libs/skyline-policy-manager/skyline_policy_manager/__main__.py b/libs/skyline-policy-manager/skyline_policy_manager/__main__.py deleted file mode 100644 index 94e6df8..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/__main__.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import json -from pprint import pp - -from werkzeug.serving import run_simple -from werkzeug.wrappers import Request, Response - - -@Request.application -def application(request): - body = request.form - rule = json.loads(body.get("rule")) - pp(f"{'=' * 50}") - pp("Rule name:") - pp(rule) - - pp(f"{'-' * 50}") - target = json.loads(body.get("target")) - pp("Rule target:") - pp(target) - - pp(f"{'-' * 50}") - credentials = json.loads(body.get("credentials")) - pp("Rule credentials:") - pp(credentials) - - pp(f"{'=' * 50}") - return Response("True") - - -run_simple("0.0.0.0", 8080, application) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/cmd/__init__.py b/libs/skyline-policy-manager/skyline_policy_manager/cmd/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-policy-manager/skyline_policy_manager/cmd/manage.py b/libs/skyline-policy-manager/skyline_policy_manager/cmd/manage.py deleted file mode 100644 index 7c88a46..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/cmd/manage.py +++ /dev/null @@ -1,291 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import json -from importlib import metadata -from logging import StreamHandler -from pathlib import Path -from typing import Callable, Dict, Iterable, List, Union - -import click -from oslo_policy.policy import DocumentedRuleDefault, RuleDefault # type: ignore -from skyline_log import LOG, setup as log_setup -from skyline_policy_manager import constants -from skyline_policy_manager.policies import get_service_rules -from skyline_policy_manager.policies.base import APIRule, Rule - -DEBUG = False - -OSRules = Iterable[Union[DocumentedRuleDefault, RuleDefault]] - - -def load_list_rules_funcs( - namespace: str, - service_eps: Dict[str, List[str]], -) -> Dict[str, Callable[[], OSRules]]: - eps = set(metadata.entry_points()[namespace]) - supported_eps = set() - for ep_names in service_eps.values(): - supported_eps.update(ep_names) - return {ep.name: ep.load() for ep in eps if ep.name in supported_eps} - - -def load_list_rules_func(namespace: str, service_ep: str) -> Union[None, Callable[[], OSRules]]: - eps = set(metadata.entry_points()[namespace]) - for ep in eps: - if ep.name == service_ep: - return ep.load() - - return None - - -def comparison_rules( - service: str, - rule: Union[Rule, APIRule], - os_rule: Union[Rule, APIRule], -) -> None: - if isinstance(rule, APIRule) and isinstance(os_rule, APIRule): - if rule.scope_types != os_rule.scope_types: - LOG.error( - f'\nService "{service}" rule "{rule.name}" scope_types is {rule.scope_types},\n' - f"which is different from os_rule {os_rule.scope_types}.\n", - ) - if rule.operations != os_rule.operations: - LOG.error( - f'\nService "{service}" rule "{rule.name}" operations is {rule.operations},\n' - f"which is different from os_rule {os_rule.operations}.\n", - ) - elif (isinstance(rule, Rule) and isinstance(os_rule, APIRule)) or ( - isinstance(rule, APIRule) and isinstance(os_rule, Rule) - ): - LOG.warning( - f'\nService "{service}" rule "{rule.name}" is {rule.__class__},\n' - f"which is different from os_rule {os_rule.__class__}.\n", - ) - elif isinstance(rule, Rule) and isinstance(os_rule, Rule): - pass - else: - LOG.error(f'\nService "{service}" rule "{rule.name}" is unknown class type.\n') - - -@click.group(name="skyline-policy-manager", help="Policy manager command line.") -@click.option("--debug", is_flag=True, default=False, help="Output more info.") -def policy_manager(debug: bool) -> None: - global DEBUG - DEBUG = debug - log_setup(StreamHandler(), debug=DEBUG, colorize=True, level="INFO") - - -@click.command(help="Generate sample policy yaml file.") -@click.option("--dir", help='Directory of policy file.(default: "./tmp")', default="./tmp") -def generate_sample(dir: str) -> None: - list_rules_funcs = load_list_rules_funcs(constants.POLICY_NS, constants.SUPPORTED_SERVICE_EPS) - - rule_map = {} - for service, eps in constants.SUPPORTED_SERVICE_EPS.items(): - rules = [] - api_rules = [] - for ep in eps: - ep_rules = list_rules_funcs.get(ep, lambda: [])() - for rule in ep_rules: - if isinstance(rule, DocumentedRuleDefault): - api_rules.append(APIRule.from_oslo(rule)) - elif isinstance(rule, RuleDefault): - rules.append(Rule.from_oslo(rule)) - - rule_map[service] = {"rules": rules, "api_rules": api_rules} - - for service, item in rule_map.items(): - dir_path = Path(dir).joinpath(service) - dir_path.mkdir(mode=0o755, parents=True, exist_ok=True) - file_path = dir_path.joinpath("policy.yaml.sample") - with open(file_path, "w") as f: - f.write(f"{'#' * 20}\n# {service}\n{'#' * 20}\n\n") - for rule in item.get("rules", []): - f.writelines(rule.format_into_yaml()) - for rule in item.get("api_rules", []): - f.writelines(rule.format_into_yaml()) - - LOG.info("Generate sample policy successful") - - -@click.command(help="Generate policy yaml file.") -@click.option("--dir", help='Directory of policy file.(default: "./tmp")', default="./tmp") -@click.option("--desc", help="Description of the generated policy file.", default="") -def generate_conf(dir: str, desc: str) -> None: - for service, rules in get_service_rules().items(): - dir_path = Path(dir).joinpath(service) - dir_path.mkdir(mode=0o755, parents=True, exist_ok=True) - file_path = dir_path.joinpath("policy.yaml") - with open(file_path, "w") as f: - f.write(f"{'#' * 20}\n# {service}\n{'#' * 20}\n") - f.write(f"# {desc}\n\n") - for rule in rules: - rule_yaml = rule.format_into_yaml() - if service in constants.PREFIX_MAPPINGS: - rule_yaml = rule_yaml.replace(constants.PREFIX_MAPPINGS[service], "") - f.writelines(rule_yaml) - - LOG.info("Generate policy successful") - - -@click.command(help="Generate service rule code.") -@click.argument("entry_point") -def generate_rule(entry_point: str) -> None: - ep_rules_func = load_list_rules_func(constants.POLICY_NS, entry_point) - if ep_rules_func is None: - raise Exception( - f"Not found entry point '{entry_point}' in oslo.policy.policies namespace.", - ) - - ep_rules = [item for item in ep_rules_func()] - - rules = [] - api_rules = [] - for rule in ep_rules: - if isinstance(rule, DocumentedRuleDefault): - api_rules.append(APIRule.from_oslo(rule)) - elif isinstance(rule, RuleDefault): - rules.append(Rule.from_oslo(rule)) - - header_str = """ -from . import base - -list_rules = (""" - print(header_str) - - rule_format_str = ( - " base.Rule(\n" - " name={name},\n" - " check_str=({check_str}),\n" - " description={description},\n" - " )," - ) - rule_mappings = {} - for r in rules: - rule_mappings[f"rule:{r.name}"] = r.check_str - print( - rule_format_str.format( - name=json.dumps(r.name), - check_str=json.dumps(r.check_str), - description=json.dumps(r.description), - ), - ) - - apirule_format_str = ( - " base.APIRule(\n" - " name={name},\n" - " check_str=({check_str}),\n" - " description={description},\n" - " scope_types={scope_types},\n" - " operations={operations},\n" - " )," - ) - for r in api_rules: - name = constants.PREFIX_MAPPINGS.get(entry_point, "") + r.name - check_str = r.check_str - tries = 0 - while "rule:" in check_str: - tries += 1 - for k, v in rule_mappings.items(): - if k + " " in check_str or check_str.endswith(k): - check_str = check_str.replace(k, f"({v})") - elif "(" + k + ")" in check_str: - check_str = check_str.replace(k, v) - if tries > 10: - raise Exception(f"Can't replace rule name in {r.name}") - - # Fix for Trove, replace 'project_id:%(tenant)s' with 'project_id:%(project_id)s' - if entry_point == "trove": - check_str = check_str.replace("project_id:%(tenant)s", "project_id:%(project_id)s") - print( - apirule_format_str.format( - name=json.dumps(name), - check_str=json.dumps(check_str), - description=json.dumps(r.description), - scope_types=json.dumps(r.scope_types), - operations=json.dumps(r.operations), - ), - ) - - footer_str = """) - -__all__ = ("list_rules",) -""" - print(footer_str) - - LOG.info("Generate service rule code successful") - - -@click.command(help="Validate all policy rules.") -@click.option("--diff", help="Output policy rule diff info.", is_flag=True, default=False) -def validate(diff: bool) -> None: - list_rules_funcs = load_list_rules_funcs(constants.POLICY_NS, constants.SUPPORTED_SERVICE_EPS) - - os_rule_map = {} - for service, eps in constants.SUPPORTED_SERVICE_EPS.items(): - service_rules = {} - for ep in eps: - ep_rules = list_rules_funcs.get(ep, lambda: [])() - for rule in ep_rules: - if rule.name in service_rules: - LOG.error( - f'Service "{service}" entry point "{ep}" has duplicate rules ' - f'"{rule.name}", please check source code of {service} service.', - ) - if isinstance(rule, DocumentedRuleDefault): - service_rules[rule.name] = APIRule.from_oslo(rule) - elif isinstance(rule, RuleDefault): - service_rules[rule.name] = Rule.from_oslo(rule) - - if not service_rules: - LOG.warning( - f'Service "{service}" does not load any rules, please check whether the ' - f"service package is installed (pip list).", - ) - os_rule_map[service] = service_rules - - for service, rules in get_service_rules().items(): - for r in rules: - os_rule = os_rule_map.get(service, {}).get(r.name) - if os_rule is None: - LOG.warning( - f'Rule "{r.name}" is not found in service "{service}", if it\'s deprecated, ' - f"please remove.", - ) - else: - if diff: - LOG.info( - f'\nService "{service}" rule "{r.name}" compare results:\n' - f'{"OpenStack":10}: {os_rule.check_str}\n{"Custom":10}: {r.check_str}\n', - ) - comparison_rules(service, r, os_rule) - - unmanaged_rules = set(os_rule_map.get(service, {}).keys()) - set( - [r.name for r in rules], - ) - for r in unmanaged_rules: - LOG.error(f"Rule {r} is unmanaged, please add it in '{service}' service") - - LOG.info("Validate policy completed") - - -def main() -> None: - policy_manager.add_command(generate_sample) - policy_manager.add_command(generate_conf) - policy_manager.add_command(generate_rule) - policy_manager.add_command(validate) - policy_manager() diff --git a/libs/skyline-policy-manager/skyline_policy_manager/constants.py b/libs/skyline-policy-manager/skyline_policy_manager/constants.py deleted file mode 100644 index 21b8355..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/constants.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -POLICY_NS = "oslo.policy.policies" - -SUPPORTED_SERVICE_EPS = { - # openstack_service: [, ,] - "cinder": ["cinder"], - "glance": ["glance"], - "heat": ["heat"], - "ironic": ["ironic.api", "ironic_inspector.api"], - "keystone": ["keystone"], - "neutron": ["neutron", "neutron-vpnaas"], - "manila": ["manila"], - "nova": ["nova"], - "octavia": ["octavia"], - "panko": ["panko"], - "placement": ["placement"], - "trove": ["trove"], -} - -PREFIX_MAPPINGS = {"trove": "trove:", "manila": "manila:"} diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/__init__.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/__init__.py deleted file mode 100644 index a6a3117..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from importlib import import_module -from os import path -from pkgutil import iter_modules -from typing import Dict, List, Union - -from .base import APIRule, Rule - -LIST_RULES_FUNC_NAME = "list_rules" - - -def get_service_rules() -> Dict[str, List[Union[Rule, APIRule]]]: - service_rules = {} - current_path = path.dirname(path.abspath(__file__)) - for m in iter_modules(path=[current_path]): - if m.name in ["base"] or m.ispkg: - continue - - module = import_module(f"{__package__}.{m.name}") - service_rules[m.name] = getattr(module, LIST_RULES_FUNC_NAME, []) - - return service_rules - - -__all__ = ("get_service_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/base.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/base.py deleted file mode 100644 index a5c86e7..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/base.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from typing import List - -from oslo_policy import _parser # type: ignore -from oslo_policy.policy import DocumentedRuleDefault, RuleDefault # type: ignore -from skyline_policy_manager.schema import Operation, OperationsSchema, ScopeTypesSchema - - -class Rule: - def __init__( - self, - name: str, - check_str: str, - description: str, - basic_check_str: str = "", - ) -> None: - self.name = name - self.check_str = check_str - self.check = _parser.parse_rule(self.check_str) - self.description = description or "No description" - self.basic_check_str = basic_check_str or self.check_str - self.basic_check = _parser.parse_rule(self.basic_check_str) - - def __str__(self) -> str: - return f'"{self.name}": "{self.check_str}"' - - def __repr__(self) -> str: - return f"{self.__class__.__qualname__}(name='{self.name}', check_str='{self.check_str}')" - - def __eq__(self, other: object) -> bool: - if isinstance(other, Rule) and isinstance(self, Rule): - return (self.name, self.check_str) == (other.name, other.check_str) - return False - - def format_into_yaml(self) -> str: - desc = f"# {self.description}\n" - text = f"{desc}{str(self)}\n\n" - - return text - - @classmethod - def from_oslo(cls, rule: RuleDefault): - description = rule.description or "" - description = description.replace("\n", "\n#") - return cls(name=rule.name, check_str=rule.check_str, description=description) - - -class APIRule(Rule): - def __init__( - self, - name: str, - check_str: str, - description: str, - scope_types: List[str], - operations: List[Operation], - basic_check_str: str = "", - ) -> None: - super().__init__(name, check_str, description, basic_check_str) - - ScopeTypesSchema.parse_obj(scope_types) - self.scope_types = scope_types - - OperationsSchema.parse_obj(operations) - self.operations = operations - - def format_into_yaml(self) -> str: - op_list = [ - f'# {operation.get("method"):8}{operation.get("path")}\n' - for operation in self.operations - ] - op = "".join(op_list) - scope = f"# Intended scope(s): {self.scope_types}\n" - - desc = f"# {self.description}\n" - text = f"{desc}{op}{scope}{str(self)}\n\n" - - return text - - @classmethod - def from_oslo(cls, rule: DocumentedRuleDefault): - description = rule.description or "" - description = description.replace("\n", "\n#") - if isinstance(rule.scope_types, list): - scope_types = [item for item in rule.scope_types] - else: - scope_types = ["project"] - operations = [] - for operation in rule.operations: - method = operation.get("method") - if isinstance(method, list): - for i in method: - operations.append(Operation(method=i.upper(), path=operation.get("path", ""))) - elif isinstance(method, str): - operations.append( - Operation(method=method.upper(), path=operation.get("path", "")), - ) - else: - operations.append(Operation(method="GET", path=operation.get("path", ""))) - return cls( - name=rule.name, - check_str=rule.check_str, - description=description, - scope_types=scope_types, - operations=operations, - ) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/cinder.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/cinder.py deleted file mode 100644 index c2c97ae..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/cinder.py +++ /dev/null @@ -1,1527 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="context_is_admin", - check_str=("role:admin"), - description="Decides what is required for the 'is_admin:True' check to succeed.", - ), - base.Rule( - name="admin_or_owner", - check_str=( - "is_admin:True or (role:admin and is_admin_project:True) or project_id:%(project_id)s" - ), - description="Default rule for most non-Admin APIs.", - ), - base.Rule( - name="admin_api", - check_str=("is_admin:True or (role:admin and is_admin_project:True)"), - description="Default rule for most Admin APIs.", - ), - base.Rule( - name="system_or_domain_or_project_admin", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(domain_id)s) or (role:admin and project_id:%(project_id)s)" - ), - description="Default rule for admins of cloud, domain or a project.", - ), - base.APIRule( - name="volume:attachment_create", - check_str=(""), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create attachment.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/attachments"}], - ), - base.APIRule( - name="volume:attachment_update", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update attachment.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/attachments/{attachment_id}"}], - ), - base.APIRule( - name="volume:attachment_delete", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete attachment.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/attachments/{attachment_id}"}], - ), - base.APIRule( - name="volume:attachment_complete", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Mark a volume attachment process as completed (in-use)", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/attachments/{attachment_id}/action (os-complete)"}, - ], - ), - base.APIRule( - name="volume:multiattach_bootable_volume", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Allow multiattach of bootable volumes.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/attachments"}], - ), - base.APIRule( - name="message:get_all", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List messages.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/messages"}], - ), - base.APIRule( - name="message:get", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show message.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/messages/{message_id}"}], - ), - base.APIRule( - name="message:delete", - check_str=("rule:admin_or_owner"), - basic_check_str=("role:admin"), - description="Delete message.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/messages/{message_id}"}], - ), - base.APIRule( - name="clusters:get_all", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List clusters.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/clusters"}, - {"method": "GET", "path": "/clusters/detail"}, - ], - ), - base.APIRule( - name="clusters:get", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="Show cluster.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/clusters/{cluster_id}"}], - ), - base.APIRule( - name="clusters:update", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Update cluster.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/clusters/{cluster_id}"}], - ), - base.APIRule( - name="workers:cleanup", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Clean up workers.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/workers/cleanup"}], - ), - base.APIRule( - name="volume:get_snapshot_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show snapshot's metadata or one specified metadata with a given key.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/snapshots/{snapshot_id}/metadata"}, - {"method": "GET", "path": "/snapshots/{snapshot_id}/metadata/{key}"}, - ], - ), - base.APIRule( - name="volume:update_snapshot_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update snapshot's metadata or one specified metadata with a given key.", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/snapshots/{snapshot_id}/metadata"}, - {"method": "PUT", "path": "/snapshots/{snapshot_id}/metadata/{key}"}, - ], - ), - base.APIRule( - name="volume:delete_snapshot_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete snapshot's specified metadata with a given key.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/snapshots/{snapshot_id}/metadata/{key}"}], - ), - base.APIRule( - name="volume:get_all_snapshots", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List snapshots.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/snapshots"}, - {"method": "GET", "path": "/snapshots/detail"}, - ], - ), - base.APIRule( - name="volume_extension:extended_snapshot_attributes", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List or show snapshots with extended attributes.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/snapshots/{snapshot_id}"}, - {"method": "GET", "path": "/snapshots/detail"}, - ], - ), - base.APIRule( - name="volume:create_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create snapshot.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/snapshots"}], - ), - base.APIRule( - name="volume:get_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show snapshot.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="volume:update_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update snapshot.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="volume:delete_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete snapshot.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="volume_extension:snapshot_admin_actions:reset_status", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Reset status of a snapshot.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/snapshots/{snapshot_id}/action (os-reset_status)"}, - ], - ), - base.APIRule( - name="snapshot_extension:snapshot_actions:update_snapshot_status", - check_str=(""), - basic_check_str=("@"), - description="Update database fields of snapshot.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/snapshots/{snapshot_id}/action (update_snapshot_status)", - }, - ], - ), - base.APIRule( - name="volume_extension:snapshot_admin_actions:force_delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Force delete a snapshot.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/snapshots/{snapshot_id}/action (os-force_delete)"}, - ], - ), - base.APIRule( - name="snapshot_extension:list_manageable", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List (in detail) of snapshots which are available to manage.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/manageable_snapshots"}, - {"method": "GET", "path": "/manageable_snapshots/detail"}, - ], - ), - base.APIRule( - name="snapshot_extension:snapshot_manage", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Manage an existing snapshot.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/manageable_snapshots"}], - ), - base.APIRule( - name="snapshot_extension:snapshot_unmanage", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Stop managing a snapshot.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/snapshots/{snapshot_id}/action (os-unmanage)"}], - ), - base.APIRule( - name="backup:get_all", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List backups.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/backups"}, - {"method": "GET", "path": "/backups/detail"}, - ], - ), - base.APIRule( - name="backup:backup_project_attribute", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List backups or show backup with project attributes.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/backups/{backup_id}"}, - {"method": "GET", "path": "/backups/detail"}, - ], - ), - base.APIRule( - name="backup:create", - check_str=(""), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create backup.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/backups"}], - ), - base.APIRule( - name="backup:get", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show backup.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/backups/{backup_id}"}], - ), - base.APIRule( - name="backup:update", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update backup.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/backups/{backup_id}"}], - ), - base.APIRule( - name="backup:delete", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete backup.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/backups/{backup_id}"}], - ), - base.APIRule( - name="backup:restore", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Restore backup.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/backups/{backup_id}/restore"}], - ), - base.APIRule( - name="backup:backup-import", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Import backup.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/backups/{backup_id}/import_record"}], - ), - base.APIRule( - name="backup:export-import", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Export backup.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/backups/{backup_id}/export_record"}], - ), - base.APIRule( - name="volume_extension:backup_admin_actions:reset_status", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Reset status of a backup.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/backups/{backup_id}/action (os-reset_status)"}], - ), - base.APIRule( - name="volume_extension:backup_admin_actions:force_delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Force delete a backup.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/backups/{backup_id}/action (os-force_delete)"}], - ), - base.APIRule( - name="group:get_all", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List groups.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/groups"}, - {"method": "GET", "path": "/groups/detail"}, - ], - ), - base.APIRule( - name="group:create", - check_str=(""), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create group.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/groups"}], - ), - base.APIRule( - name="group:get", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show group.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/groups/{group_id}"}], - ), - base.APIRule( - name="group:update", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update group.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/groups/{group_id}"}], - ), - base.APIRule( - name="group:group_project_attribute", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List groups or show group with project attributes.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/groups/{group_id}"}, - {"method": "GET", "path": "/groups/detail"}, - ], - ), - base.APIRule( - name="group:group_types_manage", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Create, update or delete a group type.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/group_types/"}, - {"method": "PUT", "path": "/group_types/{group_type_id}"}, - {"method": "DELETE", "path": "/group_types/{group_type_id}"}, - ], - ), - base.APIRule( - name="group:access_group_types_specs", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="Show group type with type specs attributes.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/group_types/{group_type_id}"}], - ), - base.APIRule( - name="group:group_types_specs", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Create, show, update and delete group type spec.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/group_types/{group_type_id}/group_specs/{g_spec_id}"}, - {"method": "GET", "path": "/group_types/{group_type_id}/group_specs"}, - {"method": "POST", "path": "/group_types/{group_type_id}/group_specs"}, - {"method": "PUT", "path": "/group_types/{group_type_id}/group_specs/{g_spec_id}"}, - {"method": "DELETE", "path": "/group_types/{group_type_id}/group_specs/{g_spec_id}"}, - ], - ), - base.APIRule( - name="group:get_all_group_snapshots", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List group snapshots.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/group_snapshots"}, - {"method": "GET", "path": "/group_snapshots/detail"}, - ], - ), - base.APIRule( - name="group:create_group_snapshot", - check_str=(""), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create group snapshot.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/group_snapshots"}], - ), - base.APIRule( - name="group:get_group_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show group snapshot.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/group_snapshots/{group_snapshot_id}"}], - ), - base.APIRule( - name="group:delete_group_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete group snapshot.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/group_snapshots/{group_snapshot_id}"}], - ), - base.APIRule( - name="group:update_group_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update group snapshot.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/group_snapshots/{group_snapshot_id}"}], - ), - base.APIRule( - name="group:group_snapshot_project_attribute", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List group snapshots or show group snapshot with project attributes.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/group_snapshots/{group_snapshot_id}"}, - {"method": "GET", "path": "/group_snapshots/detail"}, - ], - ), - base.APIRule( - name="group:reset_group_snapshot_status", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Reset status of group snapshot.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/group_snapshots/{g_snapshot_id}/action (reset_status)"}, - ], - ), - base.APIRule( - name="group:delete", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete group.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/groups/{group_id}/action (delete)"}], - ), - base.APIRule( - name="group:reset_status", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Reset status of group.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/groups/{group_id}/action (reset_status)"}], - ), - base.APIRule( - name="group:enable_replication", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Enable replication.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/groups/{group_id}/action (enable_replication)"}], - ), - base.APIRule( - name="group:disable_replication", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Disable replication.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/groups/{group_id}/action (disable_replication)"}, - ], - ), - base.APIRule( - name="group:failover_replication", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Fail over replication.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/groups/{group_id}/action (failover_replication)"}, - ], - ), - base.APIRule( - name="group:list_replication_targets", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="List failover replication.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/groups/{group_id}/action (list_replication_targets)"}, - ], - ), - base.APIRule( - name="volume_extension:qos_specs_manage:get_all", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List qos specs or list all associations.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/qos-specs"}, - {"method": "GET", "path": "/qos-specs/{qos_id}/associations"}, - ], - ), - base.APIRule( - name="volume_extension:qos_specs_manage:get", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="Show qos specs.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/qos-specs/{qos_id}"}], - ), - base.APIRule( - name="volume_extension:qos_specs_manage:create", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Create qos specs.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/qos-specs"}], - ), - base.APIRule( - name="volume_extension:qos_specs_manage:update", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Update qos specs (including updating association).", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/qos-specs/{qos_id}"}, - {"method": "GET", "path": "/qos-specs/{qos_id}/disassociate_all"}, - {"method": "GET", "path": "/qos-specs/{qos_id}/associate"}, - {"method": "GET", "path": "/qos-specs/{qos_id}/disassociate"}, - ], - ), - base.APIRule( - name="volume_extension:qos_specs_manage:delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="delete qos specs or unset one specified qos key.", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/qos-specs/{qos_id}"}, - {"method": "PUT", "path": "/qos-specs/{qos_id}/delete_keys"}, - ], - ), - base.APIRule( - name="volume_extension:quota_classes", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Show or update project quota class.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/os-quota-class-sets/{project_id}"}, - {"method": "PUT", "path": "/os-quota-class-sets/{project_id}"}, - ], - ), - base.APIRule( - name="volume_extension:quotas:show", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show project quota (including usage and default).", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/os-quota-sets/{project_id}"}, - {"method": "GET", "path": "/os-quota-sets/{project_id}/default"}, - {"method": "GET", "path": "/os-quota-sets/{project_id}?usage=True"}, - ], - ), - base.APIRule( - name="volume_extension:quotas:update", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Update project quota.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/os-quota-sets/{project_id}"}], - ), - base.APIRule( - name="volume_extension:quotas:delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Delete project quota.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/os-quota-sets/{project_id}"}], - ), - base.APIRule( - name="volume_extension:capabilities", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="Show backend capabilities.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/capabilities/{host_name}"}], - ), - base.APIRule( - name="volume_extension:services:index", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List all services.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/os-services"}], - ), - base.APIRule( - name="volume_extension:services:update", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Update service, including failover_host, thaw, freeze, disable, enable, set-log and get-log actions.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/os-services/{action}"}], - ), - base.APIRule( - name="volume:freeze_host", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Freeze a backend host.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/os-services/freeze"}], - ), - base.APIRule( - name="volume:thaw_host", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Thaw a backend host.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/os-services/thaw"}], - ), - base.APIRule( - name="volume:failover_host", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Failover a backend host.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/os-services/failover_host"}], - ), - base.APIRule( - name="scheduler_extension:scheduler_stats:get_pools", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List all backend pools.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/scheduler-stats/get_pools"}], - ), - base.APIRule( - name="volume_extension:hosts", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="List, update or show hosts for a project.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/os-hosts"}, - {"method": "PUT", "path": "/os-hosts/{host_name}"}, - {"method": "GET", "path": "/os-hosts/{host_id}"}, - ], - ), - base.APIRule( - name="limits_extension:used_limits", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show limits with used limit attributes.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/limits"}], - ), - base.APIRule( - name="volume_extension:list_manageable", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List (in detail) of volumes which are available to manage.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/manageable_volumes"}, - {"method": "GET", "path": "/manageable_volumes/detail"}, - ], - ), - base.APIRule( - name="volume_extension:volume_manage", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Manage existing volumes.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/manageable_volumes"}], - ), - base.APIRule( - name="volume_extension:volume_unmanage", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Stop managing a volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-unmanage)"}], - ), - base.APIRule( - name="volume_extension:types_manage", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Create, update and delete volume type.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/types"}, - {"method": "PUT", "path": "/types"}, - {"method": "DELETE", "path": "/types"}, - ], - ), - base.APIRule( - name="volume_extension:type_get", - check_str=(""), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get one specific volume type.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/types/{type_id}"}], - ), - base.APIRule( - name="volume_extension:type_get_all", - check_str=(""), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List volume types.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/types/"}], - ), - base.APIRule( - name="volume_extension:volume_type_encryption", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Base policy for all volume type encryption type operations. This can be used to set the policies for a volume type's encryption type create, show, update, and delete actions in one place, or any of those may be set individually using the following policy targets for finer grained control.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/types/{type_id}/encryption"}, - {"method": "PUT", "path": "/types/{type_id}/encryption/{encryption_id}"}, - {"method": "GET", "path": "/types/{type_id}/encryption"}, - {"method": "GET", "path": "/types/{type_id}/encryption/{key}"}, - {"method": "DELETE", "path": "/types/{type_id}/encryption/{encryption_id}"}, - ], - ), - base.APIRule( - name="volume_extension:volume_type_encryption:create", - check_str=("rule:volume_extension:volume_type_encryption"), - basic_check_str=("role:admin"), - description="Create volume type encryption.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/types/{type_id}/encryption"}], - ), - base.APIRule( - name="volume_extension:volume_type_encryption:get", - check_str=("rule:volume_extension:volume_type_encryption"), - basic_check_str=("role:admin or role:reader"), - description="Show a volume type's encryption type, show an encryption specs item.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/types/{type_id}/encryption"}, - {"method": "GET", "path": "/types/{type_id}/encryption/{key}"}, - ], - ), - base.APIRule( - name="volume_extension:volume_type_encryption:update", - check_str=("rule:volume_extension:volume_type_encryption"), - basic_check_str=("role:admin"), - description="Update volume type encryption.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/types/{type_id}/encryption/{encryption_id}"}], - ), - base.APIRule( - name="volume_extension:volume_type_encryption:delete", - check_str=("rule:volume_extension:volume_type_encryption"), - basic_check_str=("role:admin"), - description="Delete volume type encryption.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/types/{type_id}/encryption/{encryption_id}"}], - ), - base.APIRule( - name="volume_extension:access_types_extra_specs", - check_str=("rule:admin_api"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List or show volume type with access type extra specs attribute.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/types/{type_id}"}, - {"method": "GET", "path": "/types"}, - ], - ), - base.APIRule( - name="volume_extension:access_types_qos_specs_id", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List or show volume type with access type qos specs id attribute.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/types/{type_id}"}, - {"method": "GET", "path": "/types"}, - ], - ), - base.APIRule( - name="volume_extension:volume_type_access", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Volume type access related APIs.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/types"}, - {"method": "GET", "path": "/types/detail"}, - {"method": "GET", "path": "/types/{type_id}"}, - {"method": "POST", "path": "/types"}, - ], - ), - base.APIRule( - name="volume_extension:volume_type_access:addProjectAccess", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Add volume type access for project.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/types/{type_id}/action (addProjectAccess)"}], - ), - base.APIRule( - name="volume_extension:volume_type_access:removeProjectAccess", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Remove volume type access for project.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/types/{type_id}/action (removeProjectAccess)"}], - ), - base.APIRule( - name="volume:extend", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Extend a volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-extend)"}], - ), - base.APIRule( - name="volume:extend_attached_volume", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Extend a attached volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-extend)"}], - ), - base.APIRule( - name="volume:revert_to_snapshot", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Revert a volume to a snapshot.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (revert)"}], - ), - base.APIRule( - name="volume_extension:volume_admin_actions:reset_status", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Reset status of a volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-reset_status)"}], - ), - base.APIRule( - name="volume:retype", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Retype a volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-retype)"}], - ), - base.APIRule( - name="volume:update_readonly_flag", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a volume's readonly flag.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-update_readonly_flag)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_admin_actions:force_delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Force delete a volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-force_delete)"}], - ), - base.APIRule( - name="volume_extension:volume_actions:upload_public", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Upload a volume to image with public visibility.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-volume_upload_image)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_actions:upload_image", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Upload a volume to image.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-volume_upload_image)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_admin_actions:force_detach", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Force detach a volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-force_detach)"}], - ), - base.APIRule( - name="volume_extension:volume_admin_actions:migrate_volume", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="migrate a volume to a specified host.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-migrate_volume)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_admin_actions:migrate_volume_completion", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Complete a volume migration.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/volumes/{volume_id}/action (os-migrate_volume_completion)", - }, - ], - ), - base.APIRule( - name="volume_extension:volume_actions:initialize_connection", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Initialize volume attachment.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-initialize_connection)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_actions:terminate_connection", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Terminate volume attachment.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-terminate_connection)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_actions:roll_detaching", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Roll back volume status to 'in-use'.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-roll_detaching)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_actions:reserve", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Mark volume as reserved.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-reserve)"}], - ), - base.APIRule( - name="volume_extension:volume_actions:unreserve", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Unmark volume as reserved.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-unreserve)"}], - ), - base.APIRule( - name="volume_extension:volume_actions:begin_detaching", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Begin detach volumes.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-begin_detaching)"}, - ], - ), - base.APIRule( - name="volume_extension:volume_actions:attach", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add attachment metadata.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-attach)"}], - ), - base.APIRule( - name="volume_extension:volume_actions:detach", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Clear attachment metadata.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/action (os-detach)"}], - ), - base.APIRule( - name="volume:get_all_transfers", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List volume transfer.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/os-volume-transfer"}, - {"method": "GET", "path": "/os-volume-transfer/detail"}, - {"method": "GET", "path": "/volume_transfers"}, - {"method": "GET", "path": "/volume-transfers/detail"}, - ], - ), - base.APIRule( - name="volume:create_transfer", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a volume transfer.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/os-volume-transfer"}, - {"method": "POST", "path": "/volume_transfers"}, - ], - ), - base.APIRule( - name="volume:get_transfer", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show one specified volume transfer.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/os-volume-transfer/{transfer_id}"}, - {"method": "GET", "path": "/volume-transfers/{transfer_id}"}, - ], - ), - base.APIRule( - name="volume:accept_transfer", - check_str=(""), - basic_check_str=("@"), - description="Accept a volume transfer.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/os-volume-transfer/{transfer_id}/accept"}, - {"method": "POST", "path": "/volume-transfers/{transfer_id}/accept"}, - ], - ), - base.APIRule( - name="volume:delete_transfer", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete volume transfer.", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/os-volume-transfer/{transfer_id}"}, - {"method": "DELETE", "path": "/volume-transfers/{transfer_id}"}, - ], - ), - base.APIRule( - name="volume:get_volume_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show volume's metadata or one specified metadata with a given key.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes/{volume_id}/metadata"}, - {"method": "GET", "path": "/volumes/{volume_id}/metadata/{key}"}, - ], - ), - base.APIRule( - name="volume:create_volume_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create volume metadata.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes/{volume_id}/metadata"}], - ), - base.APIRule( - name="volume:update_volume_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update volume's metadata or one specified metadata with a given key.", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/volumes/{volume_id}/metadata"}, - {"method": "PUT", "path": "/volumes/{volume_id}/metadata/{key}"}, - ], - ), - base.APIRule( - name="volume:delete_volume_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete volume's specified metadata with a given key.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/volumes/{volume_id}/metadata/{key}"}], - ), - base.APIRule( - name="volume_extension:volume_image_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Volume's image metadata related operation, create, delete, show and list.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes/detail"}, - {"method": "GET", "path": "/volumes/{volume_id}"}, - {"method": "POST", "path": "/volumes/{volume_id}/action (os-set_image_metadata)"}, - {"method": "POST", "path": "/volumes/{volume_id}/action (os-unset_image_metadata)"}, - ], - ), - base.APIRule( - name="volume:update_volume_admin_metadata", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Update volume admin metadata. It's used in `attach` and `os-update_readonly_flag` APIs", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/volumes/{volume_id}/action (os-update_readonly_flag)"}, - {"method": "POST", "path": "/volumes/{volume_id}/action (os-attach)"}, - ], - ), - base.APIRule( - name="volume_extension:types_extra_specs:index", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List type extra specs.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/types/{type_id}/extra_specs"}], - ), - base.APIRule( - name="volume_extension:types_extra_specs:create", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Create type extra specs.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/types/{type_id}/extra_specs"}], - ), - base.APIRule( - name="volume_extension:types_extra_specs:show", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="Show one specified type extra specs.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/types/{type_id}/extra_specs/{extra_spec_key}"}], - ), - base.APIRule( - name="volume_extension:types_extra_specs:update", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Update type extra specs.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/types/{type_id}/extra_specs/{extra_spec_key}"}], - ), - base.APIRule( - name="volume_extension:types_extra_specs:delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin"), - description="Delete type extra specs.", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/types/{type_id}/extra_specs/{extra_spec_key}"}, - ], - ), - base.APIRule( - name="volume:create", - check_str=(""), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes"}], - ), - base.APIRule( - name="volume:create_from_image", - check_str=(""), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create volume from image.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes"}], - ), - base.APIRule( - name="volume:get", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show volume.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/volumes/{volume_id}"}], - ), - base.APIRule( - name="volume:get_all", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List volumes or get summary of volumes.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes"}, - {"method": "GET", "path": "/volumes/detail"}, - {"method": "GET", "path": "/volumes/summary"}, - ], - ), - base.APIRule( - name="volume:update", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update volume or update a volume's bootable status.", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/volumes"}, - {"method": "POST", "path": "/volumes/{volume_id}/action (os-set_bootable)"}, - ], - ), - base.APIRule( - name="volume:delete", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete volume.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/volumes/{volume_id}"}], - ), - base.APIRule( - name="volume:force_delete", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Force Delete a volume.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/volumes/{volume_id}"}], - ), - base.APIRule( - name="volume_extension:volume_host_attribute", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader"), - description="List or show volume with host attribute.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes/{volume_id}"}, - {"method": "GET", "path": "/volumes/detail"}, - ], - ), - base.APIRule( - name="volume_extension:volume_tenant_attribute", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List or show volume with tenant attribute.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes/{volume_id}"}, - {"method": "GET", "path": "/volumes/detail"}, - ], - ), - base.APIRule( - name="volume_extension:volume_mig_status_attribute", - check_str=("rule:admin_api"), - basic_check_str=("role:admin or role:reader or role:admin and project_id:%(project_id)s"), - description="List or show volume with migration status attribute.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes/{volume_id}"}, - {"method": "GET", "path": "/volumes/detail"}, - ], - ), - base.APIRule( - name="volume_extension:volume_encryption_metadata", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show volume's encryption metadata.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/volumes/{volume_id}/encryption"}, - {"method": "GET", "path": "/volumes/{volume_id}/encryption/{encryption_key}"}, - ], - ), - base.APIRule( - name="volume:multiattach", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create multiattach capable volume.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/volumes"}], - ), - base.APIRule( - name="volume_extension:default_set_or_update", - check_str=("rule:system_or_domain_or_project_admin"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Set or update default volume type.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/default-types"}], - ), - base.APIRule( - name="volume_extension:default_get", - check_str=("rule:system_or_domain_or_project_admin"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Get default types.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/default-types/{project-id}"}], - ), - base.APIRule( - name="volume_extension:default_get_all", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Get all default types. WARNING: Changing this might open up too much information regarding cloud deployment.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/default-types/"}], - ), - base.APIRule( - name="volume_extension:default_unset", - check_str=("rule:system_or_domain_or_project_admin"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Unset default type.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/default-types/{project-id}"}], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/glance.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/glance.py deleted file mode 100644 index ca2addd..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/glance.py +++ /dev/null @@ -1,372 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="default", - check_str=(""), - description="Defines the default rule used for policies that historically had an empty policy in the supplied policy.json file.", - ), - base.Rule( - name="context_is_admin", - check_str=("role:admin"), - description="Defines the rule for the is_admin:True check.", - ), - base.Rule( - name="manage_image_cache", - check_str=("role:admin"), - description="Manage image cache", - ), - base.Rule( - name="metadef_default", - check_str=(""), - description="No description", - ), - base.Rule( - name="metadef_admin", - check_str=("role:admin"), - description="No description", - ), - base.Rule( - name="get_metadef_namespace", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="get_metadef_namespaces", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="modify_metadef_namespace", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="add_metadef_namespace", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="delete_metadef_namespace", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="get_metadef_object", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="get_metadef_objects", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="modify_metadef_object", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="add_metadef_object", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="delete_metadef_object", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="list_metadef_resource_types", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="get_metadef_resource_type", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="add_metadef_resource_type_association", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="remove_metadef_resource_type_association", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="get_metadef_property", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="get_metadef_properties", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="modify_metadef_property", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="add_metadef_property", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="remove_metadef_property", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="get_metadef_tag", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="get_metadef_tags", - check_str=("rule:metadef_default"), - description="No description", - ), - base.Rule( - name="modify_metadef_tag", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="add_metadef_tag", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="add_metadef_tags", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="delete_metadef_tag", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.Rule( - name="delete_metadef_tags", - check_str=("rule:metadef_admin"), - description="No description", - ), - base.APIRule( - name="add_image", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Create new image", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v2/images"}], - ), - base.APIRule( - name="delete_image", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Deletes the image", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="get_image", - check_str=( - 'role:admin or (role:reader and (project_id:%(project_id)s or project_id:%(member_id)s or "community":%(visibility)s or "public":%(visibility)s))' - ), - basic_check_str=("role:admin or role:reader or role:admin or role:member or role:reader"), - description="Get specified image", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="get_images", - check_str=("role:admin or (role:reader and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:reader or role:admin or role:member or role:reader"), - description="Get all available images", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/images"}], - ), - base.APIRule( - name="modify_image", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Updates given image", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="publicize_image", - check_str=("role:admin"), - basic_check_str=("role:admin"), - description="Publicize given image", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="communitize_image", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("!"), - description="Communitize given image", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="download_image", - check_str=( - 'role:admin or (role:member and (project_id:%(project_id)s or project_id:%(member_id)s or "community":%(visibility)s or "public":%(visibility)s))' - ), - basic_check_str=("role:admin or role:admin or role:member"), - description="Downloads given image", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/images/{image_id}/file"}], - ), - base.APIRule( - name="upload_image", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Uploads data to specified image", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/v2/images/{image_id}/file"}], - ), - base.APIRule( - name="delete_image_location", - check_str=("role:admin"), - basic_check_str=("role:admin"), - description="Deletes the location of given image", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="get_image_location", - check_str=("role:admin or (role:reader and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:reader or role:admin or role:member or role:reader"), - description="Reads the location of the image", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="set_image_location", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin"), - description="Sets location URI to given image", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/v2/images/{image_id}"}], - ), - base.APIRule( - name="add_member", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Create image member", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v2/images/{image_id}/members"}], - ), - base.APIRule( - name="delete_member", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Delete image member", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/v2/images/{image_id}/members/{member_id}"}], - ), - base.APIRule( - name="get_member", - check_str=("role:admin or (role:reader and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:reader or role:admin or role:member or role:reader"), - description="Show image member details", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/images/{image_id}/members/{member_id}"}], - ), - base.APIRule( - name="get_members", - check_str=("role:admin or (role:reader and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:reader or role:admin or role:member or role:reader"), - description="List image members", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/images/{image_id}/members"}], - ), - base.APIRule( - name="modify_member", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Update image member", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/v2/images/{image_id}/members/{member_id}"}], - ), - base.APIRule( - name="deactivate", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Deactivate image", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v2/images/{image_id}/actions/deactivate"}], - ), - base.APIRule( - name="reactivate", - check_str=("role:admin or (role:member and project_id:%(project_id)s)"), - basic_check_str=("role:admin or role:admin or role:member"), - description="Reactivate image", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v2/images/{image_id}/actions/reactivate"}], - ), - base.APIRule( - name="copy_image", - check_str=("role:admin"), - basic_check_str=("@"), - description="Copy existing image to other stores", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v2/images/{image_id}/import"}], - ), - base.APIRule( - name="get_task", - check_str=("rule:default"), - basic_check_str=("!"), - description="Get an image task.\n#\n#This granular policy controls access to tasks, both from the tasks API as well\n#as internal locations in Glance that use tasks (like import). Practically this\n#cannot be more restrictive than the policy that controls import or things will\n#break, and changing it from the default is almost certainly not what you want.\n#Access to the external tasks API should be restricted as desired by the\n#tasks_api_access policy. This may change in the future.\n#", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/tasks/{task_id}"}], - ), - base.APIRule( - name="get_tasks", - check_str=("rule:default"), - basic_check_str=("!"), - description="List tasks for all images.\n#\n#This granular policy controls access to tasks, both from the tasks API as well\n#as internal locations in Glance that use tasks (like import). Practically this\n#cannot be more restrictive than the policy that controls import or things will\n#break, and changing it from the default is almost certainly not what you want.\n#Access to the external tasks API should be restricted as desired by the\n#tasks_api_access policy. This may change in the future.\n#", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/tasks"}], - ), - base.APIRule( - name="add_task", - check_str=("rule:default"), - basic_check_str=("!"), - description="List tasks for all images.\n#\n#This granular policy controls access to tasks, both from the tasks API as well\n#as internal locations in Glance that use tasks (like import). Practically this\n#cannot be more restrictive than the policy that controls import or things will\n#break, and changing it from the default is almost certainly not what you want.\n#Access to the external tasks API should be restricted as desired by the\n#tasks_api_access policy. This may change in the future.\n#", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v2/tasks"}], - ), - base.APIRule( - name="modify_task", - check_str=("rule:default"), - basic_check_str=("!"), - description="This policy is not used.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/v2/tasks/{task_id}"}], - ), - base.APIRule( - name="tasks_api_access", - check_str=("role:admin"), - basic_check_str=("!"), - description="\n#This is a generic blanket policy for protecting all task APIs. It is not\n#granular and will not allow you to separate writable and readable task\n#operations into different roles.\n#", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v2/tasks/{task_id}"}, - {"method": "GET", "path": "/v2/tasks"}, - {"method": "POST", "path": "/v2/tasks"}, - {"method": "DELETE", "path": "/v2/tasks/{task_id}"}, - ], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/heat.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/heat.py deleted file mode 100644 index ff1711e..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/heat.py +++ /dev/null @@ -1,1014 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="context_is_admin", - check_str=("(role:admin and is_admin_project:True) OR (role:admin and system_scope:all)"), - description="Decides what is required for the 'is_admin:True' check to succeed.", - ), - base.Rule( - name="project_admin", - check_str=("role:admin"), - description="Default rule for project admin.", - ), - base.Rule( - name="deny_stack_user", - check_str=("not role:heat_stack_user"), - description="Default rule for deny stack user.", - ), - base.Rule( - name="deny_everybody", - check_str=("!"), - description="Default rule for deny everybody.", - ), - base.Rule( - name="allow_everybody", - check_str=(""), - description="Default rule for allow everybody.", - ), - base.Rule( - name="cloudformation:ListStacks", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:CreateStack", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:DescribeStacks", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:DeleteStack", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:UpdateStack", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:CancelUpdateStack", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:DescribeStackEvents", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:ValidateTemplate", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:GetTemplate", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:EstimateTemplateCost", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:DescribeStackResource", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or (role:heat_stack_user and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:DescribeStackResources", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="cloudformation:ListStackResources", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="No description", - ), - base.Rule( - name="resource_types:OS::Nova::Flavor", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Cinder::EncryptedVolumeType", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Cinder::VolumeType", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Cinder::Quota", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::Quota", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Nova::Quota", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Octavia::Quota", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Manila::ShareType", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::ProviderNet", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::QoSPolicy", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::QoSBandwidthLimitRule", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::QoSDscpMarkingRule", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::QoSMinimumBandwidthRule", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Neutron::Segment", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Nova::HostAggregate", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Cinder::QoSSpecs", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Cinder::QoSAssociation", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Keystone::*", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Blazar::Host", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Octavia::Flavor", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="resource_types:OS::Octavia::FlavorProfile", - check_str=("rule:project_admin"), - description="No description", - ), - base.Rule( - name="service:index", - check_str=("role:reader and system_scope:all"), - description="No description", - ), - base.APIRule( - name="actions:action", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Performs non-lifecycle operations on the stack (Snapshot, Resume, Cancel update, or check stack resources). This is the default for all actions but can be overridden by more specific policies for individual actions.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="actions:snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create stack snapshot", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="actions:suspend", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Suspend a stack.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="actions:resume", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Resume a suspended stack.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="actions:check", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Check stack resources.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="actions:cancel_update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Cancel stack operation and roll back.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="actions:cancel_without_rollback", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Cancel stack operation without rolling back.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions"}, - ], - ), - base.APIRule( - name="build_info:build_info", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="Show build information.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/build_info"}], - ), - base.APIRule( - name="events:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List events.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/events"}, - ], - ), - base.APIRule( - name="events:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show event.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/events/{event_id}", - }, - ], - ), - base.APIRule( - name="resource:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List resources.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources"}, - ], - ), - base.APIRule( - name="resource:metadata", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or (role:heat_stack_user and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s or role:heat_stack_user" - ), - description="Show resource metadata.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/metadata", - }, - ], - ), - base.APIRule( - name="resource:signal", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or (role:heat_stack_user and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:heat_stack_user" - ), - description="Signal resource.", - scope_types=["system", "project"], - operations=[ - { - "method": "POST", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/signal", - }, - ], - ), - base.APIRule( - name="resource:mark_unhealthy", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Mark resource as unhealthy.", - scope_types=["system", "project"], - operations=[ - { - "method": "PATCH", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id}", - }, - ], - ), - base.APIRule( - name="resource:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show resource.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}", - }, - ], - ), - base.APIRule( - name="software_configs:global_index", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List configs globally.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/software_configs"}], - ), - base.APIRule( - name="software_configs:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List configs.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/software_configs"}], - ), - base.APIRule( - name="software_configs:create", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create config.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v1/{tenant_id}/software_configs"}], - ), - base.APIRule( - name="software_configs:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show config details.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/software_configs/{config_id}"}], - ), - base.APIRule( - name="software_configs:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete config.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/v1/{tenant_id}/software_configs/{config_id}"}], - ), - base.APIRule( - name="software_deployments:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List deployments.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/software_deployments"}], - ), - base.APIRule( - name="software_deployments:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create deployment.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v1/{tenant_id}/software_deployments"}], - ), - base.APIRule( - name="software_deployments:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show deployment details.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/software_deployments/{deployment_id}"}, - ], - ), - base.APIRule( - name="software_deployments:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update deployment.", - scope_types=["system", "project"], - operations=[ - {"method": "PUT", "path": "/v1/{tenant_id}/software_deployments/{deployment_id}"}, - ], - ), - base.APIRule( - name="software_deployments:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete deployment.", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/v1/{tenant_id}/software_deployments/{deployment_id}"}, - ], - ), - base.APIRule( - name="software_deployments:metadata", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or (role:heat_stack_user and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s or role:heat_stack_user" - ), - description="Show server configuration metadata.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/software_deployments/metadata/{server_id}", - }, - ], - ), - base.APIRule( - name="stacks:abandon", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Abandon stack.", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/abandon", - }, - ], - ), - base.APIRule( - name="stacks:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create stack.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v1/{tenant_id}/stacks"}], - ), - base.APIRule( - name="stacks:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete stack.", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}"}, - ], - ), - base.APIRule( - name="stacks:detail", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List stacks in detail.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/stacks"}], - ), - base.APIRule( - name="stacks:export", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Export stack.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/export"}, - ], - ), - base.APIRule( - name="stacks:generate_template", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Generate stack template.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/template"}, - ], - ), - base.APIRule( - name="stacks:global_index", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List stacks globally.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/stacks"}], - ), - base.APIRule( - name="stacks:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List stacks.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/stacks"}], - ), - base.APIRule( - name="stacks:list_resource_types", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="List resource types.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/resource_types"}], - ), - base.APIRule( - name="stacks:list_template_versions", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="List template versions.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/template_versions"}], - ), - base.APIRule( - name="stacks:list_template_functions", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="List template functions.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/template_versions/{template_version}/functions", - }, - ], - ), - base.APIRule( - name="stacks:lookup", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or (role:heat_stack_user and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s or role:heat_stack_user" - ), - description="Find stack.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_identity}"}], - ), - base.APIRule( - name="stacks:preview", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Preview stack.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v1/{tenant_id}/stacks/preview"}], - ), - base.APIRule( - name="stacks:resource_schema", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="Show resource type schema.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/resource_types/{type_name}"}], - ), - base.APIRule( - name="stacks:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show stack.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_identity}"}], - ), - base.APIRule( - name="stacks:template", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get stack template.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/template"}, - ], - ), - base.APIRule( - name="stacks:environment", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get stack environment.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/environment", - }, - ], - ), - base.APIRule( - name="stacks:files", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get stack files.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/files"}, - ], - ), - base.APIRule( - name="stacks:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update stack.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}"}], - ), - base.APIRule( - name="stacks:update_patch", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update stack (PATCH).", - scope_types=["system", "project"], - operations=[ - {"method": "PATCH", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}"}, - ], - ), - base.APIRule( - name="stacks:update_no_change", - check_str=("rule:stacks:update_patch"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update stack (PATCH) with no changes.", - scope_types=["system", "project"], - operations=[ - {"method": "PATCH", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}"}, - ], - ), - base.APIRule( - name="stacks:preview_update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Preview update stack.", - scope_types=["system", "project"], - operations=[ - {"method": "PUT", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/preview"}, - ], - ), - base.APIRule( - name="stacks:preview_update_patch", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Preview update stack (PATCH).", - scope_types=["system", "project"], - operations=[ - {"method": "PATCH", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/preview"}, - ], - ), - base.APIRule( - name="stacks:validate_template", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Validate template.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v1/{tenant_id}/validate"}], - ), - base.APIRule( - name="stacks:snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Snapshot Stack.", - scope_types=["system", "project"], - operations=[ - { - "method": "POST", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots", - }, - ], - ), - base.APIRule( - name="stacks:show_snapshot", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show snapshot.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}", - }, - ], - ), - base.APIRule( - name="stacks:delete_snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete snapshot.", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}", - }, - ], - ), - base.APIRule( - name="stacks:list_snapshots", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List snapshots.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots"}, - ], - ), - base.APIRule( - name="stacks:restore_snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Restore snapshot.", - scope_types=["system", "project"], - operations=[ - { - "method": "POST", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}/restore", - }, - ], - ), - base.APIRule( - name="stacks:list_outputs", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List outputs.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs"}, - ], - ), - base.APIRule( - name="stacks:show_output", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show outputs.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs/{output_key}", - }, - ], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/ironic.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/ironic.py deleted file mode 100644 index 100fa6f..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/ironic.py +++ /dev/null @@ -1,1034 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="admin_api", - check_str=("role:admin or role:administrator"), - description="Legacy rule for cloud admin access", - ), - base.Rule( - name="public_api", - check_str=("is_public_api:True"), - description="Internal flag for public API routes", - ), - base.Rule( - name="show_password", - check_str=("!"), - description="Show or mask secrets within node driver information in API responses", - ), - base.Rule( - name="show_instance_secrets", - check_str=("!"), - description="Show or mask secrets within instance information in API responses", - ), - base.Rule( - name="is_member", - check_str=( - "(project_domain_id:default or project_domain_id:None) and (project_name:demo or project_name:baremetal)" - ), - description="May be used to restrict access to specific projects", - ), - base.Rule( - name="is_observer", - check_str=("rule:is_member and (role:observer or role:baremetal_observer)"), - description="Read-only API access", - ), - base.Rule( - name="is_admin", - check_str=("rule:admin_api or (rule:is_member and role:baremetal_admin)"), - description="Full read/write API access", - ), - base.Rule( - name="is_node_owner", - check_str=("project_id:%(node.owner)s"), - description="Owner of node", - ), - base.Rule( - name="is_node_lessee", - check_str=("project_id:%(node.lessee)s"), - description="Lessee of node", - ), - base.Rule( - name="is_allocation_owner", - check_str=("project_id:%(allocation.owner)s"), - description="Owner of allocation", - ), - base.APIRule( - name="baremetal:node:create", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create Node records", - scope_types=["system"], - operations=[{"method": "POST", "path": "/nodes"}], - ), - base.APIRule( - name="baremetal:node:list", - check_str=("role:reader"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Node records, filtered by an explicit owner or the client project_id", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/nodes"}, - {"method": "GET", "path": "/nodes/detail"}, - ], - ), - base.APIRule( - name="baremetal:node:list_all", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Node records", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/nodes"}, - {"method": "GET", "path": "/nodes/detail"}, - ], - ), - base.APIRule( - name="baremetal:node:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve a single Node record", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:get:filter_threshold", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Filter to allow operators to govern the threshold where information should be filtered. Non-authorized users will be subjected to additional API policy checks for API content response bodies.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:get:last_error", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Governs if the node last_error field is masked from APIclients with insufficent privileges.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:get:reservation", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Governs if the node reservation field is masked from APIclients with insufficent privileges.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:get:driver_internal_info", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Governs if the node driver_internal_info field is masked from API clients with insufficent privileges.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:get:driver_info", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Governs if the driver_info field is masked from APIclients with insufficent privileges.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:driver_info", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node driver_info field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:properties", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node properties field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:chassis_uuid", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Governs if node chassis_uuid field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:instance_uuid", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node instance_uuid field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:lessee", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node lessee field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:owner", - check_str=("role:member and system_scope:all"), - basic_check_str=("role:admin"), - description="Governs if node owner field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:driver_interfaces", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node driver and driver interfaces field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:network_data", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node driver_info field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:conductor_group", - check_str=("role:member and system_scope:all"), - basic_check_str=("role:admin"), - description="Governs if node conductor_group field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:name", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node name field can be updated via the API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update:retired", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Governs if node retired and retired reason can be updated by API clients.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update", - check_str=( - "(role:member and system_scope:all) or (role:member and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin"), - description="Generalized update of node records", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update_extra", - check_str=( - "(role:member and system_scope:all) or (role:member and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin"), - description="Update Node extra field", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update_instance_info", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Update Node instance_info field", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:update_owner_provisioned", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update Node owner even when Node is provisioned", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete Node records", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:node:validate", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Request active validation of Nodes", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}/validate"}], - ), - base.APIRule( - name="baremetal:node:set_maintenance", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Set maintenance flag, taking a Node out of service", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/maintenance"}], - ), - base.APIRule( - name="baremetal:node:clear_maintenance", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Clear maintenance flag, placing the Node into service again", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/nodes/{node_ident}/maintenance"}], - ), - base.APIRule( - name="baremetal:node:get_boot_device", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Node boot device metadata", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/nodes/{node_ident}/management/boot_device"}, - {"method": "GET", "path": "/nodes/{node_ident}/management/boot_device/supported"}, - ], - ), - base.APIRule( - name="baremetal:node:set_boot_device", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Change Node boot device", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/management/boot_device"}], - ), - base.APIRule( - name="baremetal:node:get_indicator_state", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Node indicators and their states", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/nodes/{node_ident}/management/indicators/{component}/{indicator}", - }, - {"method": "GET", "path": "/nodes/{node_ident}/management/indicators"}, - ], - ), - base.APIRule( - name="baremetal:node:set_indicator_state", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Change Node indicator state", - scope_types=["system", "project"], - operations=[ - { - "method": "PUT", - "path": "/nodes/{node_ident}/management/indicators/{component}/{indicator}", - }, - ], - ), - base.APIRule( - name="baremetal:node:inject_nmi", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Inject NMI for a node", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/management/inject_nmi"}], - ), - base.APIRule( - name="baremetal:node:get_states", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="View Node power and provision state", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}/states"}], - ), - base.APIRule( - name="baremetal:node:set_power_state", - check_str=( - "(role:member and system_scope:all) or (role:member and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin"), - description="Change Node power status", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/states/power"}], - ), - base.APIRule( - name="baremetal:node:set_provision_state", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Change Node provision status", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/states/provision"}], - ), - base.APIRule( - name="baremetal:node:set_raid_state", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Change Node RAID status", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/states/raid"}], - ), - base.APIRule( - name="baremetal:node:get_console", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Get Node console connection information", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}/states/console"}], - ), - base.APIRule( - name="baremetal:node:set_console_state", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Change Node console status", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/nodes/{node_ident}/states/console"}], - ), - base.APIRule( - name="baremetal:node:vif:list", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin"), - description="List VIFs attached to node", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}/vifs"}], - ), - base.APIRule( - name="baremetal:node:vif:attach", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Attach a VIF to a node", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/nodes/{node_ident}/vifs"}], - ), - base.APIRule( - name="baremetal:node:vif:detach", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Detach a VIF from a node", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/nodes/{node_ident}/vifs/{node_vif_ident}"}], - ), - base.APIRule( - name="baremetal:node:traits:list", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="List node traits", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/nodes/{node_ident}/traits"}], - ), - base.APIRule( - name="baremetal:node:traits:set", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Add a trait to, or replace all traits of, a node", - scope_types=["system", "project"], - operations=[ - {"method": "PUT", "path": "/nodes/{node_ident}/traits"}, - {"method": "PUT", "path": "/nodes/{node_ident}/traits/{trait}"}, - ], - ), - base.APIRule( - name="baremetal:node:traits:delete", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Remove one or all traits from a node", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/nodes/{node_ident}/traits"}, - {"method": "DELETE", "path": "/nodes/{node_ident}/traits/{trait}"}, - ], - ), - base.APIRule( - name="baremetal:node:bios:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Node BIOS information", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/nodes/{node_ident}/bios"}, - {"method": "GET", "path": "/nodes/{node_ident}/bios/{setting}"}, - ], - ), - base.APIRule( - name="baremetal:node:disable_cleaning", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Disable Node disk cleaning", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/nodes/{node_ident}"}], - ), - base.APIRule( - name="baremetal:port:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Port records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/ports/{port_id}"}, - {"method": "GET", "path": "/nodes/{node_ident}/ports"}, - {"method": "GET", "path": "/nodes/{node_ident}/ports/detail"}, - {"method": "GET", "path": "/portgroups/{portgroup_ident}/ports"}, - {"method": "GET", "path": "/portgroups/{portgroup_ident}/ports/detail"}, - ], - ), - base.APIRule( - name="baremetal:port:list", - check_str=("role:reader"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Port records, filtered by owner", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/detail"}, - ], - ), - base.APIRule( - name="baremetal:port:list_all", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Port records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/detail"}, - ], - ), - base.APIRule( - name="baremetal:port:create", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Create Port records", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="baremetal:port:delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Delete Port records", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/ports/{port_id}"}], - ), - base.APIRule( - name="baremetal:port:update", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Update Port records", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/ports/{port_id}"}], - ), - base.APIRule( - name="baremetal:portgroup:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Portgroup records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/portgroups"}, - {"method": "GET", "path": "/portgroups/detail"}, - {"method": "GET", "path": "/portgroups/{portgroup_ident}"}, - {"method": "GET", "path": "/nodes/{node_ident}/portgroups"}, - {"method": "GET", "path": "/nodes/{node_ident}/portgroups/detail"}, - ], - ), - base.APIRule( - name="baremetal:portgroup:create", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Create Portgroup records", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/portgroups"}], - ), - base.APIRule( - name="baremetal:portgroup:delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Delete Portgroup records", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/portgroups/{portgroup_ident}"}], - ), - base.APIRule( - name="baremetal:portgroup:update", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s)" - ), - basic_check_str=("role:admin"), - description="Update Portgroup records", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/portgroups/{portgroup_ident}"}], - ), - base.APIRule( - name="baremetal:portgroup:list", - check_str=("role:reader"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Port records, filtered by owner", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/portgroups"}, - {"method": "GET", "path": "/portgroups/detail"}, - ], - ), - base.APIRule( - name="baremetal:portgroup:list_all", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Port records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/portgroups"}, - {"method": "GET", "path": "/portgroups/detail"}, - ], - ), - base.APIRule( - name="baremetal:chassis:get", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Chassis records", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/chassis"}, - {"method": "GET", "path": "/chassis/detail"}, - {"method": "GET", "path": "/chassis/{chassis_id}"}, - ], - ), - base.APIRule( - name="baremetal:chassis:create", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create Chassis records", - scope_types=["system"], - operations=[{"method": "POST", "path": "/chassis"}], - ), - base.APIRule( - name="baremetal:chassis:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete Chassis records", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/chassis/{chassis_id}"}], - ), - base.APIRule( - name="baremetal:chassis:update", - check_str=("role:member and system_scope:all"), - basic_check_str=("role:admin"), - description="Update Chassis records", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/chassis/{chassis_id}"}], - ), - base.APIRule( - name="baremetal:driver:get", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="View list of available drivers", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/drivers"}, - {"method": "GET", "path": "/drivers/{driver_name}"}, - ], - ), - base.APIRule( - name="baremetal:driver:get_properties", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="View driver-specific properties", - scope_types=["system"], - operations=[{"method": "GET", "path": "/drivers/{driver_name}/properties"}], - ), - base.APIRule( - name="baremetal:driver:get_raid_logical_disk_properties", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="View driver-specific RAID metadata", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/drivers/{driver_name}/raid/logical_disk_properties"}, - ], - ), - base.APIRule( - name="baremetal:node:vendor_passthru", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Access vendor-specific Node functions", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "nodes/{node_ident}/vendor_passthru/methods"}, - {"method": "GET", "path": "nodes/{node_ident}/vendor_passthru?method={method_name}"}, - {"method": "PUT", "path": "nodes/{node_ident}/vendor_passthru?method={method_name}"}, - {"method": "POST", "path": "nodes/{node_ident}/vendor_passthru?method={method_name}"}, - { - "method": "PATCH", - "path": "nodes/{node_ident}/vendor_passthru?method={method_name}", - }, - { - "method": "DELETE", - "path": "nodes/{node_ident}/vendor_passthru?method={method_name}", - }, - ], - ), - base.APIRule( - name="baremetal:driver:vendor_passthru", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Access vendor-specific Driver functions", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "drivers/{driver_name}/vendor_passthru/methods"}, - { - "method": "GET", - "path": "drivers/{driver_name}/vendor_passthru?method={method_name}", - }, - { - "method": "PUT", - "path": "drivers/{driver_name}/vendor_passthru?method={method_name}", - }, - { - "method": "POST", - "path": "drivers/{driver_name}/vendor_passthru?method={method_name}", - }, - { - "method": "PATCH", - "path": "drivers/{driver_name}/vendor_passthru?method={method_name}", - }, - { - "method": "DELETE", - "path": "drivers/{driver_name}/vendor_passthru?method={method_name}", - }, - ], - ), - base.APIRule( - name="baremetal:node:ipa_heartbeat", - check_str=(""), - basic_check_str=("@"), - description="Receive heartbeats from IPA ramdisk", - scope_types=["project"], - operations=[{"method": "POST", "path": "/heartbeat/{node_ident}"}], - ), - base.APIRule( - name="baremetal:driver:ipa_lookup", - check_str=(""), - basic_check_str=("@"), - description="Access IPA ramdisk functions", - scope_types=["project"], - operations=[{"method": "GET", "path": "/lookup"}], - ), - base.APIRule( - name="baremetal:volume:list_all", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve a list of all Volume connector and target records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/volume/connectors"}, - {"method": "GET", "path": "/volume/targets"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume/connectors"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume/targets"}, - ], - ), - base.APIRule( - name="baremetal:volume:list", - check_str=("role:reader"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve a list of Volume connector and target records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/volume/connectors"}, - {"method": "GET", "path": "/volume/targets"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume/connectors"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume/targets"}, - ], - ), - base.APIRule( - name="baremetal:volume:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and (project_id:%(node.owner)s or project_id:%(node.lessee)s))" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Volume connector and target records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/volume"}, - {"method": "GET", "path": "/volume/connectors"}, - {"method": "GET", "path": "/volume/connectors/{volume_connector_id}"}, - {"method": "GET", "path": "/volume/targets"}, - {"method": "GET", "path": "/volume/targets/{volume_target_id}"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume/connectors"}, - {"method": "GET", "path": "/nodes/{node_ident}/volume/targets"}, - ], - ), - base.APIRule( - name="baremetal:volume:create", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Create Volume connector and target records", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/volume/connectors"}, - {"method": "POST", "path": "/volume/targets"}, - ], - ), - base.APIRule( - name="baremetal:volume:delete", - check_str=( - "(role:member and system_scope:all) or (role:admin and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Delete Volume connector and target records", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/volume/connectors/{volume_connector_id}"}, - {"method": "DELETE", "path": "/volume/targets/{volume_target_id}"}, - ], - ), - base.APIRule( - name="baremetal:volume:update", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(node.owner)s) or (role:admin and project_id:%(node.lessee)s)" - ), - basic_check_str=("role:admin"), - description="Update Volume connector and target records", - scope_types=["system", "project"], - operations=[ - {"method": "PATCH", "path": "/volume/connectors/{volume_connector_id}"}, - {"method": "PATCH", "path": "/volume/targets/{volume_target_id}"}, - ], - ), - base.APIRule( - name="baremetal:volume:view_target_properties", - check_str=("(role:reader and system_scope:all) or (role:admin)"), - basic_check_str=("role:admin or role:reader"), - description="Ability to view volume target properties", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/volume/connectors/{volume_connector_id}"}, - {"method": "GET", "path": "/volume/targets/{volume_target_id}"}, - ], - ), - base.APIRule( - name="baremetal:conductor:get", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Conductor records", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/conductors"}, - {"method": "GET", "path": "/conductors/{hostname}"}, - ], - ), - base.APIRule( - name="baremetal:allocation:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(allocation.owner)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Allocation records", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/allocations/{allocation_id}"}, - {"method": "GET", "path": "/nodes/{node_ident}/allocation"}, - ], - ), - base.APIRule( - name="baremetal:allocation:list", - check_str=("role:reader"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Allocation records, filtered by owner", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/allocations"}], - ), - base.APIRule( - name="baremetal:allocation:list_all", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve multiple Allocation records", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/allocations"}], - ), - base.APIRule( - name="baremetal:allocation:create", - check_str=("(role:member and system_scope:all) or (role:member)"), - basic_check_str=("role:admin"), - description="Create Allocation records", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/allocations"}], - ), - base.APIRule( - name="baremetal:allocation:create_restricted", - check_str=("role:member and system_scope:all"), - basic_check_str=("role:admin"), - description="Create Allocation records with a specific owner.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/allocations"}], - ), - base.APIRule( - name="baremetal:allocation:delete", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(allocation.owner)s)" - ), - basic_check_str=("role:admin"), - description="Delete Allocation records", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/allocations/{allocation_id}"}, - {"method": "DELETE", "path": "/nodes/{node_ident}/allocation"}, - ], - ), - base.APIRule( - name="baremetal:allocation:update", - check_str=( - "(role:member and system_scope:all) or (role:member and project_id:%(allocation.owner)s)" - ), - basic_check_str=("role:admin"), - description="Change name and extra fields of an allocation", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/allocations/{allocation_id}"}], - ), - base.APIRule( - name="baremetal:allocation:create_pre_rbac", - check_str=( - "(rule:is_member and role:baremetal_admin) or (is_admin_project:True and role:admin)" - ), - basic_check_str=("role:admin"), - description="Logical restrictor to prevent legacy allocation rule missuse - Requires blank allocations to originate from the legacy baremetal_admin.", - scope_types=["project"], - operations=[{"method": "PATCH", "path": "/allocations/{allocation_id}"}], - ), - base.APIRule( - name="baremetal:events:post", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Post events", - scope_types=["system"], - operations=[{"method": "POST", "path": "/events"}], - ), - base.APIRule( - name="baremetal:deploy_template:get", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Retrieve Deploy Template records", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/deploy_templates"}, - {"method": "GET", "path": "/deploy_templates/{deploy_template_ident}"}, - ], - ), - base.APIRule( - name="baremetal:deploy_template:create", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create Deploy Template records", - scope_types=["system"], - operations=[{"method": "POST", "path": "/deploy_templates"}], - ), - base.APIRule( - name="baremetal:deploy_template:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete Deploy Template records", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/deploy_templates/{deploy_template_ident}"}], - ), - base.APIRule( - name="baremetal:deploy_template:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update Deploy Template records", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/deploy_templates/{deploy_template_ident}"}], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/keystone.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/keystone.py deleted file mode 100644 index 45d2aa3..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/keystone.py +++ /dev/null @@ -1,2205 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="admin_required", - check_str=("role:admin or is_admin:1"), - description="No description", - ), - base.Rule( - name="service_role", - check_str=("role:service"), - description="No description", - ), - base.Rule( - name="service_or_admin", - check_str=("rule:admin_required or rule:service_role"), - description="No description", - ), - base.Rule( - name="owner", - check_str=("user_id:%(user_id)s"), - description="No description", - ), - base.Rule( - name="admin_or_owner", - check_str=("rule:admin_required or rule:owner"), - description="No description", - ), - base.Rule( - name="token_subject", - check_str=("user_id:%(target.token.user_id)s"), - description="No description", - ), - base.Rule( - name="admin_or_token_subject", - check_str=("rule:admin_required or rule:token_subject"), - description="No description", - ), - base.Rule( - name="service_admin_or_token_subject", - check_str=("rule:service_or_admin or rule:token_subject"), - description="No description", - ), - base.APIRule( - name="identity:get_access_rule", - check_str=("(role:reader and system_scope:all) or user_id:%(target.user.id)s"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Show access rule details.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/users/{user_id}/access_rules/{access_rule_id}"}, - {"method": "HEAD", "path": "/v3/users/{user_id}/access_rules/{access_rule_id}"}, - ], - ), - base.APIRule( - name="identity:list_access_rules", - check_str=("(role:reader and system_scope:all) or user_id:%(target.user.id)s"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List access rules for a user.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/users/{user_id}/access_rules"}, - {"method": "HEAD", "path": "/v3/users/{user_id}/access_rules"}, - ], - ), - base.APIRule( - name="identity:delete_access_rule", - check_str=("(role:admin and system_scope:all) or user_id:%(target.user.id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Delete an access_rule.", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/v3/users/{user_id}/access_rules/{access_rule_id}"}, - ], - ), - base.APIRule( - name="identity:authorize_request_token", - check_str=("rule:admin_required"), - basic_check_str=("!"), - description="Authorize OAUTH1 request token.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v3/OS-OAUTH1/authorize/{request_token_id}"}], - ), - base.APIRule( - name="identity:get_access_token", - check_str=("rule:admin_required"), - basic_check_str=("!"), - description="Get OAUTH1 access token for user by access token ID.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v3/users/{user_id}/OS-OAUTH1/access_tokens/{access_token_id}", - }, - ], - ), - base.APIRule( - name="identity:get_access_token_role", - check_str=("rule:admin_required"), - basic_check_str=("!"), - description="Get role for user OAUTH1 access token.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v3/users/{user_id}/OS-OAUTH1/access_tokens/{access_token_id}/roles/{role_id}", - }, - ], - ), - base.APIRule( - name="identity:list_access_tokens", - check_str=("rule:admin_required"), - basic_check_str=("!"), - description="List OAUTH1 access tokens for user.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v3/users/{user_id}/OS-OAUTH1/access_tokens"}], - ), - base.APIRule( - name="identity:list_access_token_roles", - check_str=("rule:admin_required"), - basic_check_str=("!"), - description="List OAUTH1 access token roles.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v3/users/{user_id}/OS-OAUTH1/access_tokens/{access_token_id}/roles", - }, - ], - ), - base.APIRule( - name="identity:delete_access_token", - check_str=("rule:admin_required"), - basic_check_str=("!"), - description="Delete OAUTH1 access token.", - scope_types=["project"], - operations=[ - { - "method": "DELETE", - "path": "/v3/users/{user_id}/OS-OAUTH1/access_tokens/{access_token_id}", - }, - ], - ), - base.APIRule( - name="identity:get_application_credential", - check_str=("(role:reader and system_scope:all) or rule:owner"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Show application credential details.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/v3/users/{user_id}/application_credentials/{application_credential_id}", - }, - { - "method": "HEAD", - "path": "/v3/users/{user_id}/application_credentials/{application_credential_id}", - }, - ], - ), - base.APIRule( - name="identity:list_application_credentials", - check_str=("(role:reader and system_scope:all) or rule:owner"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List application credentials for a user.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/users/{user_id}/application_credentials"}, - {"method": "HEAD", "path": "/v3/users/{user_id}/application_credentials"}, - ], - ), - base.APIRule( - name="identity:create_application_credential", - check_str=("user_id:%(user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Create an application credential.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v3/users/{user_id}/application_credentials"}], - ), - base.APIRule( - name="identity:delete_application_credential", - check_str=("(role:admin and system_scope:all) or rule:owner"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Delete an application credential.", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/v3/users/{user_id}/application_credentials/{application_credential_id}", - }, - ], - ), - base.APIRule( - name="identity:get_auth_catalog", - check_str=(""), - basic_check_str=("@"), - description="Get service catalog.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v3/auth/catalog"}, - {"method": "HEAD", "path": "/v3/auth/catalog"}, - ], - ), - base.APIRule( - name="identity:get_auth_projects", - check_str=(""), - basic_check_str=("@"), - description="List all projects a user has access to via role assignments.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v3/auth/projects"}, - {"method": "HEAD", "path": "/v3/auth/projects"}, - ], - ), - base.APIRule( - name="identity:get_auth_domains", - check_str=(""), - basic_check_str=("@"), - description="List all domains a user has access to via role assignments.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v3/auth/domains"}, - {"method": "HEAD", "path": "/v3/auth/domains"}, - ], - ), - base.APIRule( - name="identity:get_auth_system", - check_str=(""), - basic_check_str=("@"), - description="List systems a user has access to via role assignments.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v3/auth/system"}, - {"method": "HEAD", "path": "/v3/auth/system"}, - ], - ), - base.APIRule( - name="identity:get_consumer", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="Show OAUTH1 consumer details.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/OS-OAUTH1/consumers/{consumer_id}"}], - ), - base.APIRule( - name="identity:list_consumers", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="List OAUTH1 consumers.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/OS-OAUTH1/consumers"}], - ), - base.APIRule( - name="identity:create_consumer", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Create OAUTH1 consumer.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/OS-OAUTH1/consumers"}], - ), - base.APIRule( - name="identity:update_consumer", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Update OAUTH1 consumer.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/OS-OAUTH1/consumers/{consumer_id}"}], - ), - base.APIRule( - name="identity:delete_consumer", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Delete OAUTH1 consumer.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/OS-OAUTH1/consumers/{consumer_id}"}], - ), - base.APIRule( - name="identity:get_credential", - check_str=("(role:reader and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Show credentials details.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v3/credentials/{credential_id}"}], - ), - base.APIRule( - name="identity:list_credentials", - check_str=("(role:reader and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List credentials.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v3/credentials"}], - ), - base.APIRule( - name="identity:create_credential", - check_str=("(role:admin and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Create credential.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v3/credentials"}], - ), - base.APIRule( - name="identity:update_credential", - check_str=("(role:admin and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Update credential.", - scope_types=["system", "project"], - operations=[{"method": "PATCH", "path": "/v3/credentials/{credential_id}"}], - ), - base.APIRule( - name="identity:delete_credential", - check_str=("(role:admin and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Delete credential.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/v3/credentials/{credential_id}"}], - ), - base.APIRule( - name="identity:get_domain", - check_str=( - "(role:reader and system_scope:all) or token.domain.id:%(target.domain.id)s or token.project.domain.id:%(target.domain.id)s" - ), - basic_check_str=( - "role:admin or role:reader or user_id:%(user_id)s or project_id:%(project_id)s" - ), - description="Show domain details.", - scope_types=["system", "domain", "project"], - operations=[{"method": "GET", "path": "/v3/domains/{domain_id}"}], - ), - base.APIRule( - name="identity:list_domains", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List domains.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/domains"}], - ), - base.APIRule( - name="identity:create_domain", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create domain.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/domains"}], - ), - base.APIRule( - name="identity:update_domain", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update domain.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/domains/{domain_id}"}], - ), - base.APIRule( - name="identity:delete_domain", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete domain.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/domains/{domain_id}"}], - ), - base.APIRule( - name="identity:create_domain_config", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create domain configuration.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/v3/domains/{domain_id}/config"}], - ), - base.APIRule( - name="identity:get_domain_config", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get the entire domain configuration for a domain, an option group within a domain, or a specific configuration option within a group for a domain.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/domains/{domain_id}/config"}, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/config"}, - {"method": "GET", "path": "/v3/domains/{domain_id}/config/{group}"}, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/config/{group}"}, - {"method": "GET", "path": "/v3/domains/{domain_id}/config/{group}/{option}"}, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/config/{group}/{option}"}, - ], - ), - base.APIRule( - name="identity:get_security_compliance_domain_config", - check_str=(""), - basic_check_str=("@"), - description="Get security compliance domain configuration for either a domain or a specific option in a domain.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/domains/{domain_id}/config/security_compliance"}, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/config/security_compliance"}, - { - "method": "GET", - "path": "v3/domains/{domain_id}/config/security_compliance/{option}", - }, - { - "method": "HEAD", - "path": "v3/domains/{domain_id}/config/security_compliance/{option}", - }, - ], - ), - base.APIRule( - name="identity:update_domain_config", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update domain configuration for either a domain, specific group or a specific option in a group.", - scope_types=["system"], - operations=[ - {"method": "PATCH", "path": "/v3/domains/{domain_id}/config"}, - {"method": "PATCH", "path": "/v3/domains/{domain_id}/config/{group}"}, - {"method": "PATCH", "path": "/v3/domains/{domain_id}/config/{group}/{option}"}, - ], - ), - base.APIRule( - name="identity:delete_domain_config", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete domain configuration for either a domain, specific group or a specific option in a group.", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/v3/domains/{domain_id}/config"}, - {"method": "DELETE", "path": "/v3/domains/{domain_id}/config/{group}"}, - {"method": "DELETE", "path": "/v3/domains/{domain_id}/config/{group}/{option}"}, - ], - ), - base.APIRule( - name="identity:get_domain_config_default", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get domain configuration default for either a domain, specific group or a specific option in a group.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/domains/config/default"}, - {"method": "HEAD", "path": "/v3/domains/config/default"}, - {"method": "GET", "path": "/v3/domains/config/{group}/default"}, - {"method": "HEAD", "path": "/v3/domains/config/{group}/default"}, - {"method": "GET", "path": "/v3/domains/config/{group}/{option}/default"}, - {"method": "HEAD", "path": "/v3/domains/config/{group}/{option}/default"}, - ], - ), - base.APIRule( - name="identity:ec2_get_credential", - check_str=("(role:reader and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Show ec2 credential details.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/users/{user_id}/credentials/OS-EC2/{credential_id}"}, - ], - ), - base.APIRule( - name="identity:ec2_list_credentials", - check_str=("(role:reader and system_scope:all) or rule:owner"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List ec2 credentials.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v3/users/{user_id}/credentials/OS-EC2"}], - ), - base.APIRule( - name="identity:ec2_create_credential", - check_str=("(role:admin and system_scope:all) or rule:owner"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Create ec2 credential.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/v3/users/{user_id}/credentials/OS-EC2"}], - ), - base.APIRule( - name="identity:ec2_delete_credential", - check_str=("(role:admin and system_scope:all) or user_id:%(target.credential.user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Delete ec2 credential.", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/v3/users/{user_id}/credentials/OS-EC2/{credential_id}", - }, - ], - ), - base.APIRule( - name="identity:get_endpoint", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show endpoint details.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/endpoints/{endpoint_id}"}], - ), - base.APIRule( - name="identity:list_endpoints", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List endpoints.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/endpoints"}], - ), - base.APIRule( - name="identity:create_endpoint", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create endpoint.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/endpoints"}], - ), - base.APIRule( - name="identity:update_endpoint", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update endpoint.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/endpoints/{endpoint_id}"}], - ), - base.APIRule( - name="identity:delete_endpoint", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete endpoint.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/endpoints/{endpoint_id}"}], - ), - base.APIRule( - name="identity:create_endpoint_group", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create endpoint group.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/OS-EP-FILTER/endpoint_groups"}], - ), - base.APIRule( - name="identity:list_endpoint_groups", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin"), - description="List endpoint groups.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/OS-EP-FILTER/endpoint_groups"}], - ), - base.APIRule( - name="identity:get_endpoint_group", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin"), - description="Get endpoint group.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}"}, - {"method": "HEAD", "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}"}, - ], - ), - base.APIRule( - name="identity:update_endpoint_group", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update endpoint group.", - scope_types=["system"], - operations=[ - {"method": "PATCH", "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}"}, - ], - ), - base.APIRule( - name="identity:delete_endpoint_group", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete endpoint group.", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}"}, - ], - ), - base.APIRule( - name="identity:list_projects_associated_with_endpoint_group", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin"), - description="List all projects associated with a specific endpoint group.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects", - }, - ], - ), - base.APIRule( - name="identity:list_endpoints_associated_with_endpoint_group", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin"), - description="List all endpoints associated with an endpoint group.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/endpoints", - }, - ], - ), - base.APIRule( - name="identity:get_endpoint_group_in_project", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin"), - description="Check if an endpoint group is associated with a project.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects/{project_id}", - }, - { - "method": "HEAD", - "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects/{project_id}", - }, - ], - ), - base.APIRule( - name="identity:list_endpoint_groups_for_project", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin"), - description="List endpoint groups associated with a specific project.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-EP-FILTER/projects/{project_id}/endpoint_groups"}, - ], - ), - base.APIRule( - name="identity:add_endpoint_group_to_project", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Allow a project to access an endpoint group.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects/{project_id}", - }, - ], - ), - base.APIRule( - name="identity:remove_endpoint_group_from_project", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Remove endpoint group from project.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}/projects/{project_id}", - }, - ], - ), - base.APIRule( - name="identity:check_grant", - check_str=( - "(role:reader and system_scope:all) or ((role:reader and domain_id:%(target.user.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:reader and domain_id:%(target.user.domain_id)s and domain_id:%(target.domain.id)s) or (role:reader and domain_id:%(target.group.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:reader and domain_id:%(target.group.domain_id)s and domain_id:%(target.domain.id)s)) and (domain_id:%(target.role.domain_id)s or None:%(target.role.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader or project_id:%(project_id)s"), - description="Check a role grant between a target and an actor. A target can be either a domain or a project. An actor can be either a user or a group. These terms also apply to the OS-INHERIT APIs, where grants on the target are inherited to all projects in the subtree, if applicable.", - scope_types=["system", "domain"], - operations=[ - { - "method": "HEAD", - "path": "/v3/projects/{project_id}/users/{user_id}/roles/{role_id}", - }, - { - "method": "GET", - "path": "/v3/projects/{project_id}/users/{user_id}/roles/{role_id}", - }, - { - "method": "HEAD", - "path": "/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}", - }, - { - "method": "GET", - "path": "/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}", - }, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}"}, - {"method": "GET", "path": "/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}"}, - { - "method": "HEAD", - "path": "/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}", - }, - { - "method": "GET", - "path": "/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}", - }, - { - "method": "HEAD", - "path": "/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "GET", - "path": "/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "HEAD", - "path": "/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "GET", - "path": "/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "HEAD", - "path": "/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "GET", - "path": "/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "HEAD", - "path": "/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "GET", - "path": "/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - ], - ), - base.APIRule( - name="identity:list_grants", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.user.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:reader and domain_id:%(target.user.domain_id)s and domain_id:%(target.domain.id)s) or (role:reader and domain_id:%(target.group.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:reader and domain_id:%(target.group.domain_id)s and domain_id:%(target.domain.id)s)" - ), - basic_check_str=("role:admin or role:reader or project_id:%(project_id)s"), - description="List roles granted to an actor on a target. A target can be either a domain or a project. An actor can be either a user or a group. For the OS-INHERIT APIs, it is possible to list inherited role grants for actors on domains, where grants are inherited to all projects in the specified domain.", - scope_types=["system", "domain"], - operations=[ - {"method": "GET", "path": "/v3/projects/{project_id}/users/{user_id}/roles"}, - {"method": "HEAD", "path": "/v3/projects/{project_id}/users/{user_id}/roles"}, - {"method": "GET", "path": "/v3/projects/{project_id}/groups/{group_id}/roles"}, - {"method": "HEAD", "path": "/v3/projects/{project_id}/groups/{group_id}/roles"}, - {"method": "GET", "path": "/v3/domains/{domain_id}/users/{user_id}/roles"}, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/users/{user_id}/roles"}, - {"method": "GET", "path": "/v3/domains/{domain_id}/groups/{group_id}/roles"}, - {"method": "HEAD", "path": "/v3/domains/{domain_id}/groups/{group_id}/roles"}, - { - "method": "GET", - "path": "/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/inherited_to_projects", - }, - { - "method": "GET", - "path": "/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/inherited_to_projects", - }, - ], - ), - base.APIRule( - name="identity:create_grant", - check_str=( - "(role:admin and system_scope:all) or ((role:admin and domain_id:%(target.user.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:admin and domain_id:%(target.user.domain_id)s and domain_id:%(target.domain.id)s) or (role:admin and domain_id:%(target.group.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:admin and domain_id:%(target.group.domain_id)s and domain_id:%(target.domain.id)s)) and (domain_id:%(target.role.domain_id)s or None:%(target.role.domain_id)s)" - ), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Create a role grant between a target and an actor. A target can be either a domain or a project. An actor can be either a user or a group. These terms also apply to the OS-INHERIT APIs, where grants on the target are inherited to all projects in the subtree, if applicable.", - scope_types=["system", "domain"], - operations=[ - { - "method": "PUT", - "path": "/v3/projects/{project_id}/users/{user_id}/roles/{role_id}", - }, - { - "method": "PUT", - "path": "/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}", - }, - {"method": "PUT", "path": "/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}"}, - { - "method": "PUT", - "path": "/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}", - }, - { - "method": "PUT", - "path": "/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "PUT", - "path": "/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "PUT", - "path": "/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "PUT", - "path": "/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - ], - ), - base.APIRule( - name="identity:revoke_grant", - check_str=( - "(role:admin and system_scope:all) or ((role:admin and domain_id:%(target.user.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:admin and domain_id:%(target.user.domain_id)s and domain_id:%(target.domain.id)s) or (role:admin and domain_id:%(target.group.domain_id)s and domain_id:%(target.project.domain_id)s) or (role:admin and domain_id:%(target.group.domain_id)s and domain_id:%(target.domain.id)s)) and (domain_id:%(target.role.domain_id)s or None:%(target.role.domain_id)s)" - ), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Revoke a role grant between a target and an actor. A target can be either a domain or a project. An actor can be either a user or a group. These terms also apply to the OS-INHERIT APIs, where grants on the target are inherited to all projects in the subtree, if applicable. In that case, revoking the role grant in the target would remove the logical effect of inheriting it to the target's projects subtree.", - scope_types=["system", "domain"], - operations=[ - { - "method": "DELETE", - "path": "/v3/projects/{project_id}/users/{user_id}/roles/{role_id}", - }, - { - "method": "DELETE", - "path": "/v3/projects/{project_id}/groups/{group_id}/roles/{role_id}", - }, - { - "method": "DELETE", - "path": "/v3/domains/{domain_id}/users/{user_id}/roles/{role_id}", - }, - { - "method": "DELETE", - "path": "/v3/domains/{domain_id}/groups/{group_id}/roles/{role_id}", - }, - { - "method": "DELETE", - "path": "/v3/OS-INHERIT/projects/{project_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "DELETE", - "path": "/v3/OS-INHERIT/projects/{project_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "DELETE", - "path": "/v3/OS-INHERIT/domains/{domain_id}/users/{user_id}/roles/{role_id}/inherited_to_projects", - }, - { - "method": "DELETE", - "path": "/v3/OS-INHERIT/domains/{domain_id}/groups/{group_id}/roles/{role_id}/inherited_to_projects", - }, - ], - ), - base.APIRule( - name="identity:list_system_grants_for_user", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List all grants a specific user has on the system.", - scope_types=["system"], - operations=[ - {"method": "HEAD", "path": "/v3/system/users/{user_id}/roles"}, - {"method": "GET", "path": "/v3/system/users/{user_id}/roles"}, - ], - ), - base.APIRule( - name="identity:check_system_grant_for_user", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Check if a user has a role on the system.", - scope_types=["system"], - operations=[ - {"method": "HEAD", "path": "/v3/system/users/{user_id}/roles/{role_id}"}, - {"method": "GET", "path": "/v3/system/users/{user_id}/roles/{role_id}"}, - ], - ), - base.APIRule( - name="identity:create_system_grant_for_user", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Grant a user a role on the system.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/v3/system/users/{user_id}/roles/{role_id}"}], - ), - base.APIRule( - name="identity:revoke_system_grant_for_user", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Remove a role from a user on the system.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/system/users/{user_id}/roles/{role_id}"}], - ), - base.APIRule( - name="identity:list_system_grants_for_group", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List all grants a specific group has on the system.", - scope_types=["system"], - operations=[ - {"method": "HEAD", "path": "/v3/system/groups/{group_id}/roles"}, - {"method": "GET", "path": "/v3/system/groups/{group_id}/roles"}, - ], - ), - base.APIRule( - name="identity:check_system_grant_for_group", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Check if a group has a role on the system.", - scope_types=["system"], - operations=[ - {"method": "HEAD", "path": "/v3/system/groups/{group_id}/roles/{role_id}"}, - {"method": "GET", "path": "/v3/system/groups/{group_id}/roles/{role_id}"}, - ], - ), - base.APIRule( - name="identity:create_system_grant_for_group", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Grant a group a role on the system.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/v3/system/groups/{group_id}/roles/{role_id}"}], - ), - base.APIRule( - name="identity:revoke_system_grant_for_group", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Remove a role from a group on the system.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/system/groups/{group_id}/roles/{role_id}"}], - ), - base.APIRule( - name="identity:get_group", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.group.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Show group details.", - scope_types=["system", "domain"], - operations=[ - {"method": "GET", "path": "/v3/groups/{group_id}"}, - {"method": "HEAD", "path": "/v3/groups/{group_id}"}, - ], - ), - base.APIRule( - name="identity:list_groups", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.group.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="List groups.", - scope_types=["system", "domain"], - operations=[ - {"method": "GET", "path": "/v3/groups"}, - {"method": "HEAD", "path": "/v3/groups"}, - ], - ), - base.APIRule( - name="identity:list_groups_for_user", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.user.domain_id)s) or user_id:%(user_id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List groups to which a user belongs.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/users/{user_id}/groups"}, - {"method": "HEAD", "path": "/v3/users/{user_id}/groups"}, - ], - ), - base.APIRule( - name="identity:create_group", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.group.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Create group.", - scope_types=["system", "domain"], - operations=[{"method": "POST", "path": "/v3/groups"}], - ), - base.APIRule( - name="identity:update_group", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.group.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Update group.", - scope_types=["system", "domain"], - operations=[{"method": "PATCH", "path": "/v3/groups/{group_id}"}], - ), - base.APIRule( - name="identity:delete_group", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.group.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Delete group.", - scope_types=["system", "domain"], - operations=[{"method": "DELETE", "path": "/v3/groups/{group_id}"}], - ), - base.APIRule( - name="identity:list_users_in_group", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.group.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="List members of a specific group.", - scope_types=["system", "domain"], - operations=[ - {"method": "GET", "path": "/v3/groups/{group_id}/users"}, - {"method": "HEAD", "path": "/v3/groups/{group_id}/users"}, - ], - ), - base.APIRule( - name="identity:remove_user_from_group", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.group.domain_id)s and domain_id:%(target.user.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Remove user from group.", - scope_types=["system", "domain"], - operations=[{"method": "DELETE", "path": "/v3/groups/{group_id}/users/{user_id}"}], - ), - base.APIRule( - name="identity:check_user_in_group", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.group.domain_id)s and domain_id:%(target.user.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="Check whether a user is a member of a group.", - scope_types=["system", "domain"], - operations=[ - {"method": "HEAD", "path": "/v3/groups/{group_id}/users/{user_id}"}, - {"method": "GET", "path": "/v3/groups/{group_id}/users/{user_id}"}, - ], - ), - base.APIRule( - name="identity:add_user_to_group", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.group.domain_id)s and domain_id:%(target.user.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Add user to group.", - scope_types=["system", "domain"], - operations=[{"method": "PUT", "path": "/v3/groups/{group_id}/users/{user_id}"}], - ), - base.APIRule( - name="identity:create_identity_provider", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create identity provider.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}"}], - ), - base.APIRule( - name="identity:list_identity_providers", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List identity providers.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-FEDERATION/identity_providers"}, - {"method": "HEAD", "path": "/v3/OS-FEDERATION/identity_providers"}, - ], - ), - base.APIRule( - name="identity:get_identity_provider", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get identity provider.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}"}, - {"method": "HEAD", "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}"}, - ], - ), - base.APIRule( - name="identity:update_identity_provider", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update identity provider.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}"}], - ), - base.APIRule( - name="identity:delete_identity_provider", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete identity provider.", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}"}, - ], - ), - base.APIRule( - name="identity:get_implied_role", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get information about an association between two roles. When a relationship exists between a prior role and an implied role and the prior role is assigned to a user, the user also assumes the implied role.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/roles/{prior_role_id}/implies/{implied_role_id}"}, - ], - ), - base.APIRule( - name="identity:list_implied_roles", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List associations between two roles. When a relationship exists between a prior role and an implied role and the prior role is assigned to a user, the user also assumes the implied role. This will return all the implied roles that would be assumed by the user who gets the specified prior role.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/roles/{prior_role_id}/implies"}, - {"method": "HEAD", "path": "/v3/roles/{prior_role_id}/implies"}, - ], - ), - base.APIRule( - name="identity:create_implied_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create an association between two roles. When a relationship exists between a prior role and an implied role and the prior role is assigned to a user, the user also assumes the implied role.", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/v3/roles/{prior_role_id}/implies/{implied_role_id}"}, - ], - ), - base.APIRule( - name="identity:delete_implied_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete the association between two roles. When a relationship exists between a prior role and an implied role and the prior role is assigned to a user, the user also assumes the implied role. Removing the association will cause that effect to be eliminated.", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/v3/roles/{prior_role_id}/implies/{implied_role_id}"}, - ], - ), - base.APIRule( - name="identity:list_role_inference_rules", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List all associations between two roles in the system. When a relationship exists between a prior role and an implied role and the prior role is assigned to a user, the user also assumes the implied role.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/role_inferences"}, - {"method": "HEAD", "path": "/v3/role_inferences"}, - ], - ), - base.APIRule( - name="identity:check_implied_role", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Check an association between two roles. When a relationship exists between a prior role and an implied role and the prior role is assigned to a user, the user also assumes the implied role.", - scope_types=["system"], - operations=[ - {"method": "HEAD", "path": "/v3/roles/{prior_role_id}/implies/{implied_role_id}"}, - ], - ), - base.APIRule( - name="identity:get_limit_model", - check_str=(""), - basic_check_str=("@"), - description="Get limit enforcement model.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/limits/model"}, - {"method": "HEAD", "path": "/v3/limits/model"}, - ], - ), - base.APIRule( - name="identity:get_limit", - check_str=( - "(role:reader and system_scope:all) or (domain_id:%(target.limit.domain.id)s or domain_id:%(target.limit.project.domain_id)s) or (project_id:%(target.limit.project_id)s and not None:%(target.limit.project_id)s)" - ), - basic_check_str=("@"), - description="Show limit details.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/limits/{limit_id}"}, - {"method": "HEAD", "path": "/v3/limits/{limit_id}"}, - ], - ), - base.APIRule( - name="identity:list_limits", - check_str=(""), - basic_check_str=("@"), - description="List limits.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/limits"}, - {"method": "HEAD", "path": "/v3/limits"}, - ], - ), - base.APIRule( - name="identity:create_limits", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create limits.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/limits"}], - ), - base.APIRule( - name="identity:update_limit", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update limit.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/limits/{limit_id}"}], - ), - base.APIRule( - name="identity:delete_limit", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete limit.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/limits/{limit_id}"}], - ), - base.APIRule( - name="identity:create_mapping", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a new federated mapping containing one or more sets of rules.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/v3/OS-FEDERATION/mappings/{mapping_id}"}], - ), - base.APIRule( - name="identity:get_mapping", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a federated mapping.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-FEDERATION/mappings/{mapping_id}"}, - {"method": "HEAD", "path": "/v3/OS-FEDERATION/mappings/{mapping_id}"}, - ], - ), - base.APIRule( - name="identity:list_mappings", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List federated mappings.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-FEDERATION/mappings"}, - {"method": "HEAD", "path": "/v3/OS-FEDERATION/mappings"}, - ], - ), - base.APIRule( - name="identity:delete_mapping", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a federated mapping.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/OS-FEDERATION/mappings/{mapping_id}"}], - ), - base.APIRule( - name="identity:update_mapping", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a federated mapping.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/OS-FEDERATION/mappings/{mapping_id}"}], - ), - base.APIRule( - name="identity:get_policy", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="Show policy details.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/policies/{policy_id}"}], - ), - base.APIRule( - name="identity:list_policies", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="List policies.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/policies"}], - ), - base.APIRule( - name="identity:create_policy", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Create policy.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/policies"}], - ), - base.APIRule( - name="identity:update_policy", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Update policy.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/policies/{policy_id}"}], - ), - base.APIRule( - name="identity:delete_policy", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Delete policy.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/policies/{policy_id}"}], - ), - base.APIRule( - name="identity:create_policy_association_for_endpoint", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Associate a policy to a specific endpoint.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/endpoints/{endpoint_id}", - }, - ], - ), - base.APIRule( - name="identity:check_policy_association_for_endpoint", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="Check policy association for endpoint.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/endpoints/{endpoint_id}", - }, - { - "method": "HEAD", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/endpoints/{endpoint_id}", - }, - ], - ), - base.APIRule( - name="identity:delete_policy_association_for_endpoint", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Delete policy association for endpoint.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/endpoints/{endpoint_id}", - }, - ], - ), - base.APIRule( - name="identity:create_policy_association_for_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Associate a policy to a specific service.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}", - }, - ], - ), - base.APIRule( - name="identity:check_policy_association_for_service", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="Check policy association for service.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}", - }, - { - "method": "HEAD", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}", - }, - ], - ), - base.APIRule( - name="identity:delete_policy_association_for_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Delete policy association for service.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}", - }, - ], - ), - base.APIRule( - name="identity:create_policy_association_for_region_and_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Associate a policy to a specific region and service combination.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}/regions/{region_id}", - }, - ], - ), - base.APIRule( - name="identity:check_policy_association_for_region_and_service", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="Check policy association for region and service.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}/regions/{region_id}", - }, - { - "method": "HEAD", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}/regions/{region_id}", - }, - ], - ), - base.APIRule( - name="identity:delete_policy_association_for_region_and_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("!"), - description="Delete policy association for region and service.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/services/{service_id}/regions/{region_id}", - }, - ], - ), - base.APIRule( - name="identity:get_policy_for_endpoint", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="Get policy for endpoint.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/endpoints/{endpoint_id}/OS-ENDPOINT-POLICY/policy"}, - {"method": "HEAD", "path": "/v3/endpoints/{endpoint_id}/OS-ENDPOINT-POLICY/policy"}, - ], - ), - base.APIRule( - name="identity:list_endpoints_for_policy", - check_str=("role:reader and system_scope:all"), - basic_check_str=("!"), - description="List endpoints for policy.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/policies/{policy_id}/OS-ENDPOINT-POLICY/endpoints"}, - ], - ), - base.APIRule( - name="identity:get_project", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or project_id:%(target.project.id)s" - ), - basic_check_str=("role:admin or role:reader or project_id:%(project_id)s"), - description="Show project details.", - scope_types=["system", "domain", "project"], - operations=[{"method": "GET", "path": "/v3/projects/{project_id}"}], - ), - base.APIRule( - name="identity:list_projects", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="List projects.", - scope_types=["system", "domain"], - operations=[{"method": "GET", "path": "/v3/projects"}], - ), - base.APIRule( - name="identity:list_user_projects", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.user.domain_id)s) or user_id:%(target.user.id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List projects for user.", - scope_types=["system", "domain", "project"], - operations=[{"method": "GET", "path": "/v3/users/{user_id}/projects"}], - ), - base.APIRule( - name="identity:create_project", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Create project.", - scope_types=["system", "domain"], - operations=[{"method": "POST", "path": "/v3/projects"}], - ), - base.APIRule( - name="identity:update_project", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Update project.", - scope_types=["system", "domain"], - operations=[{"method": "PATCH", "path": "/v3/projects/{project_id}"}], - ), - base.APIRule( - name="identity:delete_project", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Delete project.", - scope_types=["system", "domain"], - operations=[{"method": "DELETE", "path": "/v3/projects/{project_id}"}], - ), - base.APIRule( - name="identity:list_project_tags", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or project_id:%(target.project.id)s" - ), - basic_check_str=("role:admin or role:reader or project_id:%(project_id)s"), - description="List tags for a project.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/projects/{project_id}/tags"}, - {"method": "HEAD", "path": "/v3/projects/{project_id}/tags"}, - ], - ), - base.APIRule( - name="identity:get_project_tag", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or project_id:%(target.project.id)s" - ), - basic_check_str=("role:admin or role:reader or project_id:%(project_id)s"), - description="Check if project contains a tag.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/projects/{project_id}/tags/{value}"}, - {"method": "HEAD", "path": "/v3/projects/{project_id}/tags/{value}"}, - ], - ), - base.APIRule( - name="identity:update_project_tags", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s)" - ), - basic_check_str=("role:admin"), - description="Replace all tags on a project with the new set of tags.", - scope_types=["system", "domain", "project"], - operations=[{"method": "PUT", "path": "/v3/projects/{project_id}/tags"}], - ), - base.APIRule( - name="identity:create_project_tag", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s)" - ), - basic_check_str=("role:admin"), - description="Add a single tag to a project.", - scope_types=["system", "domain", "project"], - operations=[{"method": "PUT", "path": "/v3/projects/{project_id}/tags/{value}"}], - ), - base.APIRule( - name="identity:delete_project_tags", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s)" - ), - basic_check_str=("role:admin"), - description="Remove all tags from a project.", - scope_types=["system", "domain", "project"], - operations=[{"method": "DELETE", "path": "/v3/projects/{project_id}/tags"}], - ), - base.APIRule( - name="identity:delete_project_tag", - check_str=( - "(role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s)" - ), - basic_check_str=("role:admin"), - description="Delete a specified tag from project.", - scope_types=["system", "domain", "project"], - operations=[{"method": "DELETE", "path": "/v3/projects/{project_id}/tags/{value}"}], - ), - base.APIRule( - name="identity:list_projects_for_endpoint", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List projects allowed to access an endpoint.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-EP-FILTER/endpoints/{endpoint_id}/projects"}, - ], - ), - base.APIRule( - name="identity:add_endpoint_to_project", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Allow project to access an endpoint.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/OS-EP-FILTER/projects/{project_id}/endpoints/{endpoint_id}", - }, - ], - ), - base.APIRule( - name="identity:check_endpoint_in_project", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Check if a project is allowed to access an endpoint.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/OS-EP-FILTER/projects/{project_id}/endpoints/{endpoint_id}", - }, - { - "method": "HEAD", - "path": "/v3/OS-EP-FILTER/projects/{project_id}/endpoints/{endpoint_id}", - }, - ], - ), - base.APIRule( - name="identity:list_endpoints_for_project", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List the endpoints a project is allowed to access.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-EP-FILTER/projects/{project_id}/endpoints"}, - ], - ), - base.APIRule( - name="identity:remove_endpoint_from_project", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Remove access to an endpoint from a project that has previously been given explicit access.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/OS-EP-FILTER/projects/{project_id}/endpoints/{endpoint_id}", - }, - ], - ), - base.APIRule( - name="identity:create_protocol", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create federated protocol.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}/protocols/{protocol_id}", - }, - ], - ), - base.APIRule( - name="identity:update_protocol", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update federated protocol.", - scope_types=["system"], - operations=[ - { - "method": "PATCH", - "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}/protocols/{protocol_id}", - }, - ], - ), - base.APIRule( - name="identity:get_protocol", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get federated protocol.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}/protocols/{protocol_id}", - }, - ], - ), - base.APIRule( - name="identity:list_protocols", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List federated protocols.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}/protocols"}, - ], - ), - base.APIRule( - name="identity:delete_protocol", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete federated protocol.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/OS-FEDERATION/identity_providers/{idp_id}/protocols/{protocol_id}", - }, - ], - ), - base.APIRule( - name="identity:get_region", - check_str=(""), - basic_check_str=("@"), - description="Show region details.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/regions/{region_id}"}, - {"method": "HEAD", "path": "/v3/regions/{region_id}"}, - ], - ), - base.APIRule( - name="identity:list_regions", - check_str=(""), - basic_check_str=("@"), - description="List regions.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/regions"}, - {"method": "HEAD", "path": "/v3/regions"}, - ], - ), - base.APIRule( - name="identity:create_region", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create region.", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/v3/regions"}, - {"method": "PUT", "path": "/v3/regions/{region_id}"}, - ], - ), - base.APIRule( - name="identity:update_region", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update region.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/regions/{region_id}"}], - ), - base.APIRule( - name="identity:delete_region", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete region.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/regions/{region_id}"}], - ), - base.APIRule( - name="identity:get_registered_limit", - check_str=(""), - basic_check_str=("@"), - description="Show registered limit details.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/registered_limits/{registered_limit_id}"}, - {"method": "HEAD", "path": "/v3/registered_limits/{registered_limit_id}"}, - ], - ), - base.APIRule( - name="identity:list_registered_limits", - check_str=(""), - basic_check_str=("@"), - description="List registered limits.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/registered_limits"}, - {"method": "HEAD", "path": "/v3/registered_limits"}, - ], - ), - base.APIRule( - name="identity:create_registered_limits", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create registered limits.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/registered_limits"}], - ), - base.APIRule( - name="identity:update_registered_limit", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update registered limit.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/registered_limits/{registered_limit_id}"}], - ), - base.APIRule( - name="identity:delete_registered_limit", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete registered limit.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/registered_limits/{registered_limit_id}"}], - ), - base.APIRule( - name="identity:list_revoke_events", - check_str=("rule:service_or_admin"), - basic_check_str=("role:admin"), - description="List revocation events.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/OS-REVOKE/events"}], - ), - base.APIRule( - name="identity:get_role", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show role details.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/roles/{role_id}"}, - {"method": "HEAD", "path": "/v3/roles/{role_id}"}, - ], - ), - base.APIRule( - name="identity:list_roles", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List roles.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/roles"}, - {"method": "HEAD", "path": "/v3/roles"}, - ], - ), - base.APIRule( - name="identity:create_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create role.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/roles"}], - ), - base.APIRule( - name="identity:update_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update role.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/roles/{role_id}"}], - ), - base.APIRule( - name="identity:delete_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete role.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/roles/{role_id}"}], - ), - base.APIRule( - name="identity:get_domain_role", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show domain role.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/roles/{role_id}"}, - {"method": "HEAD", "path": "/v3/roles/{role_id}"}, - ], - ), - base.APIRule( - name="identity:list_domain_roles", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List domain roles.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/roles?domain_id={domain_id}"}, - {"method": "HEAD", "path": "/v3/roles?domain_id={domain_id}"}, - ], - ), - base.APIRule( - name="identity:create_domain_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create domain role.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/roles"}], - ), - base.APIRule( - name="identity:update_domain_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update domain role.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/roles/{role_id}"}], - ), - base.APIRule( - name="identity:delete_domain_role", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete domain role.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/roles/{role_id}"}], - ), - base.APIRule( - name="identity:list_role_assignments", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.domain_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or project_id:%(project_id)s or user_id:%(user_id)s" - ), - description="List role assignments.", - scope_types=["system", "domain"], - operations=[ - {"method": "GET", "path": "/v3/role_assignments"}, - {"method": "HEAD", "path": "/v3/role_assignments"}, - ], - ), - base.APIRule( - name="identity:list_role_assignments_for_tree", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="List all role assignments for a given tree of hierarchical projects.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/role_assignments?include_subtree"}, - {"method": "HEAD", "path": "/v3/role_assignments?include_subtree"}, - ], - ), - base.APIRule( - name="identity:get_service", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show service details.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/services/{service_id}"}], - ), - base.APIRule( - name="identity:list_services", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List services.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/v3/services"}], - ), - base.APIRule( - name="identity:create_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create service.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/v3/services"}], - ), - base.APIRule( - name="identity:update_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update service.", - scope_types=["system"], - operations=[{"method": "PATCH", "path": "/v3/services/{service_id}"}], - ), - base.APIRule( - name="identity:delete_service", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete service.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/v3/services/{service_id}"}], - ), - base.APIRule( - name="identity:create_service_provider", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create federated service provider.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/v3/OS-FEDERATION/service_providers/{service_provider_id}", - }, - ], - ), - base.APIRule( - name="identity:list_service_providers", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List federated service providers.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-FEDERATION/service_providers"}, - {"method": "HEAD", "path": "/v3/OS-FEDERATION/service_providers"}, - ], - ), - base.APIRule( - name="identity:get_service_provider", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get federated service provider.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/v3/OS-FEDERATION/service_providers/{service_provider_id}", - }, - { - "method": "HEAD", - "path": "/v3/OS-FEDERATION/service_providers/{service_provider_id}", - }, - ], - ), - base.APIRule( - name="identity:update_service_provider", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update federated service provider.", - scope_types=["system"], - operations=[ - { - "method": "PATCH", - "path": "/v3/OS-FEDERATION/service_providers/{service_provider_id}", - }, - ], - ), - base.APIRule( - name="identity:delete_service_provider", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete federated service provider.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/v3/OS-FEDERATION/service_providers/{service_provider_id}", - }, - ], - ), - base.APIRule( - name="identity:revocation_list", - check_str=("rule:service_or_admin"), - basic_check_str=("!"), - description="List revoked PKI tokens.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v3/auth/tokens/OS-PKI/revoked"}], - ), - base.APIRule( - name="identity:check_token", - check_str=("(role:reader and system_scope:all) or rule:token_subject"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Check a token.", - scope_types=["system", "domain", "project"], - operations=[{"method": "HEAD", "path": "/v3/auth/tokens"}], - ), - base.APIRule( - name="identity:validate_token", - check_str=( - "(role:reader and system_scope:all) or rule:service_role or rule:token_subject" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Validate a token.", - scope_types=["system", "domain", "project"], - operations=[{"method": "GET", "path": "/v3/auth/tokens"}], - ), - base.APIRule( - name="identity:revoke_token", - check_str=("(role:admin and system_scope:all) or rule:token_subject"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Revoke a token.", - scope_types=["system", "domain", "project"], - operations=[{"method": "DELETE", "path": "/v3/auth/tokens"}], - ), - base.APIRule( - name="identity:create_trust", - check_str=("user_id:%(trust.trustor_user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Create trust.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v3/OS-TRUST/trusts"}], - ), - base.APIRule( - name="identity:list_trusts", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List trusts.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v3/OS-TRUST/trusts"}, - {"method": "HEAD", "path": "/v3/OS-TRUST/trusts"}, - ], - ), - base.APIRule( - name="identity:list_trusts_for_trustor", - check_str=( - "role:reader and system_scope:all or user_id:%(target.trust.trustor_user_id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List trusts for trustor.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/OS-TRUST/trusts?trustor_user_id={trustor_user_id}"}, - {"method": "HEAD", "path": "/v3/OS-TRUST/trusts?trustor_user_id={trustor_user_id}"}, - ], - ), - base.APIRule( - name="identity:list_trusts_for_trustee", - check_str=( - "role:reader and system_scope:all or user_id:%(target.trust.trustee_user_id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List trusts for trustee.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/OS-TRUST/trusts?trustee_user_id={trustee_user_id}"}, - {"method": "HEAD", "path": "/v3/OS-TRUST/trusts?trustee_user_id={trustee_user_id}"}, - ], - ), - base.APIRule( - name="identity:list_roles_for_trust", - check_str=( - "role:reader and system_scope:all or user_id:%(target.trust.trustor_user_id)s or user_id:%(target.trust.trustee_user_id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List roles delegated by a trust.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/OS-TRUST/trusts/{trust_id}/roles"}, - {"method": "HEAD", "path": "/v3/OS-TRUST/trusts/{trust_id}/roles"}, - ], - ), - base.APIRule( - name="identity:get_role_for_trust", - check_str=( - "role:reader and system_scope:all or user_id:%(target.trust.trustor_user_id)s or user_id:%(target.trust.trustee_user_id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Check if trust delegates a particular role.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/OS-TRUST/trusts/{trust_id}/roles/{role_id}"}, - {"method": "HEAD", "path": "/v3/OS-TRUST/trusts/{trust_id}/roles/{role_id}"}, - ], - ), - base.APIRule( - name="identity:delete_trust", - check_str=("role:admin and system_scope:all or user_id:%(target.trust.trustor_user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Revoke trust.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/v3/OS-TRUST/trusts/{trust_id}"}], - ), - base.APIRule( - name="identity:get_trust", - check_str=( - "role:reader and system_scope:all or user_id:%(target.trust.trustor_user_id)s or user_id:%(target.trust.trustee_user_id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Get trust.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/v3/OS-TRUST/trusts/{trust_id}"}, - {"method": "HEAD", "path": "/v3/OS-TRUST/trusts/{trust_id}"}, - ], - ), - base.APIRule( - name="identity:get_user", - check_str=( - "(role:reader and system_scope:all) or (role:reader and token.domain.id:%(target.user.domain_id)s) or user_id:%(target.user.id)s" - ), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Show user details.", - scope_types=["system", "domain", "project"], - operations=[ - {"method": "GET", "path": "/v3/users/{user_id}"}, - {"method": "HEAD", "path": "/v3/users/{user_id}"}, - ], - ), - base.APIRule( - name="identity:list_users", - check_str=( - "(role:reader and system_scope:all) or (role:reader and domain_id:%(target.domain_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="List users.", - scope_types=["system", "domain"], - operations=[ - {"method": "GET", "path": "/v3/users"}, - {"method": "HEAD", "path": "/v3/users"}, - ], - ), - base.APIRule( - name="identity:list_projects_for_user", - check_str=(""), - basic_check_str=("@"), - description="List all projects a user has access to via role assignments.", - scope_types=["project"], - operations=[{"method": "GET", "path": " /v3/auth/projects"}], - ), - base.APIRule( - name="identity:list_domains_for_user", - check_str=(""), - basic_check_str=("@"), - description="List all domains a user has access to via role assignments.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v3/auth/domains"}], - ), - base.APIRule( - name="identity:create_user", - check_str=( - "(role:admin and system_scope:all) or (role:admin and token.domain.id:%(target.user.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Create a user.", - scope_types=["system", "domain"], - operations=[{"method": "POST", "path": "/v3/users"}], - ), - base.APIRule( - name="identity:update_user", - check_str=( - "(role:admin and system_scope:all) or (role:admin and token.domain.id:%(target.user.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Update a user, including administrative password resets.", - scope_types=["system", "domain"], - operations=[{"method": "PATCH", "path": "/v3/users/{user_id}"}], - ), - base.APIRule( - name="identity:delete_user", - check_str=( - "(role:admin and system_scope:all) or (role:admin and token.domain.id:%(target.user.domain_id)s)" - ), - basic_check_str=("role:admin"), - description="Delete a user.", - scope_types=["system", "domain"], - operations=[{"method": "DELETE", "path": "/v3/users/{user_id}"}], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/manila.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/manila.py deleted file mode 100644 index 4e4968f..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/manila.py +++ /dev/null @@ -1,1624 +0,0 @@ -from . import base - -list_rules = ( - base.Rule( - name="system-admin", - check_str=("role:admin and system_scope:all"), - description="System scoped Administrator", - ), - base.Rule( - name="system-member", - check_str=("role:member and system_scope:all"), - description="System scoped Member", - ), - base.Rule( - name="system-reader", - check_str=("role:reader and system_scope:all"), - description="System scoped Reader", - ), - base.Rule( - name="project-admin", - check_str=("role:admin and project_id:%(project_id)s"), - description="Project scoped Administrator", - ), - base.Rule( - name="project-member", - check_str=("role:member and project_id:%(project_id)s"), - description="Project scoped Member", - ), - base.Rule( - name="project-reader", - check_str=("role:reader and project_id:%(project_id)s"), - description="Project scoped Reader", - ), - base.Rule( - name="context_is_admin", - check_str=("rule:system-admin"), - description='Privileged users checked via "context.is_admin"', - ), - base.Rule( - name="admin_or_owner", - check_str=("is_admin:True or project_id:%(project_id)s"), - description="Administrator or Member of the project", - ), - base.Rule( - name="default", - check_str=("rule:admin_or_owner"), - description="Default rule for most non-Admin APIs", - ), - base.Rule( - name="admin_api", - check_str=("is_admin:True"), - description="Default rule for most Admin APIs.", - ), - base.APIRule( - name="manila:availability_zone:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all storage availability zones.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/os-availability-zone"}, - {"method": "GET", "path": "/availability-zone"}, - ], - ), - base.APIRule( - name="manila:scheduler_stats:pools:index", - check_str=("(role:reader and system_scope:all)"), - description="Get information regarding backends (and storage pools) known to the scheduler.", # noqa - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/scheduler-stats/pools"}, - {"method": "GET", "path": "/scheduler-stats/pools?{query}"}, - ], - ), - base.APIRule( - name="manila:scheduler_stats:pools:detail", - check_str=("(role:reader and system_scope:all)"), - description="Get detailed information regarding backends (and storage pools) known to the scheduler.", # noqa - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/scheduler-stats/pools/detail?{query}"}, - {"method": "GET", "path": "/scheduler-stats/pools/detail"}, - ], - ), - base.APIRule( - name="manila:share:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create share.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares"}], - ), - base.APIRule( - name="manila:share:create_public_share", - check_str=("(role:admin and system_scope:all)"), - description="Create shares visible across all projects in the cloud.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares"}], - ), - base.APIRule( - name="manila:share:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get share.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/shares/{share_id}"}], - ), - base.APIRule( - name="manila:share:get_all", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List shares.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/shares"}, - {"method": "GET", "path": "/shares/detail"}, - ], - ), - base.APIRule( - name="manila:share:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update share.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/shares"}], - ), - base.APIRule( - name="manila:share:set_public_share", - check_str=("(role:admin and system_scope:all)"), - description="Update shares to be visible across all projects in the cloud.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/shares"}], - ), - base.APIRule( - name="manila:share:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete share.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/shares/{share_id}"}], - ), - base.APIRule( - name="manila:share:soft_delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Soft Delete a share.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:restore", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Restore a share.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:force_delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Force Delete a share.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/shares/{share_id}"}], - ), - base.APIRule( - name="manila:share:manage", - check_str=("(role:admin and system_scope:all)"), - description="Manage share.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares/manage"}], - ), - base.APIRule( - name="manila:share:unmanage", - check_str=("(role:admin and system_scope:all)"), - description="Unmanage share.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares/unmanage"}], - ), - base.APIRule( - name="manila:share:list_by_host", - check_str=("(role:reader and system_scope:all)"), - description="List share by host.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/shares"}, - {"method": "GET", "path": "/shares/detail"}, - ], - ), - base.APIRule( - name="manila:share:list_by_share_server_id", - check_str=("(role:reader and system_scope:all)"), - description="List share by server id.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/shares"}, - {"method": "GET", "path": "/shares/detail"}, - ], - ), - base.APIRule( - name="manila:share:access_get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get share access rule, it under deny access operation.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:access_get_all", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List share access rules.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:extend", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Extend share.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:force_extend", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Force extend share.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:shrink", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Shrink share.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:migration_start", - check_str=("(role:admin and system_scope:all)"), - description="Migrate a share to the specified host.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:migration_complete", - check_str=("(role:admin and system_scope:all)"), - description="Invokes 2nd phase of share migration.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:migration_cancel", - check_str=("(role:admin and system_scope:all)"), - description="Attempts to cancel share migration.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:migration_get_progress", - check_str=("(role:reader and system_scope:all)"), - description="Retrieve share migration progress for a given share.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:reset_task_state", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset task state.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:reset_status", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset status.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:revert_to_snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Revert a share to a snapshot.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:allow_access", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Add share access rule.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:deny_access", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Remove share access rule.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/shares/{share_id}/action"}], - ), - base.APIRule( - name="manila:share:update_share_metadata", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update share metadata.", - scope_types=["system", "project"], - operations=[ - {"method": "PUT", "path": "/shares/{share_id}/metadata"}, - {"method": "POST", "path": "/shares/{share_id}/metadata/{key}"}, - {"method": "POST", "path": "/shares/{share_id}/metadata"}, - ], - ), - base.APIRule( - name="manila:share:delete_share_metadata", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete share metadata.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/shares/{share_id}/metadata/{key}"}], - ), - base.APIRule( - name="manila:share:get_share_metadata", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get share metadata.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/shares/{share_id}/metadata"}, - {"method": "GET", "path": "/shares/{share_id}/metadata/{key}"}, - ], - ), - base.APIRule( - name="manila:share:create_snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/snapshots"}], - ), - base.APIRule( - name="manila:share:delete_snapshot", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="manila:share:snapshot_update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/snapshots/{snapshot_id}/action"}], - ), - base.APIRule( - name="manila:share:update_admin_only_metadata", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description='Update metadata items that are considered "admin only" by the service.', - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/shares/{share_id}/metadata"}], - ), - base.APIRule( - name="manila:share_instance_export_location:index", - check_str=("(role:reader and system_scope:all)"), - description="Return data about the requested export location.", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/share_instances/{share_instance_id}/export_locations"}, - ], - ), - base.APIRule( - name="manila:share_instance_export_location:show", - check_str=("(role:reader and system_scope:all)"), - description="Return data about the requested export location.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/share_instances/{share_instance_id}/export_locations/{export_location_id}", # noqa - }, - ], - ), - base.APIRule( - name="manila:share_type:create", - check_str=("(role:admin and system_scope:all)"), - description="Create share type.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/types"}], - ), - base.APIRule( - name="manila:share_type:update", - check_str=("(role:admin and system_scope:all)"), - description="Update share type.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/types/{share_type_id}"}], - ), - base.APIRule( - name="manila:share_type:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get share type.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/types/{share_type_id}"}], - ), - base.APIRule( - name="manila:share_type:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List share types.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/types"}, - {"method": "GET", "path": "/types?is_public=all"}, - ], - ), - base.APIRule( - name="manila:share_type:default", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get default share type.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/types/default"}], - ), - base.APIRule( - name="manila:share_type:delete", - check_str=("(role:admin and system_scope:all)"), - description="Delete share type.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/types/{share_type_id}"}], - ), - base.APIRule( - name="manila:share_type:list_project_access", - check_str=("(role:reader and system_scope:all)"), - description="List share type project access.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/types/{share_type_id}"}], - ), - base.APIRule( - name="manila:share_type:add_project_access", - check_str=("(role:admin and system_scope:all)"), - description="Add share type to project.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/types/{share_type_id}/action"}], - ), - base.APIRule( - name="manila:share_type:remove_project_access", - check_str=("(role:admin and system_scope:all)"), - description="Remove share type from project.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/types/{share_type_id}/action"}], - ), - base.APIRule( - name="manila:share_types_extra_spec:create", - check_str=("(role:admin and system_scope:all)"), - description="Create share type extra spec.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/types/{share_type_id}/extra_specs"}], - ), - base.APIRule( - name="manila:share_types_extra_spec:show", - check_str=("(role:reader and system_scope:all)"), - description="Get share type extra specs of a given share type.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/types/{share_type_id}/extra_specs"}], - ), - base.APIRule( - name="manila:share_types_extra_spec:index", - check_str=("(role:reader and system_scope:all)"), - description="Get details of a share type extra spec.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/types/{share_type_id}/extra_specs/{extra_spec_id}"}, - ], - ), - base.APIRule( - name="manila:share_types_extra_spec:update", - check_str=("(role:admin and system_scope:all)"), - description="Update share type extra spec.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/types/{share_type_id}/extra_specs"}], - ), - base.APIRule( - name="manila:share_types_extra_spec:delete", - check_str=("(role:admin and system_scope:all)"), - description="Delete share type extra spec.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/types/{share_type_id}/extra_specs/{key}"}], - ), - base.APIRule( - name="manila:share_snapshot:get_snapshot", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="manila:share_snapshot:get_all_snapshots", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all share snapshots.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/snapshots"}, - {"method": "GET", "path": "/snapshots/detail"}, - {"method": "GET", "path": "/snapshots?{query}"}, - {"method": "GET", "path": "/snapshots/detail?{query}"}, - ], - ), - base.APIRule( - name="manila:share_snapshot:force_delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Force Delete a share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="manila:share_snapshot:manage_snapshot", - check_str=("(role:admin and system_scope:all)"), - description="Manage share snapshot.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/snapshots/manage"}], - ), - base.APIRule( - name="manila:share_snapshot:unmanage_snapshot", - check_str=("(role:admin and system_scope:all)"), - description="Unmanage share snapshot.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/snapshots/{snapshot_id}/action"}], - ), - base.APIRule( - name="manila:share_snapshot:reset_status", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset status.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/snapshots/{snapshot_id}/action"}], - ), - base.APIRule( - name="manila:share_snapshot:access_list", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List access rules of a share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/snapshots/{snapshot_id}/access-list"}], - ), - base.APIRule( - name="manila:share_snapshot:allow_access", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Allow access to a share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/snapshots/{snapshot_id}/action"}], - ), - base.APIRule( - name="manila:share_snapshot:deny_access", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Deny access to a share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/snapshots/{snapshot_id}/action"}], - ), - base.APIRule( - name="manila:share_snapshot_export_location:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List export locations of a share snapshot.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/snapshots/{snapshot_id}/export-locations/"}], - ), - base.APIRule( - name="manila:share_snapshot_export_location:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a specified export location of a share snapshot.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/snapshots/{snapshot_id}/export-locations/{export_location_id}", - }, - ], - ), - base.APIRule( - name="manila:share_snapshot_instance:show", - check_str=("(role:reader and system_scope:all)"), - description="Get share snapshot instance.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/snapshot-instances/{snapshot_instance_id}"}], - ), - base.APIRule( - name="manila:share_snapshot_instance:index", - check_str=("(role:reader and system_scope:all)"), - description="Get all share snapshot instances.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/snapshot-instances"}, - {"method": "GET", "path": "/snapshot-instances?{query}"}, - ], - ), - base.APIRule( - name="manila:share_snapshot_instance:detail", - check_str=("(role:reader and system_scope:all)"), - description="Get details of share snapshot instances.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/snapshot-instances/detail"}, - {"method": "GET", "path": "/snapshot-instances/detail?{query}"}, - ], - ), - base.APIRule( - name="manila:share_snapshot_instance:reset_status", - check_str=("(role:admin and system_scope:all)"), - description="Reset share snapshot instance's status.", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/snapshot-instances/{snapshot_instance_id}/action"}, - ], - ), - base.APIRule( - name="manila:share_snapshot_instance_export_location:index", - check_str=("(role:reader and system_scope:all)"), - description="List export locations of a share snapshot instance.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/snapshot-instances/{snapshot_instance_id}/export-locations", - }, - ], - ), - base.APIRule( - name="manila:share_snapshot_instance_export_location:show", - check_str=("(role:reader and system_scope:all)"), - description="Show details of a specified export location of a share snapshot instance.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/snapshot-instances/{snapshot_instance_id}/export-locations/{export_location_id}", # noqa - }, - ], - ), - base.APIRule( - name="manila:share_server:index", - check_str=("(role:reader and system_scope:all)"), - description="Get share servers.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/share-servers"}, - {"method": "GET", "path": "/share-servers?{query}"}, - ], - ), - base.APIRule( - name="manila:share_server:show", - check_str=("(role:reader and system_scope:all)"), - description="Show share server.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/share-servers/{server_id}"}], - ), - base.APIRule( - name="manila:share_server:details", - check_str=("(role:reader and system_scope:all)"), - description="Get share server details.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/share-servers/{server_id}/details"}], - ), - base.APIRule( - name="manila:share_server:delete", - check_str=("(role:admin and system_scope:all)"), - description="Delete share server.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/share-servers/{server_id}"}], - ), - base.APIRule( - name="manila:share_server:manage_share_server", - check_str=("(role:admin and system_scope:all)"), - description="Manage share server.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/manage"}], - ), - base.APIRule( - name="manila:share_server:unmanage_share_server", - check_str=("(role:admin and system_scope:all)"), - description="Unmanage share server.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:reset_status", - check_str=("(role:admin and system_scope:all)"), - description="Reset the status of a share server.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:share_server_migration_start", - check_str=("(role:admin and system_scope:all)"), - description="Migrates a share server to the specified host.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:share_server_migration_check", - check_str=("(role:reader and system_scope:all)"), - description="Check if can migrates a share server to the specified host.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:share_server_migration_complete", - check_str=("(role:admin and system_scope:all)"), - description="Invokes the 2nd phase of share server migration.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:share_server_migration_cancel", - check_str=("(role:admin and system_scope:all)"), - description="Attempts to cancel share server migration.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:share_server_migration_get_progress", - check_str=("(role:reader and system_scope:all)"), - description="Retrieves the share server migration progress for a given share server.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:share_server:share_server_reset_task_state", - check_str=("(role:admin and system_scope:all)"), - description="Resets task state.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-servers/{share_server_id}/action"}], - ), - base.APIRule( - name="manila:service:index", - check_str=("(role:reader and system_scope:all)"), - description="Return a list of all running services.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/os-services"}, - {"method": "GET", "path": "/os-services?{query}"}, - {"method": "GET", "path": "/services"}, - {"method": "GET", "path": "/services?{query}"}, - ], - ), - base.APIRule( - name="manila:service:update", - check_str=("(role:admin and system_scope:all)"), - description="Enable/Disable scheduling for a service.", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/os-services/disable"}, - {"method": "PUT", "path": "/os-services/enable"}, - {"method": "PUT", "path": "/services/disable"}, - {"method": "PUT", "path": "/services/enable"}, - ], - ), - base.APIRule( - name="manila:quota_set:update", - check_str=("(role:admin and system_scope:all)"), - description="Update the quotas for a project/user and/or share type.", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/quota-sets/{tenant_id}"}, - {"method": "PUT", "path": "/quota-sets/{tenant_id}?user_id={user_id}"}, - {"method": "PUT", "path": "/quota-sets/{tenant_id}?share_type={share_type_id}"}, - {"method": "PUT", "path": "/os-quota-sets/{tenant_id}"}, - {"method": "PUT", "path": "/os-quota-sets/{tenant_id}?user_id={user_id}"}, - ], - ), - base.APIRule( - name="manila:quota_set:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List the quotas for a tenant/user.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/quota-sets/{tenant_id}/defaults"}, - {"method": "GET", "path": "/os-quota-sets/{tenant_id}/defaults"}, - ], - ), - base.APIRule( - name="manila:quota_set:delete", - check_str=("(role:admin and system_scope:all)"), - description="Delete quota for a tenant/user or tenant/share-type. The quota will revert back to default (Admin only).", # noqa - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/quota-sets/{tenant_id}"}, - {"method": "DELETE", "path": "/quota-sets/{tenant_id}?user_id={user_id}"}, - {"method": "DELETE", "path": "/quota-sets/{tenant_id}?share_type={share_type_id}"}, - {"method": "DELETE", "path": "/os-quota-sets/{tenant_id}"}, - {"method": "DELETE", "path": "/os-quota-sets/{tenant_id}?user_id={user_id}"}, - ], - ), - base.APIRule( - name="manila:quota_class_set:update", - check_str=("(role:admin and system_scope:all)"), - description="Update quota class.", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/quota-class-sets/{class_name}"}, - {"method": "PUT", "path": "/os-quota-class-sets/{class_name}"}, - ], - ), - base.APIRule( - name="manila:quota_class_set:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get quota class.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/quota-class-sets/{class_name}"}, - {"method": "GET", "path": "/os-quota-class-sets/{class_name}"}, - ], - ), - base.APIRule( - name="manila:share_group_types_spec:create", - check_str=("(role:admin and system_scope:all)"), - description="Create share group type specs.", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/share-group-types/{share_group_type_id}/group-specs"}, - ], - ), - base.APIRule( - name="manila:share_group_types_spec:index", - check_str=("(role:reader and system_scope:all)"), - description="Get share group type specs.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/share-group-types/{share_group_type_id}/group-specs"}, - ], - ), - base.APIRule( - name="manila:share_group_types_spec:show", - check_str=("(role:reader and system_scope:all)"), - description="Get details of a share group type spec.", - scope_types=["system"], - operations=[ - { - "method": "GET", - "path": "/share-group-types/{share_group_type_id}/group-specs/{key}", - }, - ], - ), - base.APIRule( - name="manila:share_group_types_spec:update", - check_str=("(role:admin and system_scope:all)"), - description="Update a share group type spec.", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/share-group-types/{share_group_type_id}/group-specs/{key}", - }, - ], - ), - base.APIRule( - name="manila:share_group_types_spec:delete", - check_str=("(role:admin and system_scope:all)"), - description="Delete a share group type spec.", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/share-group-types/{share_group_type_id}/group-specs/{key}", - }, - ], - ), - base.APIRule( - name="manila:share_group_type:create", - check_str=("(role:admin and system_scope:all)"), - description="Create a new share group type.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share-group-types"}], - ), - base.APIRule( - name="manila:share_group_type:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get the list of share group types.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-group-types"}, - {"method": "GET", "path": "/share-group-types?is_public=all"}, - ], - ), - base.APIRule( - name="manila:share_group_type:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details regarding the specified share group type.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-group-types/{share_group_type_id}"}], - ), - base.APIRule( - name="manila:share_group_type:default", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get the default share group type.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-group-types/default"}], - ), - base.APIRule( - name="manila:share_group_type:delete", - check_str=("(role:admin and system_scope:all)"), - description="Delete an existing group type.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/share-group-types/{share_group_type_id}"}], - ), - base.APIRule( - name="manila:share_group_type:list_project_access", - check_str=("(role:reader and system_scope:all)"), - description="Get project access by share group type.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/share-group-types/{share_group_type_id}/access"}], - ), - base.APIRule( - name="manila:share_group_type:add_project_access", - check_str=("(role:admin and system_scope:all)"), - description="Allow project to use the share group type.", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/share-group-types/{share_group_type_id}/action"}, - ], - ), - base.APIRule( - name="manila:share_group_type:remove_project_access", - check_str=("(role:admin and system_scope:all)"), - description="Deny project access to use the share group type.", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/share-group-types/{share_group_type_id}/action"}, - ], - ), - base.APIRule( - name="manila:share_group_snapshot:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create a new share group snapshot.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-group-snapshots"}], - ), - base.APIRule( - name="manila:share_group_snapshot:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a share group snapshot.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-group-snapshots/{share_group_snapshot_id}"}, - ], - ), - base.APIRule( - name="manila:share_group_snapshot:get_all", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all share group snapshots.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-group-snapshots"}, - {"method": "GET", "path": "/share-group-snapshots/detail"}, - {"method": "GET", "path": "/share-group-snapshots/{query}"}, - {"method": "GET", "path": "/share-group-snapshots/detail?{query}"}, - ], - ), - base.APIRule( - name="manila:share_group_snapshot:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update a share group snapshot.", - scope_types=["system", "project"], - operations=[ - {"method": "PUT", "path": "/share-group-snapshots/{share_group_snapshot_id}"}, - ], - ), - base.APIRule( - name="manila:share_group_snapshot:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete a share group snapshot.", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/share-group-snapshots/{share_group_snapshot_id}"}, - ], - ), - base.APIRule( - name="manila:share_group_snapshot:force_delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Force delete a share group snapshot.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/share-group-snapshots/{share_group_snapshot_id}/action"}, - ], - ), - base.APIRule( - name="manila:share_group_snapshot:reset_status", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset a share group snapshot's status.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/share-group-snapshots/{share_group_snapshot_id}/action"}, - ], - ), - base.APIRule( - name="manila:share_group:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create share group.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-groups"}], - ), - base.APIRule( - name="manila:share_group:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a share group.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-groups/{share_group_id}"}], - ), - base.APIRule( - name="manila:share_group:get_all", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all share groups.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-groups"}, - {"method": "GET", "path": "/share-groups/detail"}, - {"method": "GET", "path": "/share-groups?{query}"}, - {"method": "GET", "path": "/share-groups/detail?{query}"}, - ], - ), - base.APIRule( - name="manila:share_group:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update share group.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/share-groups/{share_group_id}"}], - ), - base.APIRule( - name="manila:share_group:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete share group.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/share-groups/{share_group_id}"}], - ), - base.APIRule( - name="manila:share_group:force_delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Force delete a share group.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-groups/{share_group_id}/action"}], - ), - base.APIRule( - name="manila:share_group:reset_status", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset share group's status.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-groups/{share_group_id}/action"}], - ), - base.APIRule( - name="manila:share_replica:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create share replica.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-replicas"}], - ), - base.APIRule( - name="manila:share_replica:get_all", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all share replicas.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-replicas"}, - {"method": "GET", "path": "/share-replicas/detail"}, - {"method": "GET", "path": "/share-replicas/detail?share_id={share_id}"}, - ], - ), - base.APIRule( - name="manila:share_replica:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a share replica.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-replicas/{share_replica_id}"}], - ), - base.APIRule( - name="manila:share_replica:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete a share replica.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/share-replicas/{share_replica_id}"}], - ), - base.APIRule( - name="manila:share_replica:force_delete", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Force delete a share replica.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-replicas/{share_replica_id}/action"}], - ), - base.APIRule( - name="manila:share_replica:promote", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Promote a non-active share replica to active.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-replicas/{share_replica_id}/action"}], - ), - base.APIRule( - name="manila:share_replica:resync", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Resync a share replica that is out of sync.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-replicas/{share_replica_id}/action"}], - ), - base.APIRule( - name="manila:share_replica:reset_replica_state", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset share replica's replica_state attribute.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-replicas/{share_replica_id}/action"}], - ), - base.APIRule( - name="manila:share_replica:reset_status", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset share replica's status.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-replicas/{share_replica_id}/action"}], - ), - base.APIRule( - name="manila:share_replica_export_location:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all export locations of a given share replica.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-replicas/{share_replica_id}/export-locations"}, - ], - ), - base.APIRule( - name="manila:share_replica_export_location:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details about the requested share replica export location.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/share-replicas/{share_replica_id}/export-locations/{export_location_id}", - }, - ], - ), - base.APIRule( - name="manila:share_network:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create share network.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks"}], - ), - base.APIRule( - name="manila:share_network:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a share network.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-networks/{share_network_id}"}], - ), - base.APIRule( - name="manila:share_network:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all share networks.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-networks"}, - {"method": "GET", "path": "/share-networks?{query}"}, - ], - ), - base.APIRule( - name="manila:share_network:detail", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of share networks .", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/share-networks/detail?{query}"}, - {"method": "GET", "path": "/share-networks/detail"}, - ], - ), - base.APIRule( - name="manila:share_network:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update a share network.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/share-networks/{share_network_id}"}], - ), - base.APIRule( - name="manila:share_network:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete a share network.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/share-networks/{share_network_id}"}], - ), - base.APIRule( - name="manila:share_network:add_security_service", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Add security service to share network.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network:add_security_service_check", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Check the feasibility of add security service to a share network.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network:remove_security_service", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Remove security service from share network.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network:update_security_service", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update security service from share network.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network:update_security_service_check", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Check the feasibility of update a security service from share network.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network:reset_status", - check_str=( - "(role:admin and system_scope:all) or (role:admin and project_id:%(project_id)s)" - ), - description="Reset share network`s status.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network:get_all_share_networks", - check_str=("(role:reader and system_scope:all)"), - description="Get share networks belonging to all projects.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/share-networks?all_tenants=1"}, - {"method": "GET", "path": "/share-networks/detail?all_tenants=1"}, - ], - ), - base.APIRule( - name="manila:share_network:subnet_create_check", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Check the feasibility of create a new share network subnet for share network.", # noqa - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/action"}], - ), - base.APIRule( - name="manila:share_network_subnet:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create a new share network subnet.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/share-networks/{share_network_id}/subnets"}], - ), - base.APIRule( - name="manila:share_network_subnet:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete a share network subnet.", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/share-networks/{share_network_id}/subnets/{share_network_subnet_id}", - }, - ], - ), - base.APIRule( - name="manila:share_network_subnet:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Shows a share network subnet.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/share-networks/{share_network_id}/subnets/{share_network_subnet_id}", - }, - ], - ), - base.APIRule( - name="manila:share_network_subnet:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all share network subnets.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-networks/{share_network_id}/subnets"}], - ), - base.APIRule( - name="manila:security_service:create", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Create security service.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/security-services"}], - ), - base.APIRule( - name="manila:security_service:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a security service.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/security-services/{security_service_id}"}], - ), - base.APIRule( - name="manila:security_service:detail", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of all security services.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/security-services/detail?{query}"}, - {"method": "GET", "path": "/security-services/detail"}, - ], - ), - base.APIRule( - name="manila:security_service:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all security services.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/security-services"}, - {"method": "GET", "path": "/security-services?{query}"}, - ], - ), - base.APIRule( - name="manila:security_service:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Update a security service.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/security-services/{security_service_id}"}], - ), - base.APIRule( - name="manila:security_service:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete a security service.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/security-services/{security_service_id}"}], - ), - base.APIRule( - name="manila:security_service:get_all_security_services", - check_str=("(role:reader and system_scope:all)"), - description="Get security services of all projects.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/security-services?all_tenants=1"}, - {"method": "GET", "path": "/security-services/detail?all_tenants=1"}, - ], - ), - base.APIRule( - name="manila:share_export_location:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all export locations of a given share.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/shares/{share_id}/export_locations"}], - ), - base.APIRule( - name="manila:share_export_location:show", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details about the requested export location.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/shares/{share_id}/export_locations/{export_location_id}"}, - ], - ), - base.APIRule( - name="manila:share_instance:index", - check_str=("(role:reader and system_scope:all)"), - description="Get all share instances.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/share_instances"}, - {"method": "GET", "path": "/share_instances?{query}"}, - ], - ), - base.APIRule( - name="manila:share_instance:show", - check_str=("(role:reader and system_scope:all)"), - description="Get details of a share instance.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/share_instances/{share_instance_id}"}], - ), - base.APIRule( - name="manila:share_instance:force_delete", - check_str=("(role:admin and system_scope:all)"), - description="Force delete a share instance.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share_instances/{share_instance_id}/action"}], - ), - base.APIRule( - name="manila:share_instance:reset_status", - check_str=("(role:admin and system_scope:all)"), - description="Reset share instance's status.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/share_instances/{share_instance_id}/action"}], - ), - base.APIRule( - name="manila:message:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a given message.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/messages/{message_id}"}], - ), - base.APIRule( - name="manila:message:get_all", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get all messages.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/messages"}, - {"method": "GET", "path": "/messages?{query}"}, - ], - ), - base.APIRule( - name="manila:message:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete a message.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/messages/{message_id}"}], - ), - base.APIRule( - name="manila:share_access_rule:get", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get details of a share access rule.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/share-access-rules/{share_access_id}"}], - ), - base.APIRule( - name="manila:share_access_rule:index", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="List access rules of a given share.", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/share-access-rules?share_id={share_id}&key1=value1&key2=value2", - }, - ], - ), - base.APIRule( - name="manila:share_access_metadata:update", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Set metadata for a share access rule.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/share-access-rules/{share_access_id}/metadata"}], - ), - base.APIRule( - name="manila:share_access_metadata:delete", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - description="Delete metadata for a share access rule.", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/share-access-rules/{share_access_id}/metadata/{key}"}, - ], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/neutron.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/neutron.py deleted file mode 100644 index 24c0382..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/neutron.py +++ /dev/null @@ -1,2634 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="context_is_admin", - check_str=("role:admin"), - description="Rule for cloud admin access", - ), - base.Rule( - name="owner", - check_str=("tenant_id:%(tenant_id)s"), - description="Rule for resource owner access", - ), - base.Rule( - name="admin_or_owner", - check_str=("rule:context_is_admin or rule:owner"), - description="Rule for admin or owner access", - ), - base.Rule( - name="context_is_advsvc", - check_str=("role:advsvc"), - description="Rule for advsvc role access", - ), - base.Rule( - name="admin_or_network_owner", - check_str=("rule:context_is_admin or tenant_id:%(network:tenant_id)s"), - description="Rule for admin or network owner access", - ), - base.Rule( - name="admin_owner_or_network_owner", - check_str=("rule:owner or rule:admin_or_network_owner"), - description="Rule for resource owner, admin or network owner access", - ), - base.Rule( - name="network_owner", - check_str=("tenant_id:%(network:tenant_id)s"), - description="Rule for network owner access", - ), - base.Rule( - name="admin_only", - check_str=("rule:context_is_admin"), - description="Rule for admin-only access", - ), - base.Rule( - name="regular_user", - check_str=(""), - description="Rule for regular user access", - ), - base.Rule( - name="shared", - check_str=("field:networks:shared=True"), - description="Rule of shared network", - ), - base.Rule( - name="default", - check_str=("rule:admin_or_owner"), - description="Default access rule", - ), - base.Rule( - name="admin_or_ext_parent_owner", - check_str=("rule:context_is_admin or tenant_id:%(ext_parent:tenant_id)s"), - description="Rule for common parent owner check", - ), - base.Rule( - name="ext_parent_owner", - check_str=("tenant_id:%(ext_parent:tenant_id)s"), - description="Rule for common parent owner check", - ), - base.Rule( - name="sg_owner", - check_str=("tenant_id:%(security_group:tenant_id)s"), - description="Rule for security group owner access", - ), - base.Rule( - name="shared_address_groups", - check_str=("field:address_groups:shared=True"), - description="Definition of a shared address group", - ), - base.Rule( - name="shared_address_scopes", - check_str=("field:address_scopes:shared=True"), - description="Definition of a shared address scope", - ), - base.Rule( - name="get_flavor_service_profile", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - description="Get a flavor associated with a given service profiles. There is no corresponding GET operations in API currently. This rule is currently referred only in the DELETE of flavor_service_profile.", - ), - base.Rule( - name="external", - check_str=("field:networks:router:external=True"), - description="Definition of an external network", - ), - base.Rule( - name="network_device", - check_str=("field:port:device_owner=~^network:"), - description="Definition of port with network device_owner", - ), - base.Rule( - name="admin_or_data_plane_int", - check_str=("rule:context_is_admin or role:data_plane_integrator"), - description="Rule for data plane integration", - ), - base.Rule( - name="restrict_wildcard", - check_str=("(not field:rbac_policy:target_tenant=*) or rule:admin_only"), - description="Definition of a wildcard target_tenant", - ), - base.Rule( - name="admin_or_sg_owner", - check_str=("rule:context_is_admin or tenant_id:%(security_group:tenant_id)s"), - description="Rule for admin or security group owner access", - ), - base.Rule( - name="admin_owner_or_sg_owner", - check_str=("rule:owner or rule:admin_or_sg_owner"), - description="Rule for resource owner, admin or security group owner access", - ), - base.Rule( - name="shared_subnetpools", - check_str=("field:subnetpools:shared=True"), - description="Definition of a shared subnetpool", - ), - base.APIRule( - name="get_address_group", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:shared_address_groups" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get an address group", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/address-groups"}, - {"method": "GET", "path": "/address-groups/{id}"}, - ], - ), - base.APIRule( - name="create_address_scope", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create an address scope", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/address-scopes"}], - ), - base.APIRule( - name="create_address_scope:shared", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a shared address scope", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/address-scopes"}], - ), - base.APIRule( - name="get_address_scope", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:shared_address_scopes" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get an address scope", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/address-scopes"}, - {"method": "GET", "path": "/address-scopes/{id}"}, - ], - ), - base.APIRule( - name="update_address_scope", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update an address scope", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/address-scopes/{id}"}], - ), - base.APIRule( - name="update_address_scope:shared", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``shared`` attribute of an address scope", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/address-scopes/{id}"}], - ), - base.APIRule( - name="delete_address_scope", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete an address scope", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/address-scopes/{id}"}], - ), - base.APIRule( - name="get_agent", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get an agent", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/agents"}, - {"method": "GET", "path": "/agents/{id}"}, - ], - ), - base.APIRule( - name="update_agent", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update an agent", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/agents/{id}"}], - ), - base.APIRule( - name="delete_agent", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete an agent", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/agents/{id}"}], - ), - base.APIRule( - name="create_dhcp-network", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Add a network to a DHCP agent", - scope_types=["system"], - operations=[{"method": "POST", "path": "/agents/{agent_id}/dhcp-networks"}], - ), - base.APIRule( - name="get_dhcp-networks", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List networks on a DHCP agent", - scope_types=["system"], - operations=[{"method": "GET", "path": "/agents/{agent_id}/dhcp-networks"}], - ), - base.APIRule( - name="delete_dhcp-network", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Remove a network from a DHCP agent", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/agents/{agent_id}/dhcp-networks/{network_id}"}, - ], - ), - base.APIRule( - name="create_l3-router", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Add a router to an L3 agent", - scope_types=["system"], - operations=[{"method": "POST", "path": "/agents/{agent_id}/l3-routers"}], - ), - base.APIRule( - name="get_l3-routers", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List routers on an L3 agent", - scope_types=["system"], - operations=[{"method": "GET", "path": "/agents/{agent_id}/l3-routers"}], - ), - base.APIRule( - name="delete_l3-router", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Remove a router from an L3 agent", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/agents/{agent_id}/l3-routers/{router_id}"}], - ), - base.APIRule( - name="get_dhcp-agents", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List DHCP agents hosting a network", - scope_types=["system"], - operations=[{"method": "GET", "path": "/networks/{network_id}/dhcp-agents"}], - ), - base.APIRule( - name="get_l3-agents", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List L3 agents hosting a router", - scope_types=["system"], - operations=[{"method": "GET", "path": "/routers/{router_id}/l3-agents"}], - ), - base.APIRule( - name="get_auto_allocated_topology", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a project's auto-allocated topology", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/auto-allocated-topology/{project_id}"}], - ), - base.APIRule( - name="delete_auto_allocated_topology", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a project's auto-allocated topology", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/auto-allocated-topology/{project_id}"}], - ), - base.APIRule( - name="get_availability_zone", - check_str=("role:reader and system_scope:all"), - basic_check_str=("@"), - description="List availability zones", - scope_types=["system"], - operations=[{"method": "GET", "path": "/availability_zones"}], - ), - base.APIRule( - name="create_flavor", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a flavor", - scope_types=["system"], - operations=[{"method": "POST", "path": "/flavors"}], - ), - base.APIRule( - name="get_flavor", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a flavor", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/flavors"}, - {"method": "GET", "path": "/flavors/{id}"}, - ], - ), - base.APIRule( - name="update_flavor", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a flavor", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/flavors/{id}"}], - ), - base.APIRule( - name="delete_flavor", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a flavor", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/flavors/{id}"}], - ), - base.APIRule( - name="create_service_profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a service profile", - scope_types=["system"], - operations=[{"method": "POST", "path": "/service_profiles"}], - ), - base.APIRule( - name="get_service_profile", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a service profile", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/service_profiles"}, - {"method": "GET", "path": "/service_profiles/{id}"}, - ], - ), - base.APIRule( - name="update_service_profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a service profile", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/service_profiles/{id}"}], - ), - base.APIRule( - name="delete_service_profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a service profile", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/service_profiles/{id}"}], - ), - base.APIRule( - name="create_flavor_service_profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Associate a flavor with a service profile", - scope_types=["system"], - operations=[{"method": "POST", "path": "/flavors/{flavor_id}/service_profiles"}], - ), - base.APIRule( - name="delete_flavor_service_profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Disassociate a flavor with a service profile", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/flavors/{flavor_id}/service_profiles/{profile_id}"}, - ], - ), - base.APIRule( - name="create_floatingip", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a floating IP", - scope_types=["project"], - operations=[{"method": "POST", "path": "/floatingips"}], - ), - base.APIRule( - name="create_floatingip:floating_ip_address", - check_str=("role:admin and system_scope:all"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a floating IP with a specific IP address", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/floatingips"}], - ), - base.APIRule( - name="get_floatingip", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a floating IP", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/floatingips"}, - {"method": "GET", "path": "/floatingips/{id}"}, - ], - ), - base.APIRule( - name="update_floatingip", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a floating IP", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/floatingips/{id}"}], - ), - base.APIRule( - name="delete_floatingip", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a floating IP", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/floatingips/{id}"}], - ), - base.APIRule( - name="get_floatingip_pool", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get floating IP pools", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/floatingip_pools"}], - ), - base.APIRule( - name="create_floatingip_port_forwarding", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a floating IP port forwarding", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/floatingips/{floatingip_id}/port_forwardings"}], - ), - base.APIRule( - name="get_floatingip_port_forwarding", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a floating IP port forwarding", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/floatingips/{floatingip_id}/port_forwardings"}, - { - "method": "GET", - "path": "/floatingips/{floatingip_id}/port_forwardings/{port_forwarding_id}", - }, - ], - ), - base.APIRule( - name="update_floatingip_port_forwarding", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a floating IP port forwarding", - scope_types=["system", "project"], - operations=[ - { - "method": "PUT", - "path": "/floatingips/{floatingip_id}/port_forwardings/{port_forwarding_id}", - }, - ], - ), - base.APIRule( - name="delete_floatingip_port_forwarding", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a floating IP port forwarding", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/floatingips/{floatingip_id}/port_forwardings/{port_forwarding_id}", - }, - ], - ), - base.APIRule( - name="create_router_conntrack_helper", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a router conntrack helper", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/routers/{router_id}/conntrack_helpers"}], - ), - base.APIRule( - name="get_router_conntrack_helper", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a router conntrack helper", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/routers/{router_id}/conntrack_helpers"}, - { - "method": "GET", - "path": "/routers/{router_id}/conntrack_helpers/{conntrack_helper_id}", - }, - ], - ), - base.APIRule( - name="update_router_conntrack_helper", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a router conntrack helper", - scope_types=["system", "project"], - operations=[ - { - "method": "PUT", - "path": "/routers/{router_id}/conntrack_helpers/{conntrack_helper_id}", - }, - ], - ), - base.APIRule( - name="delete_router_conntrack_helper", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:ext_parent_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a router conntrack helper", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/routers/{router_id}/conntrack_helpers/{conntrack_helper_id}", - }, - ], - ), - base.APIRule( - name="get_loggable_resource", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get loggable resources", - scope_types=["system"], - operations=[{"method": "GET", "path": "/log/loggable-resources"}], - ), - base.APIRule( - name="create_log", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a network log", - scope_types=["system"], - operations=[{"method": "POST", "path": "/log/logs"}], - ), - base.APIRule( - name="get_log", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a network log", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/log/logs"}, - {"method": "GET", "path": "/log/logs/{id}"}, - ], - ), - base.APIRule( - name="update_log", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a network log", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/log/logs/{id}"}], - ), - base.APIRule( - name="delete_log", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a network log", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/log/logs/{id}"}], - ), - base.APIRule( - name="create_metering_label", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a metering label", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/metering/metering-labels"}], - ), - base.APIRule( - name="get_metering_label", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a metering label", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/metering/metering-labels"}, - {"method": "GET", "path": "/metering/metering-labels/{id}"}, - ], - ), - base.APIRule( - name="delete_metering_label", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a metering label", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/metering/metering-labels/{id}"}], - ), - base.APIRule( - name="create_metering_label_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a metering label rule", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/metering/metering-label-rules"}], - ), - base.APIRule( - name="get_metering_label_rule", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a metering label rule", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/metering/metering-label-rules"}, - {"method": "GET", "path": "/metering/metering-label-rules/{id}"}, - ], - ), - base.APIRule( - name="delete_metering_label_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a metering label rule", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/metering/metering-label-rules/{id}"}], - ), - base.APIRule( - name="create_network", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a network", - scope_types=["project"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:shared", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a shared network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:router:external", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create an external network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:is_default", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``is_default`` attribute when creating a network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:port_security_enabled", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``port_security_enabled`` attribute when creating a network", - scope_types=["project"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:segments", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``segments`` attribute when creating a network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:provider:network_type", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``provider:network_type`` when creating a network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:provider:physical_network", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``provider:physical_network`` when creating a network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="create_network:provider:segmentation_id", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``provider:segmentation_id`` when creating a network", - scope_types=["system"], - operations=[{"method": "POST", "path": "/networks"}], - ), - base.APIRule( - name="get_network", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:shared or rule:external or rule:context_is_advsvc" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a network", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/networks"}, - {"method": "GET", "path": "/networks/{id}"}, - ], - ), - base.APIRule( - name="get_network:router:external", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="Get ``router:external`` attribute of a network", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/networks"}, - {"method": "GET", "path": "/networks/{id}"}, - ], - ), - base.APIRule( - name="get_network:segments", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``segments`` attribute of a network", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/networks"}, - {"method": "GET", "path": "/networks/{id}"}, - ], - ), - base.APIRule( - name="get_network:provider:network_type", - check_str=("role:reader and system_scope:all"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get ``provider:network_type`` attribute of a network", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/networks"}, - {"method": "GET", "path": "/networks/{id}"}, - ], - ), - base.APIRule( - name="get_network:provider:physical_network", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``provider:physical_network`` attribute of a network", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/networks"}, - {"method": "GET", "path": "/networks/{id}"}, - ], - ), - base.APIRule( - name="get_network:provider:segmentation_id", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``provider:segmentation_id`` attribute of a network", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/networks"}, - {"method": "GET", "path": "/networks/{id}"}, - ], - ), - base.APIRule( - name="update_network", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a network", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:segments", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``segments`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:shared", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``shared`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:provider:network_type", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``provider:network_type`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:provider:physical_network", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``provider:physical_network`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:provider:segmentation_id", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``provider:segmentation_id`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:router:external", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``router:external`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:is_default", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``is_default`` attribute of a network", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="update_network:port_security_enabled", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``port_security_enabled`` attribute of a network", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/networks/{id}"}], - ), - base.APIRule( - name="delete_network", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a network", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/networks/{id}"}], - ), - base.APIRule( - name="get_network_ip_availability", - check_str=("role:reader and system_scope:all"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get network IP availability", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/network-ip-availabilities"}, - {"method": "GET", "path": "/network-ip-availabilities/{network_id}"}, - ], - ), - base.APIRule( - name="create_network_segment_range", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a network segment range", - scope_types=["system"], - operations=[{"method": "POST", "path": "/network_segment_ranges"}], - ), - base.APIRule( - name="get_network_segment_range", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a network segment range", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/network_segment_ranges"}, - {"method": "GET", "path": "/network_segment_ranges/{id}"}, - ], - ), - base.APIRule( - name="update_network_segment_range", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a network segment range", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/network_segment_ranges/{id}"}], - ), - base.APIRule( - name="delete_network_segment_range", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a network segment range", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/network_segment_ranges/{id}"}], - ), - base.APIRule( - name="create_port", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:device_owner", - check_str=( - "not rule:network_device or role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:context_is_advsvc or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``device_owner`` attribute when creting a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:mac_address", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``mac_address`` attribute when creating a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:fixed_ips", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:shared" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``fixed_ips`` information when creating a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:fixed_ips:ip_address", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify IP address in ``fixed_ips`` when creating a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:fixed_ips:subnet_id", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:shared" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify subnet ID in ``fixed_ips`` when creating a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:port_security_enabled", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``port_security_enabled`` attribute when creating a port", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:binding:host_id", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``binding:host_id`` attribute when creating a port", - scope_types=["system"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:binding:profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``binding:profile`` attribute when creating a port", - scope_types=["system"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:binding:vnic_type", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``binding:vnic_type`` attribute when creating a port", - scope_types=["project"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:allowed_address_pairs", - check_str=( - "role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``allowed_address_pairs`` attribute when creating a port", - scope_types=["project", "system"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:allowed_address_pairs:mac_address", - check_str=( - "role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``mac_address` of `allowed_address_pairs`` attribute when creating a port", - scope_types=["project", "system"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="create_port:allowed_address_pairs:ip_address", - check_str=( - "role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``ip_address`` of ``allowed_address_pairs`` attribute when creating a port", - scope_types=["project", "system"], - operations=[{"method": "POST", "path": "/ports"}], - ), - base.APIRule( - name="get_port", - check_str=( - "rule:context_is_advsvc or (role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a port", - scope_types=["project", "system"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/{id}"}, - ], - ), - base.APIRule( - name="get_port:binding:vif_type", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``binding:vif_type`` attribute of a port", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/{id}"}, - ], - ), - base.APIRule( - name="get_port:binding:vif_details", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``binding:vif_details`` attribute of a port", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/{id}"}, - ], - ), - base.APIRule( - name="get_port:binding:host_id", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``binding:host_id`` attribute of a port", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/{id}"}, - ], - ), - base.APIRule( - name="get_port:binding:profile", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``binding:profile`` attribute of a port", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/{id}"}, - ], - ), - base.APIRule( - name="get_port:resource_request", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``resource_request`` attribute of a port", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/ports"}, - {"method": "GET", "path": "/ports/{id}"}, - ], - ), - base.APIRule( - name="update_port", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:context_is_advsvc" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:device_owner", - check_str=( - "not rule:network_device or rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``device_owner`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:mac_address", - check_str=("role:admin and system_scope:all or rule:context_is_advsvc"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``mac_address`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:fixed_ips", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``fixed_ips`` information when updating a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:fixed_ips:ip_address", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify IP address in ``fixed_ips`` information when updating a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:fixed_ips:subnet_id", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:shared" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify subnet ID in ``fixed_ips`` information when updating a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:port_security_enabled", - check_str=( - "rule:context_is_advsvc or rule:network_owner or role:admin and system_scope:all or role:admin and project_id:%(project_id)s" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``port_security_enabled`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:binding:host_id", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``binding:host_id`` attribute of a port", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:binding:profile", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``binding:profile`` attribute of a port", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:binding:vnic_type", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:context_is_advsvc" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``binding:vnic_type`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:allowed_address_pairs", - check_str=( - "role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``allowed_address_pairs`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:allowed_address_pairs:mac_address", - check_str=( - "role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``mac_address`` of ``allowed_address_pairs`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:allowed_address_pairs:ip_address", - check_str=( - "role:admin and system_scope:all or role:admin and project_id:%(project_id)s or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``ip_address`` of ``allowed_address_pairs`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="update_port:data_plane_status", - check_str=("role:admin and system_scope:all or role:data_plane_integrator"), - basic_check_str=("role:admin"), - description="Update ``data_plane_status`` attribute of a port", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/ports/{id}"}], - ), - base.APIRule( - name="delete_port", - check_str=( - "rule:context_is_advsvc or (role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a port", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/ports/{id}"}], - ), - base.APIRule( - name="get_policy", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("@"), - description="Get QoS policies", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/qos/policies"}, - {"method": "GET", "path": "/qos/policies/{id}"}, - ], - ), - base.APIRule( - name="create_policy", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a QoS policy", - scope_types=["system"], - operations=[{"method": "POST", "path": "/qos/policies"}], - ), - base.APIRule( - name="update_policy", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a QoS policy", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/qos/policies/{id}"}], - ), - base.APIRule( - name="delete_policy", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a QoS policy", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/qos/policies/{id}"}], - ), - base.APIRule( - name="get_rule_type", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get available QoS rule types", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/qos/rule-types"}, - {"method": "GET", "path": "/qos/rule-types/{rule_type}"}, - ], - ), - base.APIRule( - name="get_policy_bandwidth_limit_rule", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a QoS bandwidth limit rule", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/qos/policies/{policy_id}/bandwidth_limit_rules"}, - { - "method": "GET", - "path": "/qos/policies/{policy_id}/bandwidth_limit_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="create_policy_bandwidth_limit_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a QoS bandwidth limit rule", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/qos/policies/{policy_id}/bandwidth_limit_rules"}, - ], - ), - base.APIRule( - name="update_policy_bandwidth_limit_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a QoS bandwidth limit rule", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/qos/policies/{policy_id}/bandwidth_limit_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="delete_policy_bandwidth_limit_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a QoS bandwidth limit rule", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/qos/policies/{policy_id}/bandwidth_limit_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="get_policy_dscp_marking_rule", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a QoS DSCP marking rule", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/qos/policies/{policy_id}/dscp_marking_rules"}, - {"method": "GET", "path": "/qos/policies/{policy_id}/dscp_marking_rules/{rule_id}"}, - ], - ), - base.APIRule( - name="create_policy_dscp_marking_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a QoS DSCP marking rule", - scope_types=["system"], - operations=[{"method": "POST", "path": "/qos/policies/{policy_id}/dscp_marking_rules"}], - ), - base.APIRule( - name="update_policy_dscp_marking_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a QoS DSCP marking rule", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/qos/policies/{policy_id}/dscp_marking_rules/{rule_id}"}, - ], - ), - base.APIRule( - name="delete_policy_dscp_marking_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a QoS DSCP marking rule", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/qos/policies/{policy_id}/dscp_marking_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="get_policy_minimum_bandwidth_rule", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a QoS minimum bandwidth rule", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/qos/policies/{policy_id}/minimum_bandwidth_rules"}, - { - "method": "GET", - "path": "/qos/policies/{policy_id}/minimum_bandwidth_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="create_policy_minimum_bandwidth_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a QoS minimum bandwidth rule", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/qos/policies/{policy_id}/minimum_bandwidth_rules"}, - ], - ), - base.APIRule( - name="update_policy_minimum_bandwidth_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a QoS minimum bandwidth rule", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/qos/policies/{policy_id}/minimum_bandwidth_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="delete_policy_minimum_bandwidth_rule", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a QoS minimum bandwidth rule", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/qos/policies/{policy_id}/minimum_bandwidth_rules/{rule_id}", - }, - ], - ), - base.APIRule( - name="get_alias_bandwidth_limit_rule", - check_str=("rule:get_policy_bandwidth_limit_rule"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a QoS bandwidth limit rule through alias", - scope_types=["project"], - operations=[{"method": "GET", "path": "/qos/alias_bandwidth_limit_rules/{rule_id}/"}], - ), - base.APIRule( - name="update_alias_bandwidth_limit_rule", - check_str=("rule:update_policy_bandwidth_limit_rule"), - basic_check_str=("role:admin"), - description="Update a QoS bandwidth limit rule through alias", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/qos/alias_bandwidth_limit_rules/{rule_id}/"}], - ), - base.APIRule( - name="delete_alias_bandwidth_limit_rule", - check_str=("rule:delete_policy_bandwidth_limit_rule"), - basic_check_str=("role:admin"), - description="Delete a QoS bandwidth limit rule through alias", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/qos/alias_bandwidth_limit_rules/{rule_id}/"}], - ), - base.APIRule( - name="get_alias_dscp_marking_rule", - check_str=("rule:get_policy_dscp_marking_rule"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a QoS DSCP marking rule through alias", - scope_types=["project"], - operations=[{"method": "GET", "path": "/qos/alias_dscp_marking_rules/{rule_id}/"}], - ), - base.APIRule( - name="update_alias_dscp_marking_rule", - check_str=("rule:update_policy_dscp_marking_rule"), - basic_check_str=("role:admin"), - description="Update a QoS DSCP marking rule through alias", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/qos/alias_dscp_marking_rules/{rule_id}/"}], - ), - base.APIRule( - name="delete_alias_dscp_marking_rule", - check_str=("rule:delete_policy_dscp_marking_rule"), - basic_check_str=("role:admin"), - description="Delete a QoS DSCP marking rule through alias", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/qos/alias_dscp_marking_rules/{rule_id}/"}], - ), - base.APIRule( - name="get_alias_minimum_bandwidth_rule", - check_str=("rule:get_policy_minimum_bandwidth_rule"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a QoS minimum bandwidth rule through alias", - scope_types=["project"], - operations=[{"method": "GET", "path": "/qos/alias_minimum_bandwidth_rules/{rule_id}/"}], - ), - base.APIRule( - name="update_alias_minimum_bandwidth_rule", - check_str=("rule:update_policy_minimum_bandwidth_rule"), - basic_check_str=("role:admin"), - description="Update a QoS minimum bandwidth rule through alias", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/qos/alias_minimum_bandwidth_rules/{rule_id}/"}], - ), - base.APIRule( - name="delete_alias_minimum_bandwidth_rule", - check_str=("rule:delete_policy_minimum_bandwidth_rule"), - basic_check_str=("role:admin"), - description="Delete a QoS minimum bandwidth rule through alias", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/qos/alias_minimum_bandwidth_rules/{rule_id}/"}, - ], - ), - base.APIRule( - name="get_quota", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a resource quota", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/quota"}, - {"method": "GET", "path": "/quota/{id}"}, - ], - ), - base.APIRule( - name="update_quota", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a resource quota", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/quota/{id}"}], - ), - base.APIRule( - name="delete_quota", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a resource quota", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/quota/{id}"}], - ), - base.APIRule( - name="create_rbac_policy", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=("role:admin"), - description="Create an RBAC policy", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/rbac-policies"}], - ), - base.APIRule( - name="create_rbac_policy:target_tenant", - check_str=("role:admin and system_scope:all or rule:restrict_wildcard"), - basic_check_str=("role:admin"), - description="Specify ``target_tenant`` when creating an RBAC policy", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/rbac-policies"}], - ), - base.APIRule( - name="update_rbac_policy", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=("role:admin"), - description="Update an RBAC policy", - scope_types=["project", "system"], - operations=[{"method": "PUT", "path": "/rbac-policies/{id}"}], - ), - base.APIRule( - name="update_rbac_policy:target_tenant", - check_str=("role:admin and system_scope:all or rule:restrict_wildcard"), - basic_check_str=("role:admin"), - description="Update ``target_tenant`` attribute of an RBAC policy", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/rbac-policies/{id}"}], - ), - base.APIRule( - name="get_rbac_policy", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get an RBAC policy", - scope_types=["project", "system"], - operations=[ - {"method": "GET", "path": "/rbac-policies"}, - {"method": "GET", "path": "/rbac-policies/{id}"}, - ], - ), - base.APIRule( - name="delete_rbac_policy", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=("role:admin"), - description="Delete an RBAC policy", - scope_types=["project", "system"], - operations=[{"method": "DELETE", "path": "/rbac-policies/{id}"}], - ), - base.APIRule( - name="create_router", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a router", - scope_types=["project"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="create_router:distributed", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``distributed`` attribute when creating a router", - scope_types=["system"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="create_router:ha", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``ha`` attribute when creating a router", - scope_types=["system"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="create_router:external_gateway_info", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``external_gateway_info`` information when creating a router", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="create_router:external_gateway_info:network_id", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Specify ``network_id`` in ``external_gateway_info`` information when creating a router", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="create_router:external_gateway_info:enable_snat", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``enable_snat`` in ``external_gateway_info`` information when creating a router", - scope_types=["system"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="create_router:external_gateway_info:external_fixed_ips", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``external_fixed_ips`` in ``external_gateway_info`` information when creating a router", - scope_types=["system"], - operations=[{"method": "POST", "path": "/routers"}], - ), - base.APIRule( - name="get_router", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a router", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/routers"}, - {"method": "GET", "path": "/routers/{id}"}, - ], - ), - base.APIRule( - name="get_router:distributed", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``distributed`` attribute of a router", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/routers"}, - {"method": "GET", "path": "/routers/{id}"}, - ], - ), - base.APIRule( - name="get_router:ha", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``ha`` attribute of a router", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/routers"}, - {"method": "GET", "path": "/routers/{id}"}, - ], - ), - base.APIRule( - name="update_router", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a router", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="update_router:distributed", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``distributed`` attribute of a router", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="update_router:ha", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``ha`` attribute of a router", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="update_router:external_gateway_info", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``external_gateway_info`` information of a router", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="update_router:external_gateway_info:network_id", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``network_id`` attribute of ``external_gateway_info`` information of a router", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="update_router:external_gateway_info:enable_snat", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``enable_snat`` attribute of ``external_gateway_info`` information of a router", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="update_router:external_gateway_info:external_fixed_ips", - check_str=("role:admin and system_scope:all"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update ``external_fixed_ips`` attribute of ``external_gateway_info`` information of a router", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/routers/{id}"}], - ), - base.APIRule( - name="delete_router", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a router", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/routers/{id}"}], - ), - base.APIRule( - name="add_router_interface", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add an interface to a router", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/routers/{id}/add_router_interface"}], - ), - base.APIRule( - name="remove_router_interface", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove an interface from a router", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/routers/{id}/remove_router_interface"}], - ), - base.APIRule( - name="create_security_group", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a security group", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/security-groups"}], - ), - base.APIRule( - name="get_security_group", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a security group", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/security-groups"}, - {"method": "GET", "path": "/security-groups/{id}"}, - ], - ), - base.APIRule( - name="update_security_group", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a security group", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/security-groups/{id}"}], - ), - base.APIRule( - name="delete_security_group", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a security group", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/security-groups/{id}"}], - ), - base.APIRule( - name="create_security_group_rule", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a security group rule", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/security-group-rules"}], - ), - base.APIRule( - name="get_security_group_rule", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:sg_owner" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a security group rule", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/security-group-rules"}, - {"method": "GET", "path": "/security-group-rules/{id}"}, - ], - ), - base.APIRule( - name="delete_security_group_rule", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a security group rule", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/security-group-rules/{id}"}], - ), - base.APIRule( - name="create_segment", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a segment", - scope_types=["system"], - operations=[{"method": "POST", "path": "/segments"}], - ), - base.APIRule( - name="get_segment", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get a segment", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/segments"}, - {"method": "GET", "path": "/segments/{id}"}, - ], - ), - base.APIRule( - name="update_segment", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update a segment", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/segments/{id}"}], - ), - base.APIRule( - name="delete_segment", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete a segment", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/segments/{id}"}], - ), - base.APIRule( - name="get_service_provider", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get service providers", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/service-providers"}], - ), - base.APIRule( - name="create_subnet", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a subnet", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/subnets"}], - ), - base.APIRule( - name="create_subnet:segment_id", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``segment_id`` attribute when creating a subnet", - scope_types=["system"], - operations=[{"method": "POST", "path": "/subnets"}], - ), - base.APIRule( - name="create_subnet:service_types", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``service_types`` attribute when creating a subnet", - scope_types=["system"], - operations=[{"method": "POST", "path": "/subnets"}], - ), - base.APIRule( - name="get_subnet", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:shared" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a subnet", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/subnets"}, - {"method": "GET", "path": "/subnets/{id}"}, - ], - ), - base.APIRule( - name="get_subnet:segment_id", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Get ``segment_id`` attribute of a subnet", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/subnets"}, - {"method": "GET", "path": "/subnets/{id}"}, - ], - ), - base.APIRule( - name="update_subnet", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a subnet", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/subnets/{id}"}], - ), - base.APIRule( - name="update_subnet:segment_id", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``segment_id`` attribute of a subnet", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/subnets/{id}"}], - ), - base.APIRule( - name="update_subnet:service_types", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``service_types`` attribute of a subnet", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/subnets/{id}"}], - ), - base.APIRule( - name="delete_subnet", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s) or rule:network_owner" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a subnet", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/subnets/{id}"}], - ), - base.APIRule( - name="create_subnetpool", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a subnetpool", - scope_types=["project", "system"], - operations=[{"method": "POST", "path": "/subnetpools"}], - ), - base.APIRule( - name="create_subnetpool:shared", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create a shared subnetpool", - scope_types=["system"], - operations=[{"method": "POST", "path": "/subnetpools"}], - ), - base.APIRule( - name="create_subnetpool:is_default", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Specify ``is_default`` attribute when creating a subnetpool", - scope_types=["system"], - operations=[{"method": "POST", "path": "/subnetpools"}], - ), - base.APIRule( - name="get_subnetpool", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s) or rule:shared_subnetpools" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a subnetpool", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/subnetpools"}, - {"method": "GET", "path": "/subnetpools/{id}"}, - ], - ), - base.APIRule( - name="update_subnetpool", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a subnetpool", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/subnetpools/{id}"}], - ), - base.APIRule( - name="update_subnetpool:is_default", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update ``is_default`` attribute of a subnetpool", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/subnetpools/{id}"}], - ), - base.APIRule( - name="delete_subnetpool", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a subnetpool", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/subnetpools/{id}"}], - ), - base.APIRule( - name="onboard_network_subnets", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Onboard existing subnet into a subnetpool", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/subnetpools/{id}/onboard_network_subnets"}], - ), - base.APIRule( - name="add_prefixes", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add prefixes to a subnetpool", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/subnetpools/{id}/add_prefixes"}], - ), - base.APIRule( - name="remove_prefixes", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove unallocated prefixes from a subnetpool", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/subnetpools/{id}/remove_prefixes"}], - ), - base.APIRule( - name="create_trunk", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a trunk", - scope_types=["project", "system"], - operations=[{"method": "POST", "path": "/trunks"}], - ), - base.APIRule( - name="get_trunk", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get a trunk", - scope_types=["project", "system"], - operations=[ - {"method": "GET", "path": "/trunks"}, - {"method": "GET", "path": "/trunks/{id}"}, - ], - ), - base.APIRule( - name="update_trunk", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a trunk", - scope_types=["project", "system"], - operations=[{"method": "PUT", "path": "/trunks/{id}"}], - ), - base.APIRule( - name="delete_trunk", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a trunk", - scope_types=["project", "system"], - operations=[{"method": "DELETE", "path": "/trunks/{id}"}], - ), - base.APIRule( - name="get_subports", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List subports attached to a trunk", - scope_types=["project", "system"], - operations=[{"method": "GET", "path": "/trunks/{id}/get_subports"}], - ), - base.APIRule( - name="add_subports", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add subports to a trunk", - scope_types=["project", "system"], - operations=[{"method": "PUT", "path": "/trunks/{id}/add_subports"}], - ), - base.APIRule( - name="remove_subports", - check_str=( - "(role:admin and system_scope:all) or (role:member and project_id:%(project_id)s)" - ), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete subports from a trunk", - scope_types=["project", "system"], - operations=[{"method": "PUT", "path": "/trunks/{id}/remove_subports"}], - ), - base.APIRule( - name="create_endpoint_group", - check_str=("rule:regular_user"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a VPN endpoint group", - scope_types=["project"], - operations=[{"method": "POST", "path": "/vpn/endpoint-groups"}], - ), - base.APIRule( - name="update_endpoint_group", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a VPN endpoint group", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/vpn/endpoint-groups/{id}"}], - ), - base.APIRule( - name="delete_endpoint_group", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a VPN endpoint group", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/vpn/endpoint-groups/{id}"}], - ), - base.APIRule( - name="get_endpoint_group", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get VPN endpoint groups", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/vpn/endpoint-groups"}, - {"method": "GET", "path": "/vpn/endpoint-groups/{id}"}, - ], - ), - base.APIRule( - name="create_ikepolicy", - check_str=("rule:regular_user"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create an IKE policy", - scope_types=["project"], - operations=[{"method": "POST", "path": "/vpn/ikepolicies"}], - ), - base.APIRule( - name="update_ikepolicy", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update an IKE policy", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/vpn/ikepolicies/{id}"}], - ), - base.APIRule( - name="delete_ikepolicy", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete an IKE policy", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/vpn/ikepolicies/{id}"}], - ), - base.APIRule( - name="get_ikepolicy", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get IKE policyies", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/vpn/ikepolicies"}, - {"method": "GET", "path": "/vpn/ikepolicies/{id}"}, - ], - ), - base.APIRule( - name="create_ipsecpolicy", - check_str=("rule:regular_user"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create an IPsec policy", - scope_types=["project"], - operations=[{"method": "POST", "path": "/vpn/ipsecpolicies"}], - ), - base.APIRule( - name="update_ipsecpolicy", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update an IPsec policy", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/vpn/ipsecpolicies/{id}"}], - ), - base.APIRule( - name="delete_ipsecpolicy", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete an IPsec policy", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/vpn/ipsecpolicies/{id}"}], - ), - base.APIRule( - name="get_ipsecpolicy", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get IPsec policies", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/vpn/ipsecpolicies"}, - {"method": "GET", "path": "/vpn/ipsecpolicies/{id}"}, - ], - ), - base.APIRule( - name="create_ipsec_site_connection", - check_str=("rule:regular_user"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create an IPsec site connection", - scope_types=["project"], - operations=[{"method": "POST", "path": "/vpn/ipsec-site-connections"}], - ), - base.APIRule( - name="update_ipsec_site_connection", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update an IPsec site connection", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/vpn/ipsec-site-connections/{id}"}], - ), - base.APIRule( - name="delete_ipsec_site_connection", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete an IPsec site connection", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/vpn/ipsec-site-connections/{id}"}], - ), - base.APIRule( - name="get_ipsec_site_connection", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get IPsec site connections", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/vpn/ipsec-site-connections"}, - {"method": "GET", "path": "/vpn/ipsec-site-connections/{id}"}, - ], - ), - base.APIRule( - name="create_vpnservice", - check_str=("rule:regular_user"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a VPN service", - scope_types=["project"], - operations=[{"method": "POST", "path": "/vpn/vpnservices"}], - ), - base.APIRule( - name="update_vpnservice", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a VPN service", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/vpn/vpnservices/{id}"}], - ), - base.APIRule( - name="delete_vpnservice", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a VPN service", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/vpn/vpnservices/{id}"}], - ), - base.APIRule( - name="get_vpnservice", - check_str=("rule:admin_or_owner"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Get VPN services", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/vpn/vpnservices"}, - {"method": "GET", "path": "/vpn/vpnservices/{id}"}, - ], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/nova.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/nova.py deleted file mode 100644 index 8cf19e5..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/nova.py +++ /dev/null @@ -1,1915 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="context_is_admin", - check_str=("role:admin"), - description="Decides what is required for the 'is_admin:True' check to succeed.", - ), - base.Rule( - name="admin_or_owner", - check_str=("is_admin:True or project_id:%(project_id)s"), - description="Default rule for most non-Admin APIs.", - ), - base.Rule( - name="admin_api", - check_str=("is_admin:True"), - description="Default rule for most Admin APIs.", - ), - base.Rule( - name="system_admin_api", - check_str=("role:admin and system_scope:all"), - description="Default rule for System Admin APIs.", - ), - base.Rule( - name="system_reader_api", - check_str=("role:reader and system_scope:all"), - description="Default rule for System level read only APIs.", - ), - base.Rule( - name="project_admin_api", - check_str=("role:admin and project_id:%(project_id)s"), - description="Default rule for Project level admin APIs.", - ), - base.Rule( - name="project_member_api", - check_str=("role:member and project_id:%(project_id)s"), - description="Default rule for Project level non admin APIs.", - ), - base.Rule( - name="project_reader_api", - check_str=("role:reader and project_id:%(project_id)s"), - description="Default rule for Project level read only APIs.", - ), - base.Rule( - name="system_admin_or_owner", - check_str=("rule:system_admin_api or rule:project_member_api"), - description="Default rule for System admin+owner APIs.", - ), - base.Rule( - name="system_or_project_reader", - check_str=("rule:system_reader_api or rule:project_reader_api"), - description="Default rule for System+Project read only APIs.", - ), - base.APIRule( - name="os_compute_api:os-admin-actions:reset_state", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Reset the state of a given server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (os-resetState)"}], - ), - base.APIRule( - name="os_compute_api:os-admin-actions:inject_network_info", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Inject network information into the server", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/servers/{server_id}/action (injectNetworkInfo)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-admin-password", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Change the administrative password for a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (changePassword)"}], - ), - base.APIRule( - name="os_compute_api:os-aggregates:set_metadata", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Create or replace metadata for an aggregate", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/os-aggregates/{aggregate_id}/action (set_metadata)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-aggregates:add_host", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Add a host to an aggregate", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/os-aggregates/{aggregate_id}/action (add_host)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-aggregates:create", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Create an aggregate", - scope_types=["system"], - operations=[{"method": "POST", "path": "/os-aggregates"}], - ), - base.APIRule( - name="os_compute_api:os-aggregates:remove_host", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Remove a host from an aggregate", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/os-aggregates/{aggregate_id}/action (remove_host)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-aggregates:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update name and/or availability zone for an aggregate", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/os-aggregates/{aggregate_id}"}], - ), - base.APIRule( - name="os_compute_api:os-aggregates:index", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all aggregates", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-aggregates"}], - ), - base.APIRule( - name="os_compute_api:os-aggregates:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Delete an aggregate", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/os-aggregates/{aggregate_id}"}], - ), - base.APIRule( - name="os_compute_api:os-aggregates:show", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show details for an aggregate", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-aggregates/{aggregate_id}"}], - ), - base.APIRule( - name="compute:aggregates:images", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Request image caching for an aggregate", - scope_types=["system"], - operations=[{"method": "POST", "path": "/os-aggregates/{aggregate_id}/images"}], - ), - base.APIRule( - name="os_compute_api:os-assisted-volume-snapshots:create", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Create an assisted volume snapshot", - scope_types=["system"], - operations=[{"method": "POST", "path": "/os-assisted-volume-snapshots"}], - ), - base.APIRule( - name="os_compute_api:os-assisted-volume-snapshots:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Delete an assisted volume snapshot", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/os-assisted-volume-snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="os_compute_api:os-attach-interfaces:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List port interfaces attached to a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/os-interface"}], - ), - base.APIRule( - name="os_compute_api:os-attach-interfaces:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show details of a port interface attached to a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/os-interface/{port_id}"}], - ), - base.APIRule( - name="os_compute_api:os-attach-interfaces:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Attach an interface to a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/os-interface"}], - ), - base.APIRule( - name="os_compute_api:os-attach-interfaces:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Detach an interface from a server", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/servers/{server_id}/os-interface/{port_id}"}], - ), - base.APIRule( - name="os_compute_api:os-availability-zone:list", - check_str=("@"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List availability zone information without host information", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-availability-zone"}], - ), - base.APIRule( - name="os_compute_api:os-availability-zone:detail", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List detailed availability zone information with host information", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-availability-zone/detail"}], - ), - base.APIRule( - name="os_compute_api:os-baremetal-nodes:list", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List and show details of bare metal nodes.\n#\n#These APIs are proxy calls to the Ironic service and are deprecated.\n#", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-baremetal-nodes"}], - ), - base.APIRule( - name="os_compute_api:os-baremetal-nodes:show", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin"), - description="Show action details for a server.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-baremetal-nodes/{node_id}"}], - ), - base.APIRule( - name="os_compute_api:os-console-auth-tokens", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show console connection information for a given console authentication token", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-console-auth-tokens/{console_token}"}], - ), - base.APIRule( - name="os_compute_api:os-console-output", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Show console output for a server", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/servers/{server_id}/action (os-getConsoleOutput)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-create-backup", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a back up of a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (createBackup)"}], - ), - base.APIRule( - name="os_compute_api:os-deferred-delete:restore", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Restore a soft deleted server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (restore)"}], - ), - base.APIRule( - name="os_compute_api:os-deferred-delete:force", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Force delete a server before deferred cleanup", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (forceDelete)"}], - ), - base.APIRule( - name="os_compute_api:os-evacuate", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Evacuate a server from a failed host to a new host", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (evacuate)"}], - ), - base.APIRule( - name="os_compute_api:os-extended-server-attributes", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin or role:reader"), - description="Return extended attributes for server.\n#\n#This rule will control the visibility for a set of servers attributes:\n#\n#- ``OS-EXT-SRV-ATTR:host``\n#- ``OS-EXT-SRV-ATTR:instance_name``\n#- ``OS-EXT-SRV-ATTR:reservation_id`` (since microversion 2.3)\n#- ``OS-EXT-SRV-ATTR:launch_index`` (since microversion 2.3)\n#- ``OS-EXT-SRV-ATTR:hostname`` (since microversion 2.3)\n#- ``OS-EXT-SRV-ATTR:kernel_id`` (since microversion 2.3)\n#- ``OS-EXT-SRV-ATTR:ramdisk_id`` (since microversion 2.3)\n#- ``OS-EXT-SRV-ATTR:root_device_name`` (since microversion 2.3)\n#- ``OS-EXT-SRV-ATTR:user_data`` (since microversion 2.3)\n#\n#Microvision 2.75 added the above attributes in the ``PUT /servers/{server_id}``\n#and ``POST /servers/{server_id}/action (rebuild)`` API responses which are\n#also controlled by this policy rule, like the ``GET /servers*`` APIs.\n#", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{id}"}, - {"method": "GET", "path": "/servers/detail"}, - {"method": "PUT", "path": "/servers/{server_id}"}, - {"method": "POST", "path": "/servers/{server_id}/action (rebuild)"}, - ], - ), - base.APIRule( - name="os_compute_api:extensions", - check_str=("@"), - basic_check_str=("@"), - description="List available extensions and show information for an extension by alias", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/extensions"}, - {"method": "GET", "path": "/extensions/{alias}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-flavor-access:add_tenant_access", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Add flavor access to a tenant", - scope_types=["system"], - operations=[{"method": "POST", "path": "/flavors/{flavor_id}/action (addTenantAccess)"}], - ), - base.APIRule( - name="os_compute_api:os-flavor-access:remove_tenant_access", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Remove flavor access from a tenant", - scope_types=["system"], - operations=[ - {"method": "POST", "path": "/flavors/{flavor_id}/action (removeTenantAccess)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-flavor-access", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List flavor access information\n#\n#Allows access to the full list of tenants that have access\n#to a flavor via an os-flavor-access API.\n#", - scope_types=["system"], - operations=[{"method": "GET", "path": "/flavors/{flavor_id}/os-flavor-access"}], - ), - base.APIRule( - name="os_compute_api:os-flavor-extra-specs:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show an extra spec for a flavor", - scope_types=["system", "project"], - operations=[ - { - "method": "GET", - "path": "/flavors/{flavor_id}/os-extra_specs/{flavor_extra_spec_key}", - }, - ], - ), - base.APIRule( - name="os_compute_api:os-flavor-extra-specs:create", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Create extra specs for a flavor", - scope_types=["system"], - operations=[{"method": "POST", "path": "/flavors/{flavor_id}/os-extra_specs/"}], - ), - base.APIRule( - name="os_compute_api:os-flavor-extra-specs:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update an extra spec for a flavor", - scope_types=["system"], - operations=[ - { - "method": "PUT", - "path": "/flavors/{flavor_id}/os-extra_specs/{flavor_extra_spec_key}", - }, - ], - ), - base.APIRule( - name="os_compute_api:os-flavor-extra-specs:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Delete an extra spec for a flavor", - scope_types=["system"], - operations=[ - { - "method": "DELETE", - "path": "/flavors/{flavor_id}/os-extra_specs/{flavor_extra_spec_key}", - }, - ], - ), - base.APIRule( - name="os_compute_api:os-flavor-extra-specs:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List extra specs for a flavor. Starting with microversion 2.47, the flavor used for a server is also returned in the response when showing server details, updating a server or rebuilding a server. Starting with microversion 2.61, extra specs may be returned in responses for the flavor resource.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/flavors/{flavor_id}/os-extra_specs/"}, - {"method": "GET", "path": "/servers/detail"}, - {"method": "GET", "path": "/servers/{server_id}"}, - {"method": "PUT", "path": "/servers/{server_id}"}, - {"method": "POST", "path": "/servers/{server_id}/action (rebuild)"}, - {"method": "POST", "path": "/flavors"}, - {"method": "GET", "path": "/flavors/detail"}, - {"method": "GET", "path": "/flavors/{flavor_id}"}, - {"method": "PUT", "path": "/flavors/{flavor_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-flavor-manage:create", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Create a flavor", - scope_types=["system"], - operations=[{"method": "POST", "path": "/flavors"}], - ), - base.APIRule( - name="os_compute_api:os-flavor-manage:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update a flavor", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/flavors/{flavor_id}"}], - ), - base.APIRule( - name="os_compute_api:os-flavor-manage:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Delete a flavor", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/flavors/{flavor_id}"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ip-pools", - check_str=("@"), - basic_check_str=("@"), - description="List floating IP pools. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-floating-ip-pools"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ips:add", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Associate floating IPs to server. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (addFloatingIp)"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ips:remove", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Disassociate floating IPs to server. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (removeFloatingIp)"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ips:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List floating IPs. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-floating-ips"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ips:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create floating IPs. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/os-floating-ips"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ips:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show floating IPs. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-floating-ips/{floating_ip_id}"}], - ), - base.APIRule( - name="os_compute_api:os-floating-ips:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete floating IPs. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-floating-ips/{floating_ip_id}"}], - ), - base.APIRule( - name="os_compute_api:os-hosts:list", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List physical hosts.\n#\n#This API is deprecated in favor of os-hypervisors and os-services.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hosts"}], - ), - base.APIRule( - name="os_compute_api:os-hosts:show", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show physical host.\n#\n#This API is deprecated in favor of os-hypervisors and os-services.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hosts/{host_name}"}], - ), - base.APIRule( - name="os_compute_api:os-hosts:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update physical host.\n#\n#This API is deprecated in favor of os-hypervisors and os-services.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/os-hosts/{host_name}"}], - ), - base.APIRule( - name="os_compute_api:os-hosts:reboot", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Reboot physical host.\n#\n#This API is deprecated in favor of os-hypervisors and os-services.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hosts/{host_name}/reboot"}], - ), - base.APIRule( - name="os_compute_api:os-hosts:shutdown", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Shutdown physical host.\n#\n#This API is deprecated in favor of os-hypervisors and os-services.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hosts/{host_name}/shutdown"}], - ), - base.APIRule( - name="os_compute_api:os-hosts:start", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Start physical host.\n#\n#This API is deprecated in favor of os-hypervisors and os-services.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hosts/{host_name}/startup"}], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:list", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all hypervisors.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hypervisors"}], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:list-detail", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all hypervisors with details", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hypervisors/details"}], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:statistics", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show summary statistics for all hypervisors over all compute nodes.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hypervisors/statistics"}], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:show", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show details for a hypervisor.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hypervisors/{hypervisor_id}"}], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:uptime", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show the uptime of a hypervisor.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-hypervisors/{hypervisor_id}/uptime"}], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:search", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Search hypervisor by hypervisor_hostname pattern.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/os-hypervisors/{hypervisor_hostname_pattern}/search"}, - ], - ), - base.APIRule( - name="os_compute_api:os-hypervisors:servers", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all servers on hypervisors that can match the provided hypervisor_hostname pattern.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/os-hypervisors/{hypervisor_hostname_pattern}/servers"}, - ], - ), - base.APIRule( - name="os_compute_api:os-instance-actions:events:details", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Add \"details\" key in action events for a server.\n#\n#This check is performed only after the check\n#os_compute_api:os-instance-actions:show passes. Beginning with Microversion\n#2.84, new field 'details' is exposed via API which can have more details about\n#event failure. That field is controlled by this policy which is system reader\n#by default. Making the 'details' field visible to the non-admin user helps to\n#understand the nature of the problem (i.e. if the action can be retried),\n#but in the other hand it might leak information about the deployment\n#(e.g. the type of the hypervisor).\n#", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{server_id}/os-instance-actions/{request_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-instance-actions:events", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader or role:admin and project_id:%(project_id)s"), - description="Add events details in action details for a server.\n#This check is performed only after the check\n#os_compute_api:os-instance-actions:show passes. Beginning with Microversion\n#2.51, events details are always included; traceback information is provided\n#per event if policy enforcement passes. Beginning with Microversion 2.62,\n#each event includes a hashed host identifier and, if policy enforcement\n#passes, the name of the host.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{server_id}/os-instance-actions/{request_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-instance-actions:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List actions for a server.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/os-instance-actions"}], - ), - base.APIRule( - name="os_compute_api:os-instance-actions:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show action details for a server.", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{server_id}/os-instance-actions/{request_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-instance-usage-audit-log:list", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all usage audits.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-instance_usage_audit_log"}], - ), - base.APIRule( - name="os_compute_api:os-instance-usage-audit-log:show", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all usage audits occurred before a specified time for all servers on all compute hosts where usage auditing is configured", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-instance_usage_audit_log/{before_timestamp}"}], - ), - base.APIRule( - name="os_compute_api:ips:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show IP addresses details for a network label of a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/ips/{network_label}"}], - ), - base.APIRule( - name="os_compute_api:ips:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List IP addresses that are assigned to a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/ips"}], - ), - base.APIRule( - name="os_compute_api:os-keypairs:index", - check_str=("(rule:system_reader_api) or user_id:%(user_id)s"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="List all keypairs", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-keypairs"}], - ), - base.APIRule( - name="os_compute_api:os-keypairs:create", - check_str=("(rule:system_admin_api) or user_id:%(user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Create a keypair", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/os-keypairs"}], - ), - base.APIRule( - name="os_compute_api:os-keypairs:delete", - check_str=("(rule:system_admin_api) or user_id:%(user_id)s"), - basic_check_str=("role:admin or user_id:%(user_id)s"), - description="Delete a keypair", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-keypairs/{keypair_name}"}], - ), - base.APIRule( - name="os_compute_api:os-keypairs:show", - check_str=("(rule:system_reader_api) or user_id:%(user_id)s"), - basic_check_str=("role:admin or role:reader or user_id:%(user_id)s"), - description="Show details of a keypair", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-keypairs/{keypair_name}"}], - ), - base.APIRule( - name="os_compute_api:limits", - check_str=("@"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show rate and absolute limits for the current user project", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/limits"}], - ), - base.APIRule( - name="os_compute_api:limits:other_project", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show rate and absolute limits of other project.\n#\n#This policy only checks if the user has access to the requested\n#project limits. And this check is performed only after the check\n#os_compute_api:limits passes", - scope_types=["system"], - operations=[{"method": "GET", "path": "/limits"}], - ), - base.APIRule( - name="os_compute_api:os-lock-server:lock", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Lock a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (lock)"}], - ), - base.APIRule( - name="os_compute_api:os-lock-server:unlock", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Unlock a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (unlock)"}], - ), - base.APIRule( - name="os_compute_api:os-lock-server:unlock:unlock_override", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Unlock a server, regardless who locked the server.\n#\n#This check is performed only after the check\n#os_compute_api:os-lock-server:unlock passes", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (unlock)"}], - ), - base.APIRule( - name="os_compute_api:os-migrate-server:migrate", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Cold migrate a server to a host", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (migrate)"}], - ), - base.APIRule( - name="os_compute_api:os-migrate-server:migrate_live", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="Live migrate a server to a new host without a reboot", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (os-migrateLive)"}], - ), - base.APIRule( - name="os_compute_api:os-migrations:index", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List migrations", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-migrations"}], - ), - base.APIRule( - name="os_compute_api:os-multinic:add", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add a fixed IP address to a server.\n#\n#This API is proxy calls to the Network service. This is\n#deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (addFixedIp)"}], - ), - base.APIRule( - name="os_compute_api:os-multinic:remove", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a fixed IP address from a server.\n#\n#This API is proxy calls to the Network service. This is\n#deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (removeFixedIp)"}], - ), - base.APIRule( - name="os_compute_api:os-networks:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List networks for the project.\n#\n#This API is proxy calls to the Network service. This is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-networks"}], - ), - base.APIRule( - name="os_compute_api:os-networks:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show network details.\n#\n#This API is proxy calls to the Network service. This is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-networks/{network_id}"}], - ), - base.APIRule( - name="os_compute_api:os-pause-server:pause", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Pause a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (pause)"}], - ), - base.APIRule( - name="os_compute_api:os-pause-server:unpause", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Unpause a paused server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (unpause)"}], - ), - base.APIRule( - name="os_compute_api:os-quota-class-sets:show", - check_str=("rule:system_reader_api"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List quotas for specific quota classs", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-quota-class-sets/{quota_class}"}], - ), - base.APIRule( - name="os_compute_api:os-quota-class-sets:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update quotas for specific quota class", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/os-quota-class-sets/{quota_class}"}], - ), - base.APIRule( - name="os_compute_api:os-quota-sets:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update the quotas", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/os-quota-sets/{tenant_id}"}], - ), - base.APIRule( - name="os_compute_api:os-quota-sets:defaults", - check_str=("@"), - basic_check_str=("@"), - description="List default quotas", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-quota-sets/{tenant_id}/defaults"}], - ), - base.APIRule( - name="os_compute_api:os-quota-sets:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show a quota", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-quota-sets/{tenant_id}"}], - ), - base.APIRule( - name="os_compute_api:os-quota-sets:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Revert quotas to defaults", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/os-quota-sets/{tenant_id}"}], - ), - base.APIRule( - name="os_compute_api:os-quota-sets:detail", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show the detail of quota", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-quota-sets/{tenant_id}/detail"}], - ), - base.APIRule( - name="os_compute_api:os-remote-consoles", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Generate a URL to access remove server console.\n#\n#This policy is for ``POST /remote-consoles`` API and below Server actions APIs\n#are deprecated:\n#\n#- ``os-getRDPConsole``\n#- ``os-getSerialConsole``\n#- ``os-getSPICEConsole``\n#- ``os-getVNCConsole``.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/servers/{server_id}/action (os-getRDPConsole)"}, - {"method": "POST", "path": "/servers/{server_id}/action (os-getSerialConsole)"}, - {"method": "POST", "path": "/servers/{server_id}/action (os-getSPICEConsole)"}, - {"method": "POST", "path": "/servers/{server_id}/action (os-getVNCConsole)"}, - {"method": "POST", "path": "/servers/{server_id}/remote-consoles"}, - ], - ), - base.APIRule( - name="os_compute_api:os-rescue", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Rescue a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (rescue)"}], - ), - base.APIRule( - name="os_compute_api:os-unrescue", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Unrescue a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (unrescue)"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:get", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List security groups. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-security-groups"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show security group. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-security-groups/{security_group_id}"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create security group. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/os-security-groups"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:update", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update security group. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/os-security-groups/{security_group_id}"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete security group. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-security-groups/{security_group_id}"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:rule:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create security group Rule. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/os-security-group-rules"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:rule:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete security group Rule. This API is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-security-group-rules/{security_group_id}"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List security groups of server.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/os-security-groups"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:add", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add security groups to server.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (addSecurityGroup)"}], - ), - base.APIRule( - name="os_compute_api:os-security-groups:remove", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove security groups from server.", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/servers/{server_id}/action (removeSecurityGroup)"}, - ], - ), - base.APIRule( - name="os_compute_api:os-server-diagnostics", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin or role:reader or role:admin and project_id:%(project_id)s"), - description="Show the usage data for a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/diagnostics"}], - ), - base.APIRule( - name="os_compute_api:os-server-external-events:create", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Create one or more external events", - scope_types=["system"], - operations=[{"method": "POST", "path": "/os-server-external-events"}], - ), - base.APIRule( - name="os_compute_api:os-server-groups:create", - check_str=("rule:project_member_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a new server group", - scope_types=["project"], - operations=[{"method": "POST", "path": "/os-server-groups"}], - ), - base.APIRule( - name="os_compute_api:os-server-groups:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a server group", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-server-groups/{server_group_id}"}], - ), - base.APIRule( - name="os_compute_api:os-server-groups:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List all server groups", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-server-groups"}], - ), - base.APIRule( - name="os_compute_api:os-server-groups:index:all_projects", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all server groups for all projects", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-server-groups"}], - ), - base.APIRule( - name="os_compute_api:os-server-groups:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show details of a server group", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-server-groups/{server_group_id}"}], - ), - base.APIRule( - name="os_compute_api:server-metadata:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List all metadata of a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/metadata"}], - ), - base.APIRule( - name="os_compute_api:server-metadata:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show metadata for a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/metadata/{key}"}], - ), - base.APIRule( - name="os_compute_api:server-metadata:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create metadata for a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/metadata"}], - ), - base.APIRule( - name="os_compute_api:server-metadata:update_all", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Replace metadata for a server", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/servers/{server_id}/metadata"}], - ), - base.APIRule( - name="os_compute_api:server-metadata:update", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update metadata from a server", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/servers/{server_id}/metadata/{key}"}], - ), - base.APIRule( - name="os_compute_api:server-metadata:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete metadata from a server", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/servers/{server_id}/metadata/{key}"}], - ), - base.APIRule( - name="os_compute_api:os-server-password:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show the encrypted administrative password of a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/os-server-password"}], - ), - base.APIRule( - name="os_compute_api:os-server-password:clear", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Clear the encrypted administrative password of a server", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/servers/{server_id}/os-server-password"}], - ), - base.APIRule( - name="os_compute_api:os-server-tags:delete_all", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete all the server tags", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/servers/{server_id}/tags"}], - ), - base.APIRule( - name="os_compute_api:os-server-tags:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List all tags for given server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/tags"}], - ), - base.APIRule( - name="os_compute_api:os-server-tags:update_all", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Replace all tags on specified server with the new set of tags.", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/servers/{server_id}/tags"}], - ), - base.APIRule( - name="os_compute_api:os-server-tags:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a single tag from the specified server", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/servers/{server_id}/tags/{tag}"}], - ), - base.APIRule( - name="os_compute_api:os-server-tags:update", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Add a single tag to the server if server has no specified tag", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/servers/{server_id}/tags/{tag}"}], - ), - base.APIRule( - name="os_compute_api:os-server-tags:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Check tag existence on the server.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/tags/{tag}"}], - ), - base.APIRule( - name="compute:server:topology:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=("role:admin or role:reader"), - description="Show the NUMA topology data for a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/topology"}], - ), - base.APIRule( - name="compute:server:topology:host:index", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show the NUMA topology data for a server with host NUMA ID and CPU pinning information", - scope_types=["system"], - operations=[{"method": "GET", "path": "/servers/{server_id}/topology"}], - ), - base.APIRule( - name="os_compute_api:servers:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List all servers", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:detail", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List all servers with detailed information", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/detail"}], - ), - base.APIRule( - name="os_compute_api:servers:index:get_all_tenants", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all servers for all projects", - scope_types=["system"], - operations=[{"method": "GET", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:detail:get_all_tenants", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all servers with detailed information for all projects", - scope_types=["system"], - operations=[{"method": "GET", "path": "/servers/detail"}], - ), - base.APIRule( - name="os_compute_api:servers:allow_all_filters", - check_str=("rule:system_reader_api"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Allow all filters when listing servers", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/servers"}, - {"method": "GET", "path": "/servers/detail"}, - ], - ), - base.APIRule( - name="os_compute_api:servers:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show a server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}"}], - ), - base.APIRule( - name="os_compute_api:servers:show:host_status", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin or role:reader or role:admin and project_id:%(project_id)s"), - description="\n#Show a server with additional host status information.\n#\n#This means host_status will be shown irrespective of status value. If showing\n#only host_status UNKNOWN is desired, use the\n#``os_compute_api:servers:show:host_status:unknown-only`` policy rule.\n#\n#Microvision 2.75 added the ``host_status`` attribute in the\n#``PUT /servers/{server_id}`` and ``POST /servers/{server_id}/action (rebuild)``\n#API responses which are also controlled by this policy rule, like the\n#``GET /servers*`` APIs.\n#", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{server_id}"}, - {"method": "GET", "path": "/servers/detail"}, - {"method": "PUT", "path": "/servers/{server_id}"}, - {"method": "POST", "path": "/servers/{server_id}/action (rebuild)"}, - ], - ), - base.APIRule( - name="os_compute_api:servers:show:host_status:unknown-only", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="\n#Show a server with additional host status information, only if host status is\n#UNKNOWN.\n#\n#This policy rule will only be enforced when the\n#``os_compute_api:servers:show:host_status`` policy rule does not pass for the\n#request. An example policy configuration could be where the\n#``os_compute_api:servers:show:host_status`` rule is set to allow admin-only and\n#the ``os_compute_api:servers:show:host_status:unknown-only`` rule is set to\n#allow everyone.\n#", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{server_id}"}, - {"method": "GET", "path": "/servers/detail"}, - {"method": "PUT", "path": "/servers/{server_id}"}, - {"method": "POST", "path": "/servers/{server_id}/action (rebuild)"}, - ], - ), - base.APIRule( - name="os_compute_api:servers:create", - check_str=("rule:project_member_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a server", - scope_types=["project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:create:forced_host", - check_str=("rule:project_admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="\n#Create a server on the specified host and/or node.\n#\n#In this case, the server is forced to launch on the specified\n#host and/or node by bypassing the scheduler filters unlike the\n#``compute:servers:create:requested_destination`` rule.\n#", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="compute:servers:create:requested_destination", - check_str=("rule:project_admin_api"), - basic_check_str=("role:admin or role:admin and project_id:%(project_id)s"), - description="\n#Create a server on the requested compute service host and/or\n#hypervisor_hostname.\n#\n#In this case, the requested host and/or hypervisor_hostname is\n#validated by the scheduler filters unlike the\n#``os_compute_api:servers:create:forced_host`` rule.\n#", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:create:attach_volume", - check_str=("rule:project_member_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a server with the requested volume attached to it", - scope_types=["project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:create:attach_network", - check_str=("rule:project_member_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a server with the requested network attached to it", - scope_types=["project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:create:trusted_certs", - check_str=("rule:project_member_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a server with trusted image certificate IDs", - scope_types=["project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="os_compute_api:servers:create:zero_disk_flavor", - check_str=("rule:project_admin_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="\n#This rule controls the compute API validation behavior of creating a server\n#with a flavor that has 0 disk, indicating the server should be volume-backed.\n#\n#For a flavor with disk=0, the root disk will be set to exactly the size of the\n#image used to deploy the instance. However, in this case the filter_scheduler\n#cannot select the compute host based on the virtual image size. Therefore, 0\n#should only be used for volume booted instances or for testing purposes.\n#\n#WARNING: It is a potential security exposure to enable this policy rule\n#if users can upload their own images since repeated attempts to\n#create a disk=0 flavor instance with a large image can exhaust\n#the local disk of the compute (or shared storage cluster). See bug\n#https://bugs.launchpad.net/nova/+bug/1739646 for details.\n#", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers"}], - ), - base.APIRule( - name="network:attach_external_network", - check_str=("rule:project_admin_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Attach an unshared external network to a server", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/servers"}, - {"method": "POST", "path": "/servers/{server_id}/os-interface"}, - ], - ), - base.APIRule( - name="os_compute_api:servers:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete a server", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/servers/{server_id}"}], - ), - base.APIRule( - name="os_compute_api:servers:update", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a server", - scope_types=["system", "project"], - operations=[{"method": "PUT", "path": "/servers/{server_id}"}], - ), - base.APIRule( - name="os_compute_api:servers:confirm_resize", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Confirm a server resize", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (confirmResize)"}], - ), - base.APIRule( - name="os_compute_api:servers:revert_resize", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Revert a server resize", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (revertResize)"}], - ), - base.APIRule( - name="os_compute_api:servers:reboot", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Reboot a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (reboot)"}], - ), - base.APIRule( - name="os_compute_api:servers:resize", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Resize a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (resize)"}], - ), - base.APIRule( - name="compute:servers:resize:cross_cell", - check_str=("!"), - basic_check_str=("!"), - description="Resize a server across cells. By default, this is disabled for all users and recommended to be tested in a deployment for admin users before opening it up to non-admin users. Resizing within a cell is the default preferred behavior even if this is enabled. ", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (resize)"}], - ), - base.APIRule( - name="os_compute_api:servers:rebuild", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Rebuild a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (rebuild)"}], - ), - base.APIRule( - name="os_compute_api:servers:rebuild:trusted_certs", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Rebuild a server with trusted image certificate IDs", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (rebuild)"}], - ), - base.APIRule( - name="os_compute_api:servers:create_image", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create an image from a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (createImage)"}], - ), - base.APIRule( - name="os_compute_api:servers:create_image:allow_volume_backed", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create an image from a volume backed server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (createImage)"}], - ), - base.APIRule( - name="os_compute_api:servers:start", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Start a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (os-start)"}], - ), - base.APIRule( - name="os_compute_api:servers:stop", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Stop a server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (os-stop)"}], - ), - base.APIRule( - name="os_compute_api:servers:trigger_crash_dump", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Trigger crash dump in a server", - scope_types=["system", "project"], - operations=[ - {"method": "POST", "path": "/servers/{server_id}/action (trigger_crash_dump)"}, - ], - ), - base.APIRule( - name="os_compute_api:servers:migrations:show", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Show details for an in-progress live migration for a given server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/migrations/{migration_id}"}], - ), - base.APIRule( - name="os_compute_api:servers:migrations:force_complete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Force an in-progress live migration for a given server to complete", - scope_types=["system", "project"], - operations=[ - { - "method": "POST", - "path": "/servers/{server_id}/migrations/{migration_id}/action (force_complete)", - }, - ], - ), - base.APIRule( - name="os_compute_api:servers:migrations:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Delete(Abort) an in-progress live migration", - scope_types=["system", "project"], - operations=[ - {"method": "DELETE", "path": "/servers/{server_id}/migrations/{migration_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:servers:migrations:index", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="Lists in-progress live migrations for a given server", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/migrations"}], - ), - base.APIRule( - name="os_compute_api:os-services:list", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List all running Compute services in a region.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-services"}], - ), - base.APIRule( - name="os_compute_api:os-services:update", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update a Compute service.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/os-services/{service_id}"}], - ), - base.APIRule( - name="os_compute_api:os-services:delete", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Delete a Compute service.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/os-services/{service_id}"}], - ), - base.APIRule( - name="os_compute_api:os-shelve:shelve", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Shelve server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (shelve)"}], - ), - base.APIRule( - name="os_compute_api:os-shelve:unshelve", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Unshelve (restore) shelved server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (unshelve)"}], - ), - base.APIRule( - name="os_compute_api:os-shelve:shelve_offload", - check_str=("rule:system_admin_api"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Shelf-offload (remove) server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (shelveOffload)"}], - ), - base.APIRule( - name="os_compute_api:os-simple-tenant-usage:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show usage statistics for a specific tenant", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-simple-tenant-usage/{tenant_id}"}], - ), - base.APIRule( - name="os_compute_api:os-simple-tenant-usage:list", - check_str=("rule:system_reader_api"), - basic_check_str=("role:admin or role:reader"), - description="List per tenant usage statistics for all tenants", - scope_types=["system"], - operations=[{"method": "GET", "path": "/os-simple-tenant-usage"}], - ), - base.APIRule( - name="os_compute_api:os-suspend-server:resume", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Resume suspended server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (resume)"}], - ), - base.APIRule( - name="os_compute_api:os-suspend-server:suspend", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Suspend server", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/action (suspend)"}], - ), - base.APIRule( - name="os_compute_api:os-tenant-networks:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List project networks.\n#\n#This API is proxy calls to the Network service. This is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-tenant-networks"}], - ), - base.APIRule( - name="os_compute_api:os-tenant-networks:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show project network details.\n#\n#This API is proxy calls to the Network service. This is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-tenant-networks/{network_id}"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List volumes.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-volumes"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create volume.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/os-volumes"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:detail", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List volumes detail.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-volumes/detail"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show volume.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-volumes/{volume_id}"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete volume.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-volumes/{volume_id}"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:snapshots:list", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List snapshots.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-snapshots"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:snapshots:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create snapshots.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/os-snapshots"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:snapshots:detail", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List snapshots details.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-snapshots/detail"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:snapshots:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show snapshot.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/os-snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="os_compute_api:os-volumes:snapshots:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Delete snapshot.\n#\n#This API is a proxy call to the Volume service. It is deprecated.", - scope_types=["system", "project"], - operations=[{"method": "DELETE", "path": "/os-snapshots/{snapshot_id}"}], - ), - base.APIRule( - name="os_compute_api:os-volumes-attachments:index", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List volume attachments for an instance", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/servers/{server_id}/os-volume_attachments"}], - ), - base.APIRule( - name="os_compute_api:os-volumes-attachments:create", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Attach a volume to an instance", - scope_types=["system", "project"], - operations=[{"method": "POST", "path": "/servers/{server_id}/os-volume_attachments"}], - ), - base.APIRule( - name="os_compute_api:os-volumes-attachments:show", - check_str=("rule:system_or_project_reader"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show details of a volume attachment", - scope_types=["system", "project"], - operations=[ - {"method": "GET", "path": "/servers/{server_id}/os-volume_attachments/{volume_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-volumes-attachments:update", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a volume attachment.\n#New 'update' policy about 'swap + update' request (which is possible\n#only >2.85) only is checked. We expect to be\n#always superset of this policy permission.\n#", - scope_types=["system", "project"], - operations=[ - {"method": "PUT", "path": "/servers/{server_id}/os-volume_attachments/{volume_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-volumes-attachments:swap", - check_str=("rule:system_admin_api"), - basic_check_str=("role:admin"), - description="Update a volume attachment with a different volumeId", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/servers/{server_id}/os-volume_attachments/{volume_id}"}, - ], - ), - base.APIRule( - name="os_compute_api:os-volumes-attachments:delete", - check_str=("rule:system_admin_or_owner"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Detach a volume from an instance", - scope_types=["system", "project"], - operations=[ - { - "method": "DELETE", - "path": "/servers/{server_id}/os-volume_attachments/{volume_id}", - }, - ], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/octavia.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/octavia.py deleted file mode 100644 index bb02bd2..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/octavia.py +++ /dev/null @@ -1,860 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="system-admin", - check_str=("role:admin and system_scope:all"), - description="No description", - ), - base.Rule( - name="system-reader", - check_str=("role:reader and system_scope:all"), - description="No description", - ), - base.Rule( - name="project-member", - check_str=("role:member and project_id:%(project_id)s"), - description="No description", - ), - base.Rule( - name="project-reader", - check_str=("role:reader and project_id:%(project_id)s"), - description="No description", - ), - base.Rule( - name="context_is_admin", - check_str=("role:load-balancer_admin or rule:system-admin"), - description="No description", - ), - base.Rule( - name="load-balancer:owner", - check_str=("project_id:%(project_id)s"), - description="No description", - ), - base.Rule( - name="load-balancer:observer_and_owner", - check_str=("role:load-balancer_observer and rule:project-reader"), - description="No description", - ), - base.Rule( - name="load-balancer:global_observer", - check_str=("role:load-balancer_global_observer or rule:system-reader"), - description="No description", - ), - base.Rule( - name="load-balancer:member_and_owner", - check_str=("role:load-balancer_member and rule:project-member"), - description="No description", - ), - base.Rule( - name="load-balancer:admin", - check_str=("is_admin:True or role:load-balancer_admin or rule:system-admin"), - description="No description", - ), - base.Rule( - name="load-balancer:read", - check_str=( - "rule:load-balancer:observer_and_owner or rule:load-balancer:global_observer or rule:load-balancer:member_and_owner or rule:load-balancer:admin" - ), - description="No description", - ), - base.Rule( - name="load-balancer:read-global", - check_str=("rule:load-balancer:global_observer or rule:load-balancer:admin"), - description="No description", - ), - base.Rule( - name="load-balancer:write", - check_str=("rule:load-balancer:member_and_owner or rule:load-balancer:admin"), - description="No description", - ), - base.Rule( - name="load-balancer:read-quota", - check_str=( - "rule:load-balancer:observer_and_owner or rule:load-balancer:global_observer or rule:load-balancer:member_and_owner or role:load-balancer_quota_admin or rule:load-balancer:admin" - ), - description="No description", - ), - base.Rule( - name="load-balancer:read-quota-global", - check_str=( - "rule:load-balancer:global_observer or role:load-balancer_quota_admin or rule:load-balancer:admin" - ), - description="No description", - ), - base.Rule( - name="load-balancer:write-quota", - check_str=("role:load-balancer_quota_admin or rule:load-balancer:admin"), - description="No description", - ), - base.APIRule( - name="os_load-balancer_api:flavor:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Flavors", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2.0/lbaas/flavors"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor:post", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Create a Flavor", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2.0/lbaas/flavors"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor:put", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Update a Flavor", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2.0/lbaas/flavors/{flavor_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Flavor details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2.0/lbaas/flavors/{flavor_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor:delete", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Remove a Flavor", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2.0/lbaas/flavors/{flavor_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor-profile:get_all", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="List Flavor Profiles", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2.0/lbaas/flavorprofiles"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor-profile:post", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Create a Flavor Profile", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2.0/lbaas/flavorprofiles"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor-profile:put", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Update a Flavor Profile", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2.0/lbaas/flavorprofiles/{flavor_profile_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor-profile:get_one", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="Show Flavor Profile details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2.0/lbaas/flavorprofiles/{flavor_profile_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:flavor-profile:delete", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Remove a Flavor Profile", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/v2.0/lbaas/flavorprofiles/{flavor_profile_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Availability Zones", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2.0/lbaas/availabilityzones"}], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone:post", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Create an Availability Zone", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2.0/lbaas/availabilityzones"}], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone:put", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Update an Availability Zone", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/v2.0/lbaas/availabilityzones/{availability_zone_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Availability Zone details", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v2.0/lbaas/availabilityzones/{availability_zone_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone:delete", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Remove an Availability Zone", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/v2.0/lbaas/availabilityzones/{availability_zone_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone-profile:get_all", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="List Availability Zones", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2.0/lbaas/availabilityzoneprofiles"}], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone-profile:post", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Create an Availability Zone", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2.0/lbaas/availabilityzoneprofiles"}], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone-profile:put", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Update an Availability Zone", - scope_types=["project"], - operations=[ - { - "method": "PUT", - "path": "/v2.0/lbaas/availabilityzoneprofiles/{availability_zone_profile_id}", - }, - ], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone-profile:get_one", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="Show Availability Zone details", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v2.0/lbaas/availabilityzoneprofiles/{availability_zone_profile_id}", - }, - ], - ), - base.APIRule( - name="os_load-balancer_api:availability-zone-profile:delete", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Remove an Availability Zone", - scope_types=["project"], - operations=[ - { - "method": "DELETE", - "path": "/v2.0/lbaas/availabilityzoneprofiles/{availability_zone_profile_id}", - }, - ], - ), - base.APIRule( - name="os_load-balancer_api:healthmonitor:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Health Monitors of a Pool", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/healthmonitors"}], - ), - base.APIRule( - name="os_load-balancer_api:healthmonitor:get_all-global", - check_str=("rule:load-balancer:read-global"), - basic_check_str=("role:admin or role:reader"), - description="List Health Monitors including resources owned by others", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/healthmonitors"}], - ), - base.APIRule( - name="os_load-balancer_api:healthmonitor:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a Health Monitor", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/healthmonitors"}], - ), - base.APIRule( - name="os_load-balancer_api:healthmonitor:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Health Monitor details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/healthmonitors/{healthmonitor_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:healthmonitor:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a Health Monitor", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/healthmonitors/{healthmonitor_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:healthmonitor:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a Health Monitor", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/lbaas/healthmonitors/{healthmonitor_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:l7policy:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List L7 Policys", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/l7policies"}], - ), - base.APIRule( - name="os_load-balancer_api:l7policy:get_all-global", - check_str=("rule:load-balancer:read-global"), - basic_check_str=("role:admin or role:reader"), - description="List L7 Policys including resources owned by others", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/l7policies"}], - ), - base.APIRule( - name="os_load-balancer_api:l7policy:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a L7 Policy", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/l7policies"}], - ), - base.APIRule( - name="os_load-balancer_api:l7policy:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show L7 Policy details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/l7policies/{l7policy_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:l7policy:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a L7 Policy", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/l7policies/{l7policy_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:l7policy:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a L7 Policy", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/lbaas/l7policies/{l7policy_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:l7rule:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List L7 Rules", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/l7policies/{l7policy_id}/rules"}], - ), - base.APIRule( - name="os_load-balancer_api:l7rule:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a L7 Rule", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/l7policies/{l7policy_id}/rules"}], - ), - base.APIRule( - name="os_load-balancer_api:l7rule:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show L7 Rule details", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v2/lbaas/l7policies/{l7policy_id}/rules/{l7rule_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:l7rule:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a L7 Rule", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/v2/lbaas/l7policies/{l7policy_id}/rules/{l7rule_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:l7rule:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a L7 Rule", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/v2/lbaas/l7policies/{l7policy_id}/rules/{l7rule_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:listener:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Listeners", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/listeners"}], - ), - base.APIRule( - name="os_load-balancer_api:listener:get_all-global", - check_str=("rule:load-balancer:read-global"), - basic_check_str=("role:admin or role:reader"), - description="List Listeners including resources owned by others", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/listeners"}], - ), - base.APIRule( - name="os_load-balancer_api:listener:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a Listener", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/listeners"}], - ), - base.APIRule( - name="os_load-balancer_api:listener:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Listener details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/listeners/{listener_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:listener:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a Listener", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/listeners/{listener_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:listener:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a Listener", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/lbaas/listeners/{listener_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:listener:get_stats", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Listener statistics", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/listeners/{listener_id}/stats"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Load Balancers", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/loadbalancers"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:get_all-global", - check_str=("rule:load-balancer:read-global"), - basic_check_str=("role:admin or role:reader"), - description="List Load Balancers including resources owned by others", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/loadbalancers"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a Load Balancer", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/loadbalancers"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Load Balancer details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/loadbalancers/{loadbalancer_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a Load Balancer", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/loadbalancers/{loadbalancer_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a Load Balancer", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/lbaas/loadbalancers/{loadbalancer_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:get_stats", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Load Balancer statistics", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/loadbalancers/{loadbalancer_id}/stats"}], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:get_status", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Load Balancer status", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v2/lbaas/loadbalancers/{loadbalancer_id}/status"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:loadbalancer:put_failover", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Failover a Load Balancer", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/v2/lbaas/loadbalancers/{loadbalancer_id}/failover"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:member:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Members of a Pool", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/pools/{pool_id}/members"}], - ), - base.APIRule( - name="os_load-balancer_api:member:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a Member", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/pools/{pool_id}/members"}], - ), - base.APIRule( - name="os_load-balancer_api:member:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Member details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/pools/{pool_id}/members/{member_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:member:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a Member", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/pools/{pool_id}/members/{member_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:member:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a Member", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/v2/lbaas/pools/{pool_id}/members/{member_id}"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:pool:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Pools", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/pools"}], - ), - base.APIRule( - name="os_load-balancer_api:pool:get_all-global", - check_str=("rule:load-balancer:read-global"), - basic_check_str=("role:admin or role:reader"), - description="List Pools including resources owned by others", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/pools"}], - ), - base.APIRule( - name="os_load-balancer_api:pool:post", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Create a Pool", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v2/lbaas/pools"}], - ), - base.APIRule( - name="os_load-balancer_api:pool:get_one", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Pool details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/pools/{pool_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:pool:put", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Update a Pool", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/pools/{pool_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:pool:delete", - check_str=("rule:load-balancer:write"), - basic_check_str=( - "role:admin or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s" - ), - description="Remove a Pool", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/lbaas/pools/{pool_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:provider:get_all", - check_str=("rule:load-balancer:read"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List enabled providers", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/providers"}], - ), - base.APIRule( - name="os_load-balancer_api:quota:get_all", - check_str=("rule:load-balancer:read-quota"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="List Quotas", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/quotas"}], - ), - base.APIRule( - name="os_load-balancer_api:quota:get_all-global", - check_str=("rule:load-balancer:read-quota-global"), - basic_check_str=("role:admin or role:reader"), - description="List Quotas including resources owned by others", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/quotas"}], - ), - base.APIRule( - name="os_load-balancer_api:quota:get_one", - check_str=("rule:load-balancer:read-quota"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Quota details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/quotas/{project_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:quota:put", - check_str=("rule:load-balancer:write-quota"), - basic_check_str=("role:admin"), - description="Update a Quota", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/lbaas/quotas/{project_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:quota:delete", - check_str=("rule:load-balancer:write-quota"), - basic_check_str=("role:admin"), - description="Reset a Quota", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/lbaas/quotas/{project_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:quota:get_defaults", - check_str=("rule:load-balancer:read-quota"), - basic_check_str=( - "role:admin or role:reader or role:admin and project_id:%(project_id)s or role:member and project_id:%(project_id)s or role:reader and project_id:%(project_id)s" - ), - description="Show Default Quota for a Project", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/lbaas/quotas/{project_id}/default"}], - ), - base.APIRule( - name="os_load-balancer_api:amphora:get_all", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="List Amphorae", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/octavia/amphorae"}], - ), - base.APIRule( - name="os_load-balancer_api:amphora:get_one", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="Show Amphora details", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/octavia/amphorae/{amphora_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:amphora:delete", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Delete an Amphora", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v2/octavia/amphorae/{amphora_id}"}], - ), - base.APIRule( - name="os_load-balancer_api:amphora:put_config", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Update Amphora Agent Configuration", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/octavia/amphorae/{amphora_id}/config"}], - ), - base.APIRule( - name="os_load-balancer_api:amphora:put_failover", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin"), - description="Failover Amphora", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v2/octavia/amphorae/{amphora_id}/failover"}], - ), - base.APIRule( - name="os_load-balancer_api:amphora:get_stats", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="Show Amphora statistics", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v2/octavia/amphorae/{amphora_id}/stats"}], - ), - base.APIRule( - name="os_load-balancer_api:provider-flavor:get_all", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="List the provider flavor capabilities.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v2/lbaas/providers/{provider}/flavor_capabilities"}, - ], - ), - base.APIRule( - name="os_load-balancer_api:provider-availability-zone:get_all", - check_str=("rule:load-balancer:admin"), - basic_check_str=("role:admin or role:reader"), - description="List the provider availability zone capabilities.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v2/lbaas/providers/{provider}/availability_zone_capabilities", - }, - ], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/panko.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/panko.py deleted file mode 100644 index 7494580..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/panko.py +++ /dev/null @@ -1,40 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="context_is_admin", - check_str=("role:admin"), - description="No description", - ), - base.APIRule( - name="segregation", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Return the user and project the requestshould be limited to", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/v2/events"}, - {"method": "GET", "path": "/v2/events/{message_id}"}, - ], - ), - base.APIRule( - name="telemetry:events:index", - check_str=(""), - basic_check_str=("@"), - description="Return all events matching the query filters.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/events"}], - ), - base.APIRule( - name="telemetry:events:show", - check_str=(""), - basic_check_str=("@"), - description="Return a single event with the given message id.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/v2/events/{message_id}"}], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/placement.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/placement.py deleted file mode 100644 index ed92da5..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/placement.py +++ /dev/null @@ -1,290 +0,0 @@ -# flake8: noqa - -from . import base - -list_rules = ( - base.Rule( - name="admin_api", - check_str=("role:admin"), - description="Default rule for most placement APIs.", - ), - base.APIRule( - name="placement:resource_providers:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource providers.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers"}], - ), - base.APIRule( - name="placement:resource_providers:create", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create resource provider.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/resource_providers"}], - ), - base.APIRule( - name="placement:resource_providers:show", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show resource provider.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers/{uuid}"}], - ), - base.APIRule( - name="placement:resource_providers:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update resource provider.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/resource_providers/{uuid}"}], - ), - base.APIRule( - name="placement:resource_providers:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete resource provider.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/resource_providers/{uuid}"}], - ), - base.APIRule( - name="placement:resource_classes:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource classes.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_classes"}], - ), - base.APIRule( - name="placement:resource_classes:create", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create resource class.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/resource_classes"}], - ), - base.APIRule( - name="placement:resource_classes:show", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show resource class.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_classes/{name}"}], - ), - base.APIRule( - name="placement:resource_classes:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update resource class.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/resource_classes/{name}"}], - ), - base.APIRule( - name="placement:resource_classes:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete resource class.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/resource_classes/{name}"}], - ), - base.APIRule( - name="placement:resource_providers:inventories:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource provider inventories.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers/{uuid}/inventories"}], - ), - base.APIRule( - name="placement:resource_providers:inventories:create", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Create one resource provider inventory.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/resource_providers/{uuid}/inventories"}], - ), - base.APIRule( - name="placement:resource_providers:inventories:show", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show resource provider inventory.", - scope_types=["system"], - operations=[ - {"method": "GET", "path": "/resource_providers/{uuid}/inventories/{resource_class}"}, - ], - ), - base.APIRule( - name="placement:resource_providers:inventories:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update resource provider inventory.", - scope_types=["system"], - operations=[ - {"method": "PUT", "path": "/resource_providers/{uuid}/inventories"}, - {"method": "PUT", "path": "/resource_providers/{uuid}/inventories/{resource_class}"}, - ], - ), - base.APIRule( - name="placement:resource_providers:inventories:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete resource provider inventory.", - scope_types=["system"], - operations=[ - {"method": "DELETE", "path": "/resource_providers/{uuid}/inventories"}, - { - "method": "DELETE", - "path": "/resource_providers/{uuid}/inventories/{resource_class}", - }, - ], - ), - base.APIRule( - name="placement:resource_providers:aggregates:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource provider aggregates.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers/{uuid}/aggregates"}], - ), - base.APIRule( - name="placement:resource_providers:aggregates:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update resource provider aggregates.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/resource_providers/{uuid}/aggregates"}], - ), - base.APIRule( - name="placement:resource_providers:usages", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource provider usages.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers/{uuid}/usages"}], - ), - base.APIRule( - name="placement:usages", - check_str=( - "(role:reader and system_scope:all) or (role:reader and project_id:%(project_id)s)" - ), - basic_check_str=("role:admin or role:reader"), - description="List total resource usages for a given project.", - scope_types=["system", "project"], - operations=[{"method": "GET", "path": "/usages"}], - ), - base.APIRule( - name="placement:traits:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List traits.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/traits"}], - ), - base.APIRule( - name="placement:traits:show", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="Show trait.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/traits/{name}"}], - ), - base.APIRule( - name="placement:traits:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update trait.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/traits/{name}"}], - ), - base.APIRule( - name="placement:traits:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete trait.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/traits/{name}"}], - ), - base.APIRule( - name="placement:resource_providers:traits:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource provider traits.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers/{uuid}/traits"}], - ), - base.APIRule( - name="placement:resource_providers:traits:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update resource provider traits.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/resource_providers/{uuid}/traits"}], - ), - base.APIRule( - name="placement:resource_providers:traits:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete resource provider traits.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/resource_providers/{uuid}/traits"}], - ), - base.APIRule( - name="placement:allocations:manage", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Manage allocations.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/allocations"}], - ), - base.APIRule( - name="placement:allocations:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List allocations.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/allocations/{consumer_uuid}"}], - ), - base.APIRule( - name="placement:allocations:update", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Update allocations.", - scope_types=["system"], - operations=[{"method": "PUT", "path": "/allocations/{consumer_uuid}"}], - ), - base.APIRule( - name="placement:allocations:delete", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Delete allocations.", - scope_types=["system"], - operations=[{"method": "DELETE", "path": "/allocations/{consumer_uuid}"}], - ), - base.APIRule( - name="placement:resource_providers:allocations:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List resource provider allocations.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/resource_providers/{uuid}/allocations"}], - ), - base.APIRule( - name="placement:allocation_candidates:list", - check_str=("role:reader and system_scope:all"), - basic_check_str=("role:admin or role:reader"), - description="List allocation candidates.", - scope_types=["system"], - operations=[{"method": "GET", "path": "/allocation_candidates"}], - ), - base.APIRule( - name="placement:reshaper:reshape", - check_str=("role:admin and system_scope:all"), - basic_check_str=("role:admin"), - description="Reshape Inventory and Allocations.", - scope_types=["system"], - operations=[{"method": "POST", "path": "/reshaper"}], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/policies/trove.py b/libs/skyline-policy-manager/skyline_policy_manager/policies/trove.py deleted file mode 100644 index c78928e..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/policies/trove.py +++ /dev/null @@ -1,756 +0,0 @@ -from . import base - -list_rules = ( - base.Rule( - name="admin", - check_str=("role:admin or is_admin:True"), - description="Must be an administrator.", - ), - base.Rule( - name="admin_or_owner", - check_str=("rule:admin or project_id:%(tenant)s"), - description="Must be an administrator or owner of the object.", - ), - base.Rule( - name="default", - check_str=("rule:admin_or_owner"), - description="Must be an administrator or owner of the object.", - ), - base.APIRule( - name="trove:instance:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a database instance.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/instances"}], - ), - base.APIRule( - name="trove:instance:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a database instance.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/instances/{instance_id}"}], - ), - base.APIRule( - name="trove:instance:force_delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Forcibly delete a database instance.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/instances/{instance_id}"}], - ), - base.APIRule( - name="trove:instance:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List database instances.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/instances"}], - ), - base.APIRule( - name="trove:instance:detail", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List database instances with details.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/instances/detail"}], - ), - base.APIRule( - name="trove:instance:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get details of a specific database instance.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}"}], - ), - base.APIRule( - name="trove:instance:update", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Update a database instance to attach/detach configuration", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/v1.0/{account_id}/instances/{instance_id}"}, - {"method": "POST", "path": "/v1.0/{account_id}/instances"}, - ], - ), - base.APIRule( - name="trove:instance:edit", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Updates the instance to set or unset one or more attributes.", - scope_types=["project"], - operations=[{"method": "PATCH", "path": "/v1.0/{account_id}/instances/{instance_id}"}], - ), - base.APIRule( - name="trove:instance:restart", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Restart a database instance.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/v1.0/{account_id}/instances/{instance_id}/action (restart)", - }, - ], - ), - base.APIRule( - name="trove:instance:resize_volume", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Resize a database instance volume.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/v1.0/{account_id}/instances/{instance_id}/action (resize)", - }, - ], - ), - base.APIRule( - name="trove:instance:resize_flavor", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Resize a database instance flavor.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/v1.0/{account_id}/instances/{instance_id}/action (resize)", - }, - ], - ), - base.APIRule( - name="trove:instance:reset_status", - check_str=("(role:admin or is_admin:True)"), - description="Reset the status of a database instance to ERROR.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/v1.0/{account_id}/instances/{instance_id}/action (reset_status)", - }, - ], - ), - base.APIRule( - name="trove:instance:promote_to_replica_source", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Promote instance to replica source.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/v1.0/{account_id}/instances/{instance_id}/action (promote_to_replica_source)", # noqa - }, - ], - ), - base.APIRule( - name="trove:instance:eject_replica_source", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Eject the replica source from its replica set.", - scope_types=["project"], - operations=[ - { - "method": "POST", - "path": "/v1.0/{account_id}/instances/{instance_id}/action (eject_replica_source)", - }, - ], - ), - base.APIRule( - name="trove:instance:configuration", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get the default configuration template applied to the instance.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/configuration"}, - ], - ), - base.APIRule( - name="trove:instance:guest_log_list", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get all informations about all logs of a database instance.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/log"}], - ), - base.APIRule( - name="trove:instance:backups", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get all backups of a database instance.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/backups"}, - ], - ), - base.APIRule( - name="trove:instance:module_list", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations about modules on a database instance.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/modules"}, - ], - ), - base.APIRule( - name="trove:instance:module_apply", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Apply modules to a database instance.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1.0/{account_id}/instances/{instance_id}/modules"}, - {"method": "POST", "path": "/v1.0/{account_id}/instances"}, - ], - ), - base.APIRule( - name="trove:instance:module_remove", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Remove a module from a database instance.", - scope_types=["project"], - operations=[ - { - "method": "DELETE", - "path": "/v1.0/{account_id}/instances/{instance_id}/modules/{module_id}", - }, - ], - ), - base.APIRule( - name="trove:instance:extension:root:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Enable the root user of a database instance.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1.0/{account_id}/instances/{instance_id}/root"}, - ], - ), - base.APIRule( - name="trove:instance:extension:root:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Disable the root user of a database instance.", - scope_types=["project"], - operations=[ - {"method": "DELETE", "path": "/v1.0/{account_id}/instances/{instance_id}/root"}, - ], - ), - base.APIRule( - name="trove:instance:extension:root:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Show whether the root user of a database instance has been ever enabled.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/root"}], - ), - base.APIRule( - name="trove:cluster:extension:root:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Enable the root user of the instances in a cluster.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/clusters/{cluster}/root"}], - ), - base.APIRule( - name="trove:cluster:extension:root:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Enable the root user of the instances in a cluster.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/clusters/{cluster}/root"}], - ), - base.APIRule( - name="trove:cluster:extension:root:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Disable the root of the instances in a cluster.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/clusters/{cluster}/root"}], - ), - base.APIRule( - name="trove:instance:extension:user:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create users for a database instance.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1.0/{account_id}/instances/{instance_id}/users"}, - {"method": "POST", "path": "/v1.0/{account_id}/instances"}, - ], - ), - base.APIRule( - name="trove:instance:extension:user:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a user from a database instance.", - scope_types=["project"], - operations=[ - { - "method": "DELETE", - "path": "/v1.0/{account_id}/instances/{instance_id}/users/{user}", - }, - ], - ), - base.APIRule( - name="trove:instance:extension:user:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get all users of a database instance.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/users"}, - ], - ), - base.APIRule( - name="trove:instance:extension:user:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get the information of a single user of a database instance.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/users/{user}"}, - ], - ), - base.APIRule( - name="trove:instance:extension:user:update", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Update attributes for a user of a database instance.", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/v1.0/{account_id}/instances/{instance_id}/users/{user}"}, - ], - ), - base.APIRule( - name="trove:instance:extension:user:update_all", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Update the password for one or more users a database instance.", - scope_types=["project"], - operations=[ - {"method": "PUT", "path": "/v1.0/{account_id}/instances/{instance_id}/users"}, - ], - ), - base.APIRule( - name="trove:instance:extension:user_access:update", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Grant access for a user to one or more databases.", - scope_types=["project"], - operations=[ - { - "method": "PUT", - "path": "/v1.0/{account_id}/instances/{instance_id}/users/{user}/databases", - }, - ], - ), - base.APIRule( - name="trove:instance:extension:user_access:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Revoke access for a user to a databases.", - scope_types=["project"], - operations=[ - { - "method": "DELETE", - "path": "/v1.0/{account_id}/instances/{instance_id}/users/{user}/databases/{database}", # noqa - }, - ], - ), - base.APIRule( - name="trove:instance:extension:user_access:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get permissions of a user", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/instances/{instance_id}/users/{user}/databases", - }, - ], - ), - base.APIRule( - name="trove:instance:extension:database:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a set of Schemas", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1.0/{account_id}/instances/{instance_id}/databases"}, - {"method": "POST", "path": "/v1.0/{account_id}/instances"}, - ], - ), - base.APIRule( - name="trove:instance:extension:database:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a schema from a database.", - scope_types=["project"], - operations=[ - { - "method": "DELETE", - "path": "/v1.0/{account_id}/instances/{instance_id}/databases/{database}", - }, - ], - ), - base.APIRule( - name="trove:instance:extension:database:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all schemas from a database.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/instances/{instance_id}/databases"}, - ], - ), - base.APIRule( - name="trove:instance:extension:database:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations of a schema(Currently Not Implemented).", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/instances/{instance_id}/databases/{database}", - }, - ], - ), - base.APIRule( - name="trove:cluster:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a cluster.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/clusters"}], - ), - base.APIRule( - name="trove:cluster:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a cluster.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/clusters/{cluster}"}], - ), - base.APIRule( - name="trove:cluster:force_delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Forcibly delete a cluster.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1.0/{account_id}/clusters/{cluster} (reset-status)"}, - ], - ), - base.APIRule( - name="trove:cluster:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all clusters", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/clusters"}], - ), - base.APIRule( - name="trove:cluster:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations of a cluster.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/clusters/{cluster}"}], - ), - base.APIRule( - name="trove:cluster:show_instance", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations of a instance in a cluster.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/clusters/{cluster}/instances/{instance}", - }, - ], - ), - base.APIRule( - name="trove:cluster:action", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Commit an action against a cluster", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/clusters/{cluster}"}], - ), - base.APIRule( - name="trove:cluster:reset-status", - check_str=("(role:admin or is_admin:True)"), - description="Reset the status of a cluster to NONE.", - scope_types=["project"], - operations=[ - {"method": "POST", "path": "/v1.0/{account_id}/clusters/{cluster} (reset-status)"}, - ], - ), - base.APIRule( - name="trove:backup:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a backup of a database instance.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/backups"}], - ), - base.APIRule( - name="trove:backup:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a backup of a database instance.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/backups/{backup}"}], - ), - base.APIRule( - name="trove:backup:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all backups.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/backups"}], - ), - base.APIRule( - name="trove:backup:index:all_projects", - check_str=("role:admin"), - description="List backups for all the projects.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/backups"}], - ), - base.APIRule( - name="trove:backup:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations of a backup.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/backups/{backup}"}], - ), - base.APIRule( - name="trove:backup_strategy:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a backup strategy.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/backup_strategies"}], - ), - base.APIRule( - name="trove:backup_strategy:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all backup strategies.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/backup_strategies"}], - ), - base.APIRule( - name="trove:backup_strategy:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete backup strategies.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/backup_strategies"}], - ), - base.APIRule( - name="trove:configuration:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a configuration group.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/configurations"}], - ), - base.APIRule( - name="trove:configuration:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a configuration group.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/configurations/{config}"}], - ), - base.APIRule( - name="trove:configuration:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all configuration groups.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/configurations"}], - ), - base.APIRule( - name="trove:configuration:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations of a configuration group.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/configurations/{config}"}], - ), - base.APIRule( - name="trove:configuration:instances", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all instances which a configuration group has be assigned to.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/configurations/{config}/instances"}, - ], - ), - base.APIRule( - name="trove:configuration:update", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Update a configuration group(the configuration group will be replaced completely).", # noqa - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v1.0/{account_id}/configurations/{config}"}], - ), - base.APIRule( - name="trove:configuration:edit", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Patch a configuration group.", - scope_types=["project"], - operations=[{"method": "PATCH", "path": "/v1.0/{account_id}/configurations/{config}"}], - ), - base.APIRule( - name="trove:configuration-parameter:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all parameters bind to a datastore version.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/{datastore}/versions/{version}/parameters", - }, - ], - ), - base.APIRule( - name="trove:configuration-parameter:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get a paramter of a datastore version.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/{datastore}/versions/{version}/parameters/{param}", # noqa - }, - ], - ), - base.APIRule( - name="trove:configuration-parameter:index_by_version", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all paramters bind to a datastore version by the id of the version(datastore is not provided).", # noqa - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/versions/{version}/paramters", - }, - ], - ), - base.APIRule( - name="trove:configuration-parameter:show_by_version", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get a paramter of a datastore version by it names and the id of the version(datastore is not provided).", # noqa - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/versions/{version}/paramters/{param}", - }, - ], - ), - base.APIRule( - name="trove:datastore:index", - check_str=(""), - description="List all datastores.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/datastores"}], - ), - base.APIRule( - name="trove:datastore:show", - check_str=(""), - description="Get informations of a datastore.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/datastores/{datastore}"}], - ), - base.APIRule( - name="trove:datastore:delete", - check_str=("(role:admin or is_admin:True)"), - description="Delete a datastore.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/datastores/{datastore}"}], - ), - base.APIRule( - name="trove:datastore:version_show", - check_str=(""), - description="Get a version of a datastore by the version id.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/{datastore}/versions/{version}", - }, - ], - ), - base.APIRule( - name="trove:datastore:version_show_by_uuid", - check_str=(""), - description="Get a version of a datastore by the version id(without providing the datastore id).", # noqa - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/datastores/versions/{version}"}, - ], - ), - base.APIRule( - name="trove:datastore:version_index", - check_str=(""), - description="Get all versions of a datastore.", - scope_types=["project"], - operations=[ - {"method": "GET", "path": "/v1.0/{account_id}/datastores/{datastore}/versions"}, - ], - ), - base.APIRule( - name="trove:datastore:list_associated_flavors", - check_str=(""), - description="List all flavors associated with a datastore version.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/{datastore}/versions/{version}/flavors", - }, - ], - ), - base.APIRule( - name="trove:datastore:list_associated_volume_types", - check_str=(""), - description="List all volume-types associated with a datastore version.", - scope_types=["project"], - operations=[ - { - "method": "GET", - "path": "/v1.0/{account_id}/datastores/{datastore}/versions/{version}/volume-types", # noqa - }, - ], - ), - base.APIRule( - name="trove:flavor:index", - check_str=(""), - description="List all flavors.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/flavors"}], - ), - base.APIRule( - name="trove:flavor:show", - check_str=(""), - description="Get information of a flavor.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/flavors/{flavor}"}], - ), - base.APIRule( - name="trove:limits:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all absolute and rate limit informations.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/limits"}], - ), - base.APIRule( - name="trove:module:create", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Create a module.", - scope_types=["project"], - operations=[{"method": "POST", "path": "/v1.0/{account_id}/modules"}], - ), - base.APIRule( - name="trove:module:delete", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Delete a module.", - scope_types=["project"], - operations=[{"method": "DELETE", "path": "/v1.0/{account_id}/modules/{module}"}], - ), - base.APIRule( - name="trove:module:index", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all modules.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/modules"}], - ), - base.APIRule( - name="trove:module:show", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Get informations of a module.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/modules/{module}"}], - ), - base.APIRule( - name="trove:module:instances", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="List all instances to which a module is applied.", - scope_types=["project"], - operations=[{"method": "GET", "path": "/v1.0/{account_id}/modules/{module}/instances"}], - ), - base.APIRule( - name="trove:module:update", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Update a module.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v1.0/{account_id}/modules/{module}"}], - ), - base.APIRule( - name="trove:module:reapply", - check_str=("((role:admin or is_admin:True) or project_id:%(project_id)s)"), - description="Reapply a module to all instances.", - scope_types=["project"], - operations=[{"method": "PUT", "path": "/v1.0/{account_id}/modules/{module}/instances"}], - ), -) - -__all__ = ("list_rules",) diff --git a/libs/skyline-policy-manager/skyline_policy_manager/py.typed b/libs/skyline-policy-manager/skyline_policy_manager/py.typed deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-policy-manager/skyline_policy_manager/schema.py b/libs/skyline-policy-manager/skyline_policy_manager/schema.py deleted file mode 100644 index 961ac8d..0000000 --- a/libs/skyline-policy-manager/skyline_policy_manager/schema.py +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from enum import Enum -from typing import List, TypedDict - -from pydantic import BaseModel - - -class ScopeType(str, Enum): - system = "system" - domain = "domain" - project = "project" - - -class ScopeTypesSchema(BaseModel): - __root__: List[ScopeType] - - -class Method(str, Enum): - GET = "GET" - POST = "POST" - PUT = "PUT" - PATCH = "PATCH" - DELETE = "DELETE" - HEAD = "HEAD" - - -class Operation(TypedDict): - method: str - path: str - - -class OperationSchema(BaseModel): - method: Method - path: str - - -class OperationsSchema(BaseModel): - __root__: List[OperationSchema] - - -__all__ = ("ScopeType", "ScopeTypesSchema", "Method", "Operation", "OperationsSchema") diff --git a/libs/skyline-policy-manager/tests/__init__.py b/libs/skyline-policy-manager/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-policy-manager/tests/conftest.py b/libs/skyline-policy-manager/tests/conftest.py deleted file mode 100644 index 636f462..0000000 --- a/libs/skyline-policy-manager/tests/conftest.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from typing import TYPE_CHECKING - -from _pytest.mark import ParameterSet -from tests.models import TestData - -if TYPE_CHECKING: - from _pytest.python import Metafunc - - -def pytest_generate_tests(metafunc: Metafunc) -> None: - for marker in metafunc.definition.iter_markers(name="ddt"): - test_data: TestData - for test_data in marker.args: - argument_length = len(test_data.arguments) - argvalues = [] - for argument_data in test_data.argument_data_set: - if len(argument_data.values) != argument_length: - raise ValueError( - f'Argument data "{argument_data.id}" of method ' - f'"{metafunc.function.__name__}" doesn\'t match ' - "number of arguments.", - ) - argvalues.append( - ParameterSet( - id=argument_data.id, - marks=argument_data.marks, - values=argument_data.values, - ), - ) - - metafunc.parametrize(test_data.arguments, argvalues, indirect=test_data.indirect) diff --git a/libs/skyline-policy-manager/tests/fake.py b/libs/skyline-policy-manager/tests/fake.py deleted file mode 100644 index b00e2d8..0000000 --- a/libs/skyline-policy-manager/tests/fake.py +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -import sys -from dataclasses import asdict, dataclass, field -from typing import Dict, List - -from mimesis import Generic - -FAKER = Generic() - -FAKE_NS = "skyline_policy_manager.tests.mock_ns" - -FAKE_SERVICE_EPS = { - "cinder": ["cinder"], - "glance": ["glance"], - "heat": ["heat"], - "keystone": ["keystone"], - "neutron": ["neutron"], - "nova": ["nova"], -} - -current_module = sys.modules[__name__] - -for ep_names in FAKE_SERVICE_EPS.values(): - for ep_name in ep_names: - setattr(current_module, f"{ep_name}_list_rules", lambda: []) - - -@dataclass -class FakeOperation: - method: str = field( - default_factory=lambda: FAKER.choice(["GET", "POST", "PUT", "PATCH", "DELETE"]), - ) - path: str = field( - default_factory=lambda: FAKER.choice(["/resources", "/resources/{resource_id}"]), - ) - - -@dataclass -class FakeDocumentedRuleData: - name: str = field(default_factory=lambda: ":".join(FAKER.text.words())) - description: str = field(default_factory=lambda: FAKER.text.text()) - check_str: str = field( - default_factory=lambda: f'role:{FAKER.choice(["admin", "member", "reader"])}', - ) - scope_types: List[str] = field( - default_factory=lambda: FAKER.choice( - ["system", "domain", "project"], - length=FAKER.numbers.integer_number(1, 3), - unique=True, - ), - ) - operations: List[Dict[str, str]] = field( - default_factory=lambda: [ - asdict(FakeOperation()) for _ in range(FAKER.numbers.integer_number(1, 5)) - ], - ) - - -@dataclass -class FakeRuleData: - name: str = field(default_factory=lambda: ":".join(FAKER.text.words())) - description: str = field(default_factory=lambda: FAKER.text.text()) - check_str: str = field( - default_factory=lambda: f'role:{FAKER.choice(["admin", "member", "reader"])}', - ) - scope_types: List[str] = field( - default_factory=lambda: FAKER.choice( - ["system", "domain", "project"], - length=FAKER.numbers.integer_number(1, 3), - unique=True, - ), - ) diff --git a/libs/skyline-policy-manager/tests/models.py b/libs/skyline-policy-manager/tests/models.py deleted file mode 100644 index c7cb00a..0000000 --- a/libs/skyline-policy-manager/tests/models.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from dataclasses import dataclass -from typing import Any, Collection, Sequence, Tuple, Union - - -@dataclass -class ArgumentData: - id: str - values: Sequence[object] - # TODO: Fix type annotation of `marks` after the pytest > 7.0.0 - # marks: Collection[Union[pytest.MarkDecorator, pytest.Mark]] - marks: Collection[Any] = () - - -@dataclass -class TestData: - arguments: Tuple[str, ...] - argument_data_set: Sequence[ArgumentData] - indirect: Union[bool, Tuple[str]] = False - - __test__ = False diff --git a/libs/skyline-policy-manager/tests/unit/__init__.py b/libs/skyline-policy-manager/tests/unit/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-policy-manager/tests/unit/cmd/__init__.py b/libs/skyline-policy-manager/tests/unit/cmd/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libs/skyline-policy-manager/tests/unit/cmd/test_manage.py b/libs/skyline-policy-manager/tests/unit/cmd/test_manage.py deleted file mode 100644 index f78c3bf..0000000 --- a/libs/skyline-policy-manager/tests/unit/cmd/test_manage.py +++ /dev/null @@ -1,158 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import annotations - -from dataclasses import asdict -from importlib import metadata -from importlib.metadata import EntryPoint -from pathlib import Path -from typing import Dict, List, Tuple, Union - -import pytest -from click.testing import CliRunner -from oslo_policy.policy import DocumentedRuleDefault, RuleDefault -from skyline_policy_manager import constants, policies -from skyline_policy_manager.cmd.manage import ( - generate_conf, - generate_rule, - generate_sample, - policy_manager, - validate, -) -from tests import fake -from tests.fake import FAKE_NS, FAKE_SERVICE_EPS, FAKER, FakeDocumentedRuleData, FakeRuleData -from tests.models import ArgumentData, TestData - - -class TestPolicyManager: - @pytest.fixture(autouse=True) - def setup_entry_points(self, monkeypatch) -> None: - eps = [] - for ep_names in FAKE_SERVICE_EPS.values(): - for ep_name in ep_names: - fake_rules: List[Union[DocumentedRuleDefault, RuleDefault]] - fake_rules = [ - DocumentedRuleDefault(**asdict(FakeDocumentedRuleData())) - for _ in range(FAKER.numbers.integer_number(1, 10)) - ] - fake_rules.extend( - [ - RuleDefault(**asdict(FakeRuleData())) - for _ in range(FAKER.numbers.integer_number(1, 3)) - ], - ) - monkeypatch.setattr(fake, f"{ep_name}_list_rules", lambda: fake_rules) - eps.append( - EntryPoint( - name=ep_name, - value=f"tests.fake:{ep_name}_list_rules", - group=FAKE_NS, - ), - ) - - def entry_points() -> Dict[str, Tuple[EntryPoint, ...]]: - return {FAKE_NS: tuple(eps)} - - monkeypatch.setattr(metadata, "entry_points", entry_points) - monkeypatch.setattr(constants, "POLICY_NS", FAKE_NS) - monkeypatch.setattr(constants, "SUPPORTED_SERVICE_EPS", FAKE_SERVICE_EPS) - - @pytest.fixture - def runner(self) -> CliRunner: - runner = CliRunner() - return runner - - @pytest.mark.ddt( - TestData( - arguments=("dir_path",), - argument_data_set=[ - ArgumentData( - id="str_dir_path", - values=(FAKER.text.word(),), - ), - ], - ), - ) - def test_generate_sample(self, runner: CliRunner, tmp_path: Path, dir_path: str) -> None: - sample_dir = tmp_path.joinpath(dir_path) - sample_dir.mkdir(parents=True, exist_ok=True) - policy_manager.add_command(generate_sample) - result = runner.invoke( - policy_manager, - ["generate-sample", "--dir", sample_dir.as_posix()], - ) - assert result.exit_code == 0 - for service in FAKE_SERVICE_EPS: - assert sample_dir.joinpath(service).exists() - assert sample_dir.joinpath(service).joinpath("policy.yaml.sample").exists() - - @pytest.mark.ddt( - TestData( - arguments=("dir_path",), - argument_data_set=[ - ArgumentData( - id="str_dir_path", - values=(FAKER.text.word(),), - ), - ], - ), - TestData( - arguments=("description",), - argument_data_set=[ - ArgumentData( - id="str_description", - values=(FAKER.text.text(),), - ), - ], - ), - ) - def test_generate_conf( - self, - runner: CliRunner, - tmp_path: Path, - dir_path: str, - description: str, - ) -> None: - conf_dir = tmp_path.joinpath(dir_path) - conf_dir.mkdir(parents=True, exist_ok=True) - policy_manager.add_command(generate_conf) - result = runner.invoke( - policy_manager, - ["generate-conf", "--dir", conf_dir.as_posix(), "--desc", description], - ) - service_rules = policies.get_service_rules() - assert result.exit_code == 0 - for service in service_rules: - assert conf_dir.joinpath(service).exists() - assert conf_dir.joinpath(service).joinpath("policy.yaml").exists() - assert description in conf_dir.joinpath(service).joinpath("policy.yaml").read_text() - - def test_generate_rule(self, runner: CliRunner) -> None: - policy_manager.add_command(generate_rule) - for ep_names in FAKE_SERVICE_EPS.values(): - for ep_name in ep_names: - result = runner.invoke(policy_manager, ["generate-rule", ep_name]) - assert result.exit_code == 0 - - def test_validate(self, runner: CliRunner) -> None: - policy_manager.add_command(validate) - result = runner.invoke( - policy_manager, - [ - "validate", - "--diff", - ], - ) - assert result.exit_code == 0 diff --git a/libs/skyline-policy-manager/tests/unit/test_skyline_policy_manager.py b/libs/skyline-policy-manager/tests/unit/test_skyline_policy_manager.py deleted file mode 100644 index 9166fd6..0000000 --- a/libs/skyline-policy-manager/tests/unit/test_skyline_policy_manager.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2021 99cloud -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from skyline_policy_manager import __version__ - - -def test_version() -> None: - assert __version__ == "0.1.0" diff --git a/libs/skyline-policy-manager/tools/post_install.sh b/libs/skyline-policy-manager/tools/post_install.sh deleted file mode 100755 index 3e06de7..0000000 --- a/libs/skyline-policy-manager/tools/post_install.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -# Install openstack service package -poetry run pip install --no-deps \ - keystone \ - openstack-placement \ - nova \ - cinder \ - glance \ - trove \ - neutron neutron-vpnaas \ - openstack-heat \ - ironic-lib ironic ironic-inspector \ - octavia-lib octavia \ - panko \ - manila - -# Patch cinder -patch_path="$(poetry run python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')/cinder/__init__.py" -sed -i 's/\(.*eventlet.*\)/# \1/g' $patch_path - -# Patch neutron -patch_path="$(poetry run python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')/neutron/conf/policies/floatingip_pools.py" -sed -i 's/admin/system/g' $patch_path - -# Patch ironic -patch_path="$(poetry run python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')/ironic/common/policy.py" -sed -i 's/\(.*lockutils.*\)/# \1/g' $patch_path - -# Patch ironic_inspector -patch_path="$(poetry run python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])')/ironic_inspector/policy.py" -sed -i 's/\(.*lockutils.*\)/# \1/g' $patch_path diff --git a/playbooks/python-tarball/run.yaml b/playbooks/python-tarball/run.yaml index 7b1fed5..798ea11 100644 --- a/playbooks/python-tarball/run.yaml +++ b/playbooks/python-tarball/run.yaml @@ -42,10 +42,6 @@ chdir: "src/{{ zuul.project.canonical_name }}" with_items: - "skyline-apiserver" - - "skyline-config" - - "skyline-log" - - "skyline-nginx" - - "skyline-policy-manager" - name: Rename whl files to branch specific name shell: "mv {{ item }}*.whl {{ item }}-{{ zuul.branch | replace('/', '-') }}.whl" @@ -53,10 +49,6 @@ chdir: "src/{{ zuul.project.canonical_name }}/dist" with_items: - "skyline_apiserver" - - "skyline_config" - - "skyline_log" - - "skyline_nginx" - - "skyline_policy_manager" - name: Rename tar.gz files to branch specific name shell: "mv {{ item }}*.tar.gz {{ item }}-{{ zuul.branch | replace('/', '-') }}.tar.gz" @@ -64,8 +56,4 @@ chdir: "src/{{ zuul.project.canonical_name }}/dist" with_items: - "skyline-apiserver" - - "skyline-config" - - "skyline-log" - - "skyline-nginx" - - "skyline-policy-manager"