Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resolution going in loop #627

Closed
1 task done
pawamoy opened this issue Aug 24, 2021 · 11 comments
Closed
1 task done

Resolution going in loop #627

pawamoy opened this issue Aug 24, 2021 · 11 comments
Labels
🐛 bug Something isn't working ❓ help wanted Extra attention is needed

Comments

@pawamoy
Copy link
Contributor

pawamoy commented Aug 24, 2021

  • I have searched the issue tracker and believe that this is not a duplicate.

Steps to reproduce

Try resolving the following dependencies:

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"

[project]
name = "bla"
version = {use_scm = true}
description = "bla"
authors = [{name = "bla", email = "bla"}]
license = {file = "LICENSE"}
readme = "README.md"
requires-python = ">=3.6"
dynamic = ["version", "classifiers"]
dependencies = [
    "importlib-metadata~=2.0",
]

[tool.pdm]
package-dir = "src"

[tool.pdm.dev-dependencies]
duty = ["duty~=0.6"]
docs = [
    "mkdocs~=1.2; python_version >= '3.7'",
    "mkdocs-coverage~=0.2; python_version >= '3.7'",
    "mkdocs-gen-files~=0.3; python_version >= '3.7'",
    "mkdocs-literate-nav~=0.4; python_version >= '3.7'",
    "mkdocs-material~=7.1; python_version >= '3.7'",
    "mkdocstrings~=0.15; python_version >= '3.7'",
    "toml~=0.10; python_version >= '3.7'",
]
format = [
    "autoflake~=1.4",
    "black~=20.8b1",
    "isort~=5.8",
]
maintain = [
    "git-changelog~=0.4",
]
quality = [
    "darglint~=1.7",
    "flake8-bandit~=2.1",
    "flake8-black~=0.2",
    "flake8-bugbear~=21.3",
    "flake8-builtins~=1.5",
    "flake8-comprehensions~=3.4",
    "flake8-docstrings~=1.6",
    "flake8-pytest-style~=1.4",
    "flake8-string-format~=0.3",
    "flake8-tidy-imports~=4.2",
    "flake8-variables-names~=0.0",
    "pep8-naming~=0.11",
    "wps-light~=0.15",
]
tests = [
    "pytest~=6.2",
    "pytest-cov~=2.11",
    "pytest-randomly~=3.6",
    "pytest-sugar~=0.9",
    "pytest-xdist~=2.2",
]
typing = ["mypy~=0.812"]

Actual behavior

The resolution will run until it reaches the ResolutionTooDeep limit.
The problematic rounds show items more than once (duplicates).

Something like this (click to expand):
======== Ending round 104 ========
======== Starting round 105 ========
  Adding requirement click>=3.3(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>
  Adding requirement Jinja2>=2.10.1(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate jinja2 3.0.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 3.0.0 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.3 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.2 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.0 from https://pypi.org/simple/jinja2/>
  Adding requirement Markdown>=3.2.1(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate Markdown 3.3.4 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.1 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.1 from https://pypi.org/simple/markdown/>
  Adding requirement PyYAML>=3.10(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate PyYAML 5.4.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.4 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.13 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.12 from https://pypi.org/simple/pyyaml/>
	  ... [133 more candidate(s)]
  Adding requirement watchdog>=2.0(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate watchdog 2.1.5 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.4 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.0 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.0 from https://pypi.org/simple/watchdog/>
  Adding requirement ghp-import>=1.0(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate ghp-import 2.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 2.0.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.1.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.0 from https://pypi.org/simple/ghp-import/>
  Adding requirement pyyaml-env-tag>=0.1(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate pyyaml-env-tag 0.1 from https://pypi.org/simple/pyyaml-env-tag/>
  Adding requirement importlib-metadata>=3.10(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
  Adding requirement click>=3.3(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>
  Adding requirement Jinja2>=2.10.1(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate jinja2 3.0.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 3.0.0 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.3 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.2 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.0 from https://pypi.org/simple/jinja2/>
  Adding requirement Markdown>=3.2.1(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate Markdown 3.3.4 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.1 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.1 from https://pypi.org/simple/markdown/>
  Adding requirement PyYAML>=3.10(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate PyYAML 5.4.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.4 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.13 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.12 from https://pypi.org/simple/pyyaml/>
	  ... [133 more candidate(s)]
  Adding requirement watchdog>=2.0(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate watchdog 2.1.5 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.4 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.0 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.0 from https://pypi.org/simple/watchdog/>
  Adding requirement ghp-import>=1.0(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate ghp-import 2.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 2.0.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.1.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.0 from https://pypi.org/simple/ghp-import/>
  Adding requirement pyyaml-env-tag>=0.1(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate pyyaml-env-tag 0.1 from https://pypi.org/simple/pyyaml-env-tag/>
  Adding requirement importlib-metadata>=3.10(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
  Adding requirement click>=3.3(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>
  Adding requirement Jinja2>=2.10.1(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate jinja2 3.0.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 3.0.0 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.3 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.2 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.0 from https://pypi.org/simple/jinja2/>
  Adding requirement Markdown>=3.2.1(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate Markdown 3.3.4 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.1 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.1 from https://pypi.org/simple/markdown/>
  Adding requirement PyYAML>=3.10(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate PyYAML 5.4.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.4 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.13 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.12 from https://pypi.org/simple/pyyaml/>
	  ... [133 more candidate(s)]
  Adding requirement watchdog>=2.0(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate watchdog 2.1.5 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.4 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.0 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.0 from https://pypi.org/simple/watchdog/>
  Adding requirement ghp-import>=1.0(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate ghp-import 2.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 2.0.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.1.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.0 from https://pypi.org/simple/ghp-import/>
  Adding requirement pyyaml-env-tag>=0.1(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate pyyaml-env-tag 0.1 from https://pypi.org/simple/pyyaml-env-tag/>
  Adding requirement importlib-metadata>=3.10(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
  Adding requirement click>=3.3(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>
  Adding requirement Jinja2>=2.10.1(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate jinja2 3.0.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 3.0.0 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.3 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.2 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.0 from https://pypi.org/simple/jinja2/>
  Adding requirement Markdown>=3.2.1(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate Markdown 3.3.4 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.1 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.1 from https://pypi.org/simple/markdown/>
  Adding requirement PyYAML>=3.10(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate PyYAML 5.4.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.4 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.13 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.12 from https://pypi.org/simple/pyyaml/>
	  ... [133 more candidate(s)]
  Adding requirement watchdog>=2.0(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate watchdog 2.1.5 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.4 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.0 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.0 from https://pypi.org/simple/watchdog/>
  Adding requirement ghp-import>=1.0(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate ghp-import 2.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 2.0.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.1.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.0 from https://pypi.org/simple/ghp-import/>
  Adding requirement pyyaml-env-tag>=0.1(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate pyyaml-env-tag 0.1 from https://pypi.org/simple/pyyaml-env-tag/>
  Adding requirement importlib-metadata>=3.10(from mkdocs 1.2.1)
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
  Adding requirement click>=3.3(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>
  Adding requirement Jinja2>=2.10.1(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate jinja2 3.0.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 3.0.0 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.3 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.2 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.0 from https://pypi.org/simple/jinja2/>
  Adding requirement Markdown>=3.2.1(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate Markdown 3.3.4 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.1 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.1 from https://pypi.org/simple/markdown/>
  Adding requirement PyYAML>=3.10(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate PyYAML 5.4.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.4 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.13 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.12 from https://pypi.org/simple/pyyaml/>
	  ... [133 more candidate(s)]
  Adding requirement watchdog>=2.0(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate watchdog 2.1.5 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.4 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.0 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.0 from https://pypi.org/simple/watchdog/>
  Adding requirement ghp-import>=1.0(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate ghp-import 2.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 2.0.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.1.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.0 from https://pypi.org/simple/ghp-import/>
  Adding requirement pyyaml-env-tag>=0.1(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate pyyaml-env-tag 0.1 from https://pypi.org/simple/pyyaml-env-tag/>
  Adding requirement importlib-metadata>=3.10(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
  Adding requirement click>=3.3(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>
  Adding requirement Jinja2>=2.10.1(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate jinja2 3.0.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 3.0.0 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.3 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.2 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.1 from https://pypi.org/simple/jinja2/>
	  <Candidate jinja2 2.11.0 from https://pypi.org/simple/jinja2/>
  Adding requirement Markdown>=3.2.1(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate Markdown 3.3.4 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3.1 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.3 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.2 from https://pypi.org/simple/markdown/>
	  <Candidate Markdown 3.2.1 from https://pypi.org/simple/markdown/>
  Adding requirement PyYAML>=3.10(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate PyYAML 5.4.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.4 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.3 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.2 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 5.1 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.13 from https://pypi.org/simple/pyyaml/>
	  <Candidate PyYAML 3.12 from https://pypi.org/simple/pyyaml/>
	  ... [133 more candidate(s)]
  Adding requirement watchdog>=2.0(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate watchdog 2.1.5 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.4 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.1.0 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.3 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.2 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.1 from https://pypi.org/simple/watchdog/>
	  <Candidate watchdog 2.0.0 from https://pypi.org/simple/watchdog/>
  Adding requirement ghp-import>=1.0(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate ghp-import 2.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 2.0.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.1.0 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.1 from https://pypi.org/simple/ghp-import/>
	  <Candidate ghp-import 1.0.0 from https://pypi.org/simple/ghp-import/>
  Adding requirement pyyaml-env-tag>=0.1(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate pyyaml-env-tag 0.1 from https://pypi.org/simple/pyyaml-env-tag/>
  Adding requirement importlib-metadata>=3.10(from mkdocs 1.2)
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
Candidate rejected: importlib-metadata 2.1.1
Backtracking...
	Found matching candidates:
	  <Candidate pytest-sugar 0.9.4 from https://pypi.org/simple/pytest-sugar/>
	  <Candidate pytest-sugar 0.9.3 from https://pypi.org/simple/pytest-sugar/>
	  <Candidate pytest-sugar 0.9.2 from https://pypi.org/simple/pytest-sugar/>
	  <Candidate pytest-sugar 0.9.1 from https://pypi.org/simple/pytest-sugar/>
	  <Candidate pytest-sugar 0.9.0 from https://pypi.org/simple/pytest-sugar/>
	Found matching candidates:
	  <Candidate git-changelog 0.4.2 from https://pypi.org/simple/git-changelog/>
	  <Candidate git-changelog 0.4.1 from https://pypi.org/simple/git-changelog/>
	  <Candidate git-changelog 0.4.0 from https://pypi.org/simple/git-changelog/>
	Found matching candidates:
	  <Candidate importlib-metadata 2.1.1 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.1.0 from https://pypi.org/simple/importlib-metadata/>
	  <Candidate importlib-metadata 2.0.0 from https://pypi.org/simple/importlib-metadata/>
======== Ending round 105 ========
======== Starting round 106 ========
  Adding requirement zipp>=0.5(from importlib-metadata 2.1.0)
	Found matching candidates:
	  <Candidate zipp 3.5.0 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.4.2 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.4.1 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.4.0 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.3.2 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.3.1 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.3.0 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.2.0 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.1.0 from https://pypi.org/simple/zipp/>
	  <Candidate zipp 3.0.0 from https://pypi.org/simple/zipp/>
	  ... [36 more candidate(s)]
Resolving: new pin importlib-metadata 2.1.0
======== Ending round 106 ========
======== Starting round 107 ========
  Adding requirement click>=3.3(from mkdocs 1.2.2)
	Found matching candidates:
	  <Candidate click 8.0.1 from https://pypi.org/simple/click/>
	  <Candidate click 8.0.0 from https://pypi.org/simple/click/>
	  <Candidate click 7.1.2 from https://pypi.org/simple/click/>

I was not able yet to reduce to the minimal set of dependencies triggering the issue. I'll try to find the time to do it.
However if I remove some of the dependencies, PDM breaks out of the loop (or does not enter in one), and shows an actual resolution error, which is:

Unable to find a resolution that satisfies the following requirements:
  importlib-metadata~=2.0 (from project)
  importlib-metadata; python_version < "3.8" (from <Candidate wps-light 0.15.2 from https://pypi.org/simple/wps-light/>)
  importlib-metadata>=3.10 (from <Candidate mkdocs 1.2.2 from https://pypi.org/simple/mkdocs/>)
  importlib-metadata~=2.0 (from project)
  importlib-metadata; python_version < "3.8" (from <Candidate wps-light 0.15.2 from https://pypi.org/simple/wps-light/>)
  importlib-metadata>=3.10 (from <Candidate mkdocs 1.2.2 from https://pypi.org/simple/mkdocs/>)
  importlib-metadata~=2.0 (from project)
  importlib-metadata; python_version < "3.8" (from <Candidate wps-light 0.15.2 from https://pypi.org/simple/wps-light/>)
  importlib-metadata>=3.10 (from <Candidate mkdocs 1.2.1 from https://pypi.org/simple/mkdocs/>)
  importlib-metadata~=2.0 (from project)
  importlib-metadata; python_version < "3.8" (from <Candidate wps-light 0.15.2 from https://pypi.org/simple/wps-light/>)
  importlib-metadata>=3.10 (from <Candidate mkdocs 1.2.1 from https://pypi.org/simple/mkdocs/>)
  importlib-metadata~=2.0 (from project)
  importlib-metadata; python_version < "3.8" (from <Candidate wps-light 0.15.2 from https://pypi.org/simple/wps-light/>)
  importlib-metadata>=3.10 (from <Candidate mkdocs 1.2 from https://pypi.org/simple/mkdocs/>)
  importlib-metadata~=2.0 (from project)
  importlib-metadata; python_version < "3.8" (from <Candidate wps-light 0.15.2 from https://pypi.org/simple/wps-light/>)
  importlib-metadata>=3.10 (from <Candidate mkdocs 1.2 from https://pypi.org/simple/mkdocs/>)

(Again, duplicate lines)

Of course if I depend on importlib-metadata~=3.0 in pyproject,toml, PDM is able to resolve. I just wanted to give a repro of the resolution loop, because it made it hard to understand what the actual issue was 🙂

Also, I can't confirm yet, but I think Poetry's resolver suffers from the same issue.

Expected behavior

No loop, show the actual incompatibilities.

Environment Information

% pdm info && pdm info --env
PDM version:        1.8.0                                                                      
Python Interpreter: /home/pawamoy/.basher-packages/pyenv/pyenv/versions/3.9.5/bin/python3 (3.9)
Project Root:       /media/data/dev/sandbox/resolution-issue                                   
Project Packages:   /media/data/dev/sandbox/resolution-issue/__pypackages__/3.9                
{
  "implementation_name": "cpython",
  "implementation_version": "3.9.5",
  "os_name": "posix",
  "platform_machine": "x86_64",
  "platform_release": "5.13.12-arch1-1",
  "platform_system": "Linux",
  "platform_version": "#1 SMP PREEMPT Wed, 18 Aug 2021 20:49:03 +0000",
  "python_full_version": "3.9.5",
  "platform_python_implementation": "CPython",
  "python_version": "3.9",
  "sys_platform": "linux"
}
@pawamoy pawamoy added the 🐛 bug Something isn't working label Aug 24, 2021
@meramsey
Copy link

Having same issue with

@ pdm add atlassian-python-api
Adding packages to default dependencies: atlassian-python-api
✖ 🔒 Lock failed
The dependency resolution exceeds the maximum loop depth of 10000, there may be some circular dependencies in your project. Try to solve them or increase the `strategy.resolve_max_rounds` config.
See /tmp/pdm-lock-blre54i7.log for detailed debug log.
[ResolutionTooDeep]: 10000
Add '-v' to see the detailed traceback
 v3.9.6 (.venv) Documents/dev/gitjirabot [✖ ERROR]  took 4m26s  at 11:38:36

How it looks
pdm_resolve_loop

❯ tail -n100 /tmp/pdm-lock-blre54i7.log
	  <Candidate pydocstyle 6.0.0 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 5.1.1 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 5.1.0 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 5.0.2 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 5.0.1 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 5.0.0 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 4.0.1 from https://pypi.org/simple/pydocstyle/>
	  <Candidate pydocstyle 4.0.0 from https://pypi.org/simple/pydocstyle/>
	  ... [17 more candidate(s)]
======== Ending round 9993 ========
======== Starting round 9994 ========
  Adding requirement flake8(from flake8-string-format 0.3.0)
	Found matching candidates:
	  <Candidate flake8 4.0.1 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 4.0.0 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.9.2 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.9.1 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.9.0 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.8.4 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.8.3 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.8.2 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.8.1 from https://pypi.org/simple/flake8/>
	  <Candidate flake8 3.8.0 from https://pypi.org/simple/flake8/>
	  ... [58 more candidate(s)]
======== Ending round 9994 ========
======== Starting round 9995 ========
  Adding requirement dataclasses>=0.7; python_version < "3.7"(from mkdocs-literate-nav 0.4.0)
	Found matching candidates:
	  <Candidate dataclasses 0.8 from https://pypi.org/simple/dataclasses/>
	  <Candidate dataclasses 0.7 from https://pypi.org/simple/dataclasses/>
	  <Candidate dataclasses 0.6 from https://pypi.org/simple/dataclasses/>
  Adding requirement mkdocs<2.0.0,>=1.0.3(from mkdocs-literate-nav 0.4.0)
	Found matching candidates:
	  <Candidate mkdocs 1.2.3 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.2.2 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.2.1 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.2 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.1.2 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.1.1 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.1 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.0.4 from https://pypi.org/simple/mkdocs/>
	  <Candidate mkdocs 1.0.3 from https://pypi.org/simple/mkdocs/>
  Adding requirement python>=3.6,<4.0(from mkdocs-literate-nav 0.4.0)
======== Ending round 9995 ========
======== Starting round 9996 ========
  Adding requirement python>=3.6,<4.0(from isort 5.8.0)
======== Ending round 9996 ========
======== Starting round 9997 ========
======== Ending round 9997 ========
======== Starting round 9998 ========
  Adding requirement python>=3.6,<3.7(from dataclasses 0.8)
  Adding requirement python>=3.6,<3.7(from dataclasses 0.8)
  Adding requirement python>=3.6,<3.7(from dataclasses 0.7)
  Adding requirement python>=3.6,<3.7(from dataclasses 0.7)
Candidate rejected: mypy-extensions 0.4.3
Backtracking...
	Found matching candidates:
	  <Candidate mypy-extensions 0.4.3 from https://pypi.org/simple/mypy-extensions/>
Candidate rejected: isort 5.8.0
Backtracking...
	Found matching candidates:
	  <Candidate isort 5.8.0 from https://pypi.org/simple/isort/>
Candidate rejected: mkdocs-literate-nav 0.4.0
Backtracking...
	Found matching candidates:
	  <Candidate mkdocs-literate-nav 0.4.0 from https://pypi.org/simple/mkdocs-literate-nav/>
Candidate rejected: flake8-string-format 0.3.0
Backtracking...
	Found matching candidates:
	  <Candidate flake8-string-format 0.3.0 from https://pypi.org/simple/flake8-string-format/>
Candidate rejected: flake8-docstrings 1.6.0
Backtracking...
	Found matching candidates:
	  <Candidate flake8-docstrings 1.6.0 from https://pypi.org/simple/flake8-docstrings/>
Candidate rejected: black 20.8b1
Backtracking...
	Found matching candidates:
	  <Candidate black 20.8b1 from https://pypi.org/simple/black/>
Candidate rejected: autoflake 1.4
Backtracking...
	Found matching candidates:
	  <Candidate autoflake 1.4 from https://pypi.org/simple/autoflake/>
Candidate rejected: python None
Backtracking...
======== Ending round 9998 ========
======== Starting round 9999 ========
======== Ending round 9999 ========
Error occurs
Traceback (most recent call last):
  File "/home/mike/.local/share/pdm/venv/lib/python3.9/site-packages/pdm/termui.py", line 192, in logging
    yield logger
  File "/home/mike/.local/share/pdm/venv/lib/python3.9/site-packages/pdm/cli/actions.py", line 68, in do_lock
    mapping, dependencies = resolve(
  File "/home/mike/.local/share/pdm/venv/lib/python3.9/site-packages/pdm/resolver/core.py", line 31, in resolve
    result = resolver.resolve(requirements, max_rounds)
  File "/home/mike/.local/share/pdm/venv/lib/python3.9/site-packages/resolvelib/resolvers.py", line 472, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/mike/.local/share/pdm/venv/lib/python3.9/site-packages/resolvelib/resolvers.py", line 383, in resolve
    raise ResolutionTooDeep(max_rounds)
resolvelib.resolvers.ResolutionTooDeep: 10000

PDM version 1.10.2

❯ pdm info && pdm info --env
PDM version:        1.10.2
Python Interpreter: /home/mike/.pyenv/versions/3.9.6/bin/python3.9 (3.9)
Project Root:       /home/mike/Documents/dev/gitjirabot
Project Packages:   /home/mike/Documents/dev/gitjirabot/__pypackages__/3.9
{
  "implementation_name": "cpython",
  "implementation_version": "3.9.6",
  "os_name": "posix",
  "platform_machine": "x86_64",
  "platform_release": "5.13.0-7620-generic",
  "platform_system": "Linux",
  "platform_version": "#20~1634827117~21.04~874b071-Ubuntu SMP Fri Oct 29 15:06:55 UTC ",
  "python_full_version": "3.9.6",
  "platform_python_implementation": "CPython",
  "python_version": "3.9",
  "sys_platform": "linux"
}

@frostming
Copy link
Collaborator

frostming commented Nov 15, 2021

It is hard for me to reproduce if you don't provide the full dependency set and requires-python value. Also PLEASE try to make it MINIMAL(try deleting some dependency from the pyproject.toml and see how it is going). Thank you very much.

@frostming
Copy link
Collaborator

frostming commented Nov 15, 2021

I extracted some common dependencies in both reports, but can't manage to reproduce:

mkdocs
autoflake
flake8
black
python>=3.6

@meramsey
Copy link

I started a new project via
https://github.com/pawamoy/copier-pdm

and just added or tried to add 2 dependencies individually and together on various python versions from 3.6.8/3.7.0/3.9.6/3.10.0

pyproject.toml

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"

[project]
name = "gitjirabot"
version = {use_scm = true}
description = "Git Jira integrations bot for automating complex tasks"
authors = [{name = "Michael Ramsey", email = "mike@hackerdise.me"}]
license = {file = "LICENSE"}
readme = "README.md"
requires-python = ">=3.6.2"
keywords = []
dynamic = ["version", "classifiers"]
classifiers = [
    "Development Status :: 4 - Beta",
    "License :: Other/Proprietary License",
    "Typing :: Typed",
]
dependencies = [
"atlassian-python-api",
"python-gitlab"
]

[project.urls]
Homepage = "https://meramsey.github.io/gitjirabot"
Documentation = "https://meramsey.github.io/gitjirabot"
Changelog = "https://meramsey.github.io/gitjirabot/changelog"
Repository = "https://github.com/meramsey/gitjirabot"
Issues = "https://github.com/meramsey/gitjirabot/issues"
Discussions = "https://github.com/meramsey/gitjirabot/discussions"
Gitter = "https://gitter.im/gitjirabot/community"
Funding = "https://github.com/sponsors/meramsey"

[project.scripts]
gitjirabot = "gitjirabot.cli:main"

[tool.pdm]
package-dir = "src"

[tool.pdm.dev-dependencies]
duty = ["duty~=0.7"]
docs = [
    "mkdocs~=1.2; python_version >= '3.7'",
    "mkdocs-coverage~=0.2; python_version >= '3.7'",
    "mkdocs-gen-files~=0.3; python_version >= '3.7'",
    "mkdocs-literate-nav~=0.4; python_version >= '3.7'",
    "mkdocs-material~=7.3; python_version >= '3.7'",
    "mkdocstrings~=0.16; python_version >= '3.7'",
    "toml~=0.10; python_version >= '3.7'",
]
format = [
    "autoflake~=1.4",
    "black~=21.10b0",
    "isort~=5.10",
]
maintain = [
    # TODO: remove this section when git-changelog is more powerful
    "git-changelog~=0.4",
]
quality = [
    "darglint~=1.8",
    "flake8-bandit~=2.1",
    "flake8-black~=0.2",
    "flake8-bugbear~=21.9",
    "flake8-builtins~=1.5",
    "flake8-comprehensions~=3.7",
    "flake8-docstrings~=1.6",
    "flake8-pytest-style~=1.5",
    "flake8-string-format~=0.3",
    "flake8-tidy-imports~=4.5",
    "flake8-variables-names~=0.0",
    "pep8-naming~=0.12",
    "wps-light~=0.15",
]
tests = [
    "pytest~=6.2",
    "pytest-cov~=3.0",
    "pytest-randomly~=3.10",
    "pytest-sugar~=0.9",
    "pytest-xdist~=2.4",
]
typing = ["mypy~=0.910"]

[tool.black]
line-length = 120
exclude = "tests/fixtures"

[tool.isort]
line_length = 120
not_skip = "__init__.py"
multi_line_output = 3
force_single_line = false
balanced_wrapping = true
default_section = "THIRDPARTY"
known_first_party = "gitjirabot"
include_trailing_comma = true

Notably the same things with copier-poetry which is poetry based vs pdm works fine and its pyproject.toml file looks like this.

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "gitjirabot"
version = "0.1.6"
description = "Git Jira integrations bot for automating complex tasks"
authors = ["Michael Ramsey <mike@hackerdise.me>"]
license = "Do What The F*ck You Want To Public License"
readme = "README.md"
repository = "https://gitlab.com/mikeramsey/gitjirabot"
homepage = "https://gitlab.com/mikeramsey/gitjirabot"
keywords = ['git', 'jira', 'bot', 'integrations', 'automation']
packages = [ { include = "gitjirabot", from = "src" } ]

[tool.poetry.dependencies]
python = "^3.6"
atlassian-python-api = "^3.14.1"
python-gitlab = "^2.10.1"

[tool.poetry.dev-dependencies]
# formatting, quality, tests
autoflake = "^1.4"
black = "^20.8b1"
isort = "^5.7.0"
mypy = "^0.812"
pytest = "^6.2.2"
pytest-cov = "^2.11.1"
pytest-randomly = "^3.5.0"
pytest-sugar = "^0.9.4"
pytest-xdist = "^2.2.0"

# tasks
duty = "^0.6.0"
git-changelog = "^0.4.2"
httpx = "^0.16.1"
jinja2-cli = "^0.7.0"
toml = "^0.10.2"

# flake8 plugins
darglint = "^1.5.8"
flake8-bandit = "^2.1.2"
flake8-black = "^0.2.1"
flake8-bugbear = "^20.11.1"
flake8-builtins = "^1.5.3"
flake8-comprehensions = "^3.3.1"
flake8-docstrings = "^1.5.0"
flake8-pytest-style = "^1.3.0"
flake8-string-format = "^0.3.0"
flake8-tidy-imports = "^4.2.1"
flake8-variables-names = "^0.0.4"
pep8-naming = "^0.11.1"
wps-light = "^0.15.2"

# docs
mkdocs = "^1.1.2"
mkdocs-coverage = "^0.2.1"
mkdocs-macros-plugin = "^0.5.0"
mkdocs-material = "^6.2.7"
mkdocstrings = "^0.15.0"

[tool.poetry.scripts]
gitjirabot = "gitjirabot.cli:main"

[tool.black]
line-length = 120
exclude = "tests/fixtures"

[tool.isort]
line_length = 120
not_skip = "__init__.py"
multi_line_output = 3
force_single_line = false
balanced_wrapping = true
default_section = "THIRDPARTY"
known_first_party = "gitjirabot"
include_trailing_comma = true
The associated poetry.lock file if that is helpful.

The associated poetry.lock file if that is helpful.

[[package]]
name = "ansimarkup"
version = "1.5.0"
description = "Produce colored terminal text with an xml-like markup"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
colorama = "*"

[package.extras]
devel = ["bumpversion (>=0.5.2)", "check-manifest (>=0.35)", "readme-renderer (>=16.0)", "flake8", "pep8-naming"]
tests = ["tox (>=2.6.0)", "pytest (>=3.0.3)", "pytest-cov (>=2.3.1)"]

[[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 = "dev"
optional = false
python-versions = "*"

[[package]]
name = "astor"
version = "0.8.1"
description = "Read/rewrite/write Python ASTs"
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"

[[package]]
name = "astunparse"
version = "1.6.3"
description = "An AST unparser for Python"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
six = ">=1.6.1,<2.0"

[[package]]
name = "atlassian-python-api"
version = "3.14.1"
description = "Python Atlassian REST API Wrapper"
category = "main"
optional = false
python-versions = "*"

[package.dependencies]
deprecated = "*"
oauthlib = "*"
requests = "*"
requests_oauthlib = "*"
six = "*"

[package.extras]
kerberos = ["requests-kerberos"]

[[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.2.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"]
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"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]

[[package]]
name = "autoflake"
version = "1.4"
description = "Removes unused imports and unused variables"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
pyflakes = ">=1.1.0"

[[package]]
name = "bandit"
version = "1.7.1"
description = "Security oriented static analyser for python code."
category = "dev"
optional = false
python-versions = ">=3.5"

[package.dependencies]
colorama = {version = ">=0.3.9", markers = "platform_system == \"Windows\""}
GitPython = ">=1.0.1"
PyYAML = ">=5.3.1"
stevedore = ">=1.20.0"

[[package]]
name = "black"
version = "20.8b1"
description = "The uncompromising code formatter."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
appdirs = "*"
click = ">=7.1.2"
dataclasses = {version = ">=0.6", markers = "python_version < \"3.7\""}
mypy-extensions = ">=0.4.3"
pathspec = ">=0.6,<1"
regex = ">=2020.1.8"
toml = ">=0.10.1"
typed-ast = ">=1.4.0"
typing-extensions = ">=3.7.4"

[package.extras]
colorama = ["colorama (>=0.4.3)"]
d = ["aiohttp (>=3.3.2)", "aiohttp-cors"]

[[package]]
name = "cached-property"
version = "1.5.2"
description = "A decorator for caching properties in classes."
category = "dev"
optional = false
python-versions = "*"

[[package]]
name = "certifi"
version = "2021.10.8"
description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false
python-versions = "*"

[[package]]
name = "charset-normalizer"
version = "2.0.7"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false
python-versions = ">=3.5.0"

[package.extras]
unicode_backport = ["unicodedata2"]

[[package]]
name = "click"
version = "8.0.3"
description = "Composable command line interface toolkit"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}

[[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 = "contextvars"
version = "2.4"
description = "PEP 567 Backport"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
immutables = ">=0.9"

[[package]]
name = "coverage"
version = "6.1.2"
description = "Code coverage measurement for Python"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.extras]
toml = ["tomli"]

[[package]]
name = "darglint"
version = "1.8.1"
description = "A utility for ensuring Google-style docstrings stay up to date with the source code."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[[package]]
name = "dataclasses"
version = "0.8"
description = "A backport of the dataclasses module for Python 3.6"
category = "dev"
optional = false
python-versions = ">=3.6, <3.7"

[[package]]
name = "deprecated"
version = "1.2.13"
description = "Python @deprecated decorator to deprecate old python classes, functions or methods."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"

[package.dependencies]
wrapt = ">=1.10,<2"

[package.extras]
dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"]

[[package]]
name = "duty"
version = "0.6.0"
description = "A simple task runner."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
cached-property = {version = ">=1.5.2,<2.0.0", markers = "python_version < \"3.8\""}
failprint = ">=0.6.2,<0.7.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 = "failprint"
version = "0.6.2"
description = "Run a command, print its output only if it fails."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
ansimarkup = ">=1.4.0,<2.0.0"
jinja2 = ">=2.11.2,<3.0.0"
ptyprocess = {version = ">=0.6.0,<0.7.0", markers = "sys_platform != \"win32\""}

[[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]
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
mccabe = ">=0.6.0,<0.7.0"
pycodestyle = ">=2.7.0,<2.8.0"
pyflakes = ">=2.3.0,<2.4.0"

[[package]]
name = "flake8-bandit"
version = "2.1.2"
description = "Automated security testing with bandit and flake8."
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
bandit = "*"
flake8 = "*"
flake8-polyfill = "*"
pycodestyle = "*"

[[package]]
name = "flake8-black"
version = "0.2.3"
description = "flake8 plugin to call black as a code style validator"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
black = "*"
flake8 = ">=3.0.0"
toml = "*"

[[package]]
name = "flake8-bugbear"
version = "20.11.1"
description = "A plugin for flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
attrs = ">=19.2.0"
flake8 = ">=3.0.0"

[package.extras]
dev = ["coverage", "black", "hypothesis", "hypothesmith"]

[[package]]
name = "flake8-builtins"
version = "1.5.3"
description = "Check for python builtins being used as variables or parameters."
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
flake8 = "*"

[package.extras]
test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"]

[[package]]
name = "flake8-comprehensions"
version = "3.7.0"
description = "A flake8 plugin to help you write better list/set/dict comprehensions."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
flake8 = ">=3.0,<3.2.0 || >3.2.0,<5"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}

[[package]]
name = "flake8-docstrings"
version = "1.6.0"
description = "Extension for flake8 which uses pydocstyle to check docstrings"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
flake8 = ">=3"
pydocstyle = ">=2.1"

[[package]]
name = "flake8-plugin-utils"
version = "1.3.2"
description = "The package provides base classes and utils for flake8 plugin writing"
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[[package]]
name = "flake8-polyfill"
version = "1.0.2"
description = "Polyfill package for Flake8 plugins"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
flake8 = "*"

[[package]]
name = "flake8-pytest-style"
version = "1.5.1"
description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
flake8-plugin-utils = ">=1.3.2,<2.0.0"

[[package]]
name = "flake8-string-format"
version = "0.3.0"
description = "string format checker, plugin for flake8"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
flake8 = "*"

[[package]]
name = "flake8-tidy-imports"
version = "4.5.0"
description = "A flake8 plugin that helps you write tidier imports."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
flake8 = ">=3.8.0,<5"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}

[[package]]
name = "flake8-variables-names"
version = "0.0.4"
description = "A flake8 extension that helps to make more readable variables names"
category = "dev"
optional = false
python-versions = "*"

[[package]]
name = "ghp-import"
version = "2.0.2"
description = "Copy your docs directly to the gh-pages branch."
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
python-dateutil = ">=2.8.1"

[package.extras]
dev = ["twine", "markdown", "flake8", "wheel"]

[[package]]
name = "git-changelog"
version = "0.4.2"
description = "Automatic Changelog generator using Jinja2 templates."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
Jinja2 = ">=2.10,<3.0"

[[package]]
name = "gitdb"
version = "4.0.9"
description = "Git Object Database"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
smmap = ">=3.0.1,<6"

[[package]]
name = "gitpython"
version = "3.1.20"
description = "Python Git Library"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
gitdb = ">=4.0.1,<5"
typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.10\""}

[[package]]
name = "h11"
version = "0.12.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
category = "dev"
optional = false
python-versions = ">=3.6"

[[package]]
name = "httpcore"
version = "0.12.3"
description = "A minimal low-level HTTP client."
category = "dev"
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 = "httpx"
version = "0.16.1"
description = "The next generation HTTP client."
category = "dev"
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 = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""}

[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.8.2"
description = "Read metadata from Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"

[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]

[[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.8.0"
description = "A Python utility / library to sort Python imports."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.extras]
pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
requirements_deprecated_finder = ["pipreqs", "pip-api"]
colors = ["colorama (>=0.4.3,<0.5.0)"]

[[package]]
name = "jinja2"
version = "2.11.3"
description = "A very fast and expressive template engine."
category = "dev"
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 = "jinja2-cli"
version = "0.7.0"
description = "A CLI interface to Jinja2"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
jinja2 = "*"

[package.extras]
tests = ["jinja2", "pytest", "flake8"]
toml = ["jinja2", "toml"]
xml = ["jinja2", "xmltodict"]
yaml = ["jinja2", "pyyaml"]

[[package]]
name = "markdown"
version = "3.3.4"
description = "Python implementation of Markdown."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}

[package.extras]
testing = ["coverage", "pyyaml"]

[[package]]
name = "markupsafe"
version = "2.0.1"
description = "Safely add untrusted strings to HTML/XML markup."
category = "dev"
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 = "mergedeep"
version = "1.3.4"
description = "A deep merge function for 🐍."
category = "dev"
optional = false
python-versions = ">=3.6"

[[package]]
name = "mkdocs"
version = "1.2.3"
description = "Project documentation with Markdown."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
click = ">=3.3"
ghp-import = ">=1.0"
importlib-metadata = ">=3.10"
Jinja2 = ">=2.10.1"
Markdown = ">=3.2.1"
mergedeep = ">=1.3.4"
packaging = ">=20.5"
PyYAML = ">=3.10"
pyyaml-env-tag = ">=0.1"
watchdog = ">=2.0"

[package.extras]
i18n = ["babel (>=2.9.0)"]

[[package]]
name = "mkdocs-autorefs"
version = "0.2.1"
description = "Automatically link across pages in MkDocs."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
Markdown = ">=3.3,<4.0"
mkdocs = ">=1.1,<2.0"

[[package]]
name = "mkdocs-coverage"
version = "0.2.1"
description = "MkDocs plugin to integrate your coverage HTML report into your site."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[[package]]
name = "mkdocs-macros-plugin"
version = "0.5.12"
description = "Unleash the power of MkDocs with macros and variables"
category = "dev"
optional = false
python-versions = ">=3.5"

[package.dependencies]
jinja2 = "*"
mkdocs = ">=0.17"
python-dateutil = "*"
pyyaml = "*"
termcolor = "*"

[package.extras]
test = ["mkdocs-macros-test", "mkdocs-material (>=6.2)", "mkdocs-include-markdown-plugin"]

[[package]]
name = "mkdocs-material"
version = "6.2.8"
description = "A Material Design theme for MkDocs"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
markdown = ">=3.2"
mkdocs = ">=1.1"
mkdocs-material-extensions = ">=1.0"
Pygments = ">=2.4"
pymdown-extensions = ">=7.0"

[[package]]
name = "mkdocs-material-extensions"
version = "1.0.3"
description = "Extension pack for Python Markdown."
category = "dev"
optional = false
python-versions = ">=3.6"

[[package]]
name = "mkdocstrings"
version = "0.15.2"
description = "Automatic documentation from sources, for MkDocs."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
Jinja2 = ">=2.11.1,<4.0"
Markdown = ">=3.3,<4.0"
MarkupSafe = ">=1.1,<3.0"
mkdocs = ">=1.1.1,<2.0.0"
mkdocs-autorefs = ">=0.1,<0.3"
pymdown-extensions = ">=6.3,<9.0"
pytkdocs = ">=0.2.0,<0.12.0"

[[package]]
name = "mypy"
version = "0.812"
description = "Optional static typing for Python"
category = "dev"
optional = false
python-versions = ">=3.5"

[package.dependencies]
mypy-extensions = ">=0.4.3,<0.5.0"
typed-ast = ">=1.4.0,<1.5.0"
typing-extensions = ">=3.7.4"

[package.extras]
dmypy = ["psutil (>=4.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 = "oauthlib"
version = "3.1.1"
description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
category = "main"
optional = false
python-versions = ">=3.6"

[package.extras]
rsa = ["cryptography (>=3.0.0,<4)"]
signals = ["blinker (>=1.4.0)"]
signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"]

[[package]]
name = "packaging"
version = "21.2"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
pyparsing = ">=2.0.2,<3"

[[package]]
name = "pathspec"
version = "0.9.0"
description = "Utility library for gitignore style pattern matching of file paths."
category = "dev"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"

[[package]]
name = "pbr"
version = "5.7.0"
description = "Python Build Reasonableness"
category = "dev"
optional = false
python-versions = ">=2.6"

[[package]]
name = "pep8-naming"
version = "0.11.1"
description = "Check PEP-8 naming conventions, plugin for flake8"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
flake8-polyfill = ">=1.0.2,<2"

[[package]]
name = "pluggy"
version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}

[package.extras]
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]

[[package]]
name = "ptyprocess"
version = "0.6.0"
description = "Run a subprocess in a pseudo terminal"
category = "dev"
optional = false
python-versions = "*"

[[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 = "pydocstyle"
version = "6.1.1"
description = "Python docstring style checker"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
snowballstemmer = "*"

[package.extras]
toml = ["toml"]

[[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 = "pygments"
version = "2.10.0"
description = "Pygments is a syntax highlighting package written in Python."
category = "dev"
optional = false
python-versions = ">=3.5"

[[package]]
name = "pymdown-extensions"
version = "8.2"
description = "Extension pack for Python Markdown."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
Markdown = ">=3.2"

[[package]]
name = "pyparsing"
version = "2.4.7"
description = "Python parsing module"
category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"

[[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\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
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.3.0"
description = "run tests in isolated forked subprocesses"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"

[package.dependencies]
py = "*"
pytest = ">=3.10"

[[package]]
name = "pytest-randomly"
version = "3.10.2"
description = "Pytest plugin to randomly order tests and control random.seed."
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""}
pytest = "*"

[[package]]
name = "pytest-sugar"
version = "0.9.4"
description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)."
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
packaging = ">=14.1"
pytest = ">=2.9"
termcolor = ">=1.1.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 = "python-gitlab"
version = "2.10.1"
description = "Interact with GitLab API"
category = "main"
optional = false
python-versions = ">=3.6.0"

[package.dependencies]
requests = ">=2.25.0"
requests-toolbelt = ">=0.9.1"

[package.extras]
autocompletion = ["argcomplete (>=1.10.0,<2)"]
yaml = ["PyYaml (>=5.2)"]

[[package]]
name = "pytkdocs"
version = "0.11.0"
description = "Load Python objects documentation."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
astunparse = {version = ">=1.6.3,<2.0.0", markers = "python_version < \"3.9\""}
cached-property = {version = ">=1.5.2,<2.0.0", markers = "python_version < \"3.8\""}
dataclasses = {version = ">=0.7,<0.9", markers = "python_version == \"3.6\""}
typing-extensions = {version = ">=3.7.4.3,<4.0.0.0", markers = "python_version < \"3.8\""}

[package.extras]
numpy-style = ["docstring_parser (>=0.7.3,<0.8.0)"]

[[package]]
name = "pyyaml"
version = "6.0"
description = "YAML parser and emitter for Python"
category = "dev"
optional = false
python-versions = ">=3.6"

[[package]]
name = "pyyaml-env-tag"
version = "0.1"
description = "A custom YAML tag for referencing environment variables in YAML files. "
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
pyyaml = "*"

[[package]]
name = "regex"
version = "2021.11.10"
description = "Alternative regular expression module, to replace re."
category = "dev"
optional = false
python-versions = "*"

[[package]]
name = "requests"
version = "2.26.0"
description = "Python HTTP for Humans."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"

[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""}
idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""}
urllib3 = ">=1.21.1,<1.27"

[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"]

[[package]]
name = "requests-oauthlib"
version = "1.3.0"
description = "OAuthlib authentication support for Requests."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"

[package.dependencies]
oauthlib = ">=3.0.0"
requests = ">=2.0.0"

[package.extras]
rsa = ["oauthlib[signedtoken] (>=3.0.0)"]

[[package]]
name = "requests-toolbelt"
version = "0.9.1"
description = "A utility belt for advanced users of python-requests"
category = "main"
optional = false
python-versions = "*"

[package.dependencies]
requests = ">=2.0.1,<3.0.0"

[[package]]
name = "rfc3986"
version = "1.5.0"
description = "Validating URI References per RFC 3986"
category = "dev"
optional = false
python-versions = "*"

[package.dependencies]
idna = {version = "*", optional = true, markers = "extra == \"idna2008\""}

[package.extras]
idna2008 = ["idna"]

[[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 = "smmap"
version = "5.0.0"
description = "A pure Python implementation of a sliding window memory map manager"
category = "dev"
optional = false
python-versions = ">=3.6"

[[package]]
name = "sniffio"
version = "1.2.0"
description = "Sniff out which async library your code is running under"
category = "dev"
optional = false
python-versions = ">=3.5"

[package.dependencies]
contextvars = {version = ">=2.1", markers = "python_version < \"3.7\""}

[[package]]
name = "snowballstemmer"
version = "2.1.0"
description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms."
category = "dev"
optional = false
python-versions = "*"

[[package]]
name = "stevedore"
version = "3.5.0"
description = "Manage dynamic plugins for Python applications"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.dependencies]
importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""}
pbr = ">=2.0.0,<2.1.0 || >2.1.0"

[[package]]
name = "termcolor"
version = "1.1.0"
description = "ANSII Color formatting for output in terminal."
category = "dev"
optional = false
python-versions = "*"

[[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 = "typed-ast"
version = "1.4.3"
description = "a fork of Python 2 and 3 ast modules with type comment support"
category = "dev"
optional = false
python-versions = "*"

[[package]]
name = "typing-extensions"
version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "dev"
optional = false
python-versions = "*"

[[package]]
name = "urllib3"
version = "1.26.7"
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 = ["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,<2.0)"]

[[package]]
name = "watchdog"
version = "2.1.6"
description = "Filesystem events monitoring"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.extras]
watchmedo = ["PyYAML (>=3.10)"]

[[package]]
name = "wps-light"
version = "0.15.3"
description = "The strictest and most opinionated python linter ever (lighter fork)."
category = "dev"
optional = false
python-versions = ">=3.6,<4.0"

[package.dependencies]
astor = ">=0.8,<0.9"
attrs = "*"
flake8 = ">=3.7,<4.0"
flake8-polyfill = ">=1.0.2,<2.0.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
pygments = ">=2.4,<3.0"
typing_extensions = ">=3.6,<4.0"

[[package]]
name = "wrapt"
version = "1.13.3"
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.6.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
optional = false
python-versions = ">=3.6"

[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=4.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"]

[metadata]
lock-version = "1.1"
python-versions = "^3.6"
content-hash = "8dbc8d2682c4019a878ab066cae7000242b66519fe65dc9de92001ec33c7c210"

[metadata.files]
ansimarkup = [
    {file = "ansimarkup-1.5.0-py2.py3-none-any.whl", hash = "sha256:3146ca74af5f69e48a9c3d41b31085c0d6378f803edeb364856d37c11a684acf"},
    {file = "ansimarkup-1.5.0.tar.gz", hash = "sha256:96c65d75bbed07d3dcbda8dbede8c2252c984f90d0ca07434b88a6bbf345fad3"},
]
appdirs = [
    {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
    {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
astor = [
    {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"},
    {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"},
]
astunparse = [
    {file = "astunparse-1.6.3-py2.py3-none-any.whl", hash = "sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8"},
    {file = "astunparse-1.6.3.tar.gz", hash = "sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872"},
]
atlassian-python-api = [
    {file = "atlassian-python-api-3.14.1.tar.gz", hash = "sha256:b0401ce91556b10ee20095d1b6303016184b5ee28ab0094f70da61796995e420"},
]
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.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
    {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
autoflake = [
    {file = "autoflake-1.4.tar.gz", hash = "sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea"},
]
bandit = [
    {file = "bandit-1.7.1-py3-none-any.whl", hash = "sha256:f5acd838e59c038a159b5c621cf0f8270b279e884eadd7b782d7491c02add0d4"},
    {file = "bandit-1.7.1.tar.gz", hash = "sha256:a81b00b5436e6880fa8ad6799bc830e02032047713cbb143a12939ac67eb756c"},
]
black = [
    {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"},
]
cached-property = [
    {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
    {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
]
certifi = [
    {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"},
    {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"},
]
charset-normalizer = [
    {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"},
    {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"},
]
click = [
    {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"},
    {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"},
]
colorama = [
    {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
    {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
contextvars = [
    {file = "contextvars-2.4.tar.gz", hash = "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"},
]
coverage = [
    {file = "coverage-6.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:675adb3b3380967806b3cbb9c5b00ceb29b1c472692100a338730c1d3e59c8b9"},
    {file = "coverage-6.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95a58336aa111af54baa451c33266a8774780242cab3704b7698d5e514840758"},
    {file = "coverage-6.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0a595a781f8e186580ff8e3352dd4953b1944289bec7705377c80c7e36c4d6c"},
    {file = "coverage-6.1.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d3c5f49ce6af61154060640ad3b3281dbc46e2e0ef2fe78414d7f8a324f0b649"},
    {file = "coverage-6.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:310c40bed6b626fd1f463e5a83dba19a61c4eb74e1ac0d07d454ebbdf9047e9d"},
    {file = "coverage-6.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a4d48e42e17d3de212f9af44f81ab73b9378a4b2b8413fd708d0d9023f2bbde4"},
    {file = "coverage-6.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ffa545230ca2ad921ad066bf8fd627e7be43716b6e0fcf8e32af1b8188ccb0ab"},
    {file = "coverage-6.1.2-cp310-cp310-win32.whl", hash = "sha256:cd2d11a59afa5001ff28073ceca24ae4c506da4355aba30d1e7dd2bd0d2206dc"},
    {file = "coverage-6.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:96129e41405887a53a9cc564f960d7f853cc63d178f3a182fdd302e4cab2745b"},
    {file = "coverage-6.1.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:1de9c6f5039ee2b1860b7bad2c7bc3651fbeb9368e4c4d93e98a76358cdcb052"},
    {file = "coverage-6.1.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:80cb70264e9a1d04b519cdba3cd0dc42847bf8e982a4d55c769b9b0ee7cdce1e"},
    {file = "coverage-6.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:ba6125d4e55c0b8e913dad27b22722eac7abdcb1f3eab1bd090eee9105660266"},
    {file = "coverage-6.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8492d37acdc07a6eac6489f6c1954026f2260a85a4c2bb1e343fe3d35f5ee21a"},
    {file = "coverage-6.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66af99c7f7b64d050d37e795baadf515b4561124f25aae6e1baa482438ecc388"},
    {file = "coverage-6.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ebcc03e1acef4ff44f37f3c61df478d6e469a573aa688e5a162f85d7e4c3860d"},
    {file = "coverage-6.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98d44a8136eebbf544ad91fef5bd2b20ef0c9b459c65a833c923d9aa4546b204"},
    {file = "coverage-6.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c18725f3cffe96732ef96f3de1939d81215fd6d7d64900dcc4acfe514ea4fcbf"},
    {file = "coverage-6.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c8e9c4bcaaaa932be581b3d8b88b677489975f845f7714efc8cce77568b6711c"},
    {file = "coverage-6.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:06d009e8a29483cbc0520665bc46035ffe9ae0e7484a49f9782c2a716e37d0a0"},
    {file = "coverage-6.1.2-cp36-cp36m-win32.whl", hash = "sha256:e5432d9c329b11c27be45ee5f62cf20a33065d482c8dec1941d6670622a6fb8f"},
    {file = "coverage-6.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:82fdcb64bf08aa5db881db061d96db102c77397a570fbc112e21c48a4d9cb31b"},
    {file = "coverage-6.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:94f558f8555e79c48c422045f252ef41eb43becdd945e9c775b45ebfc0cbd78f"},
    {file = "coverage-6.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046647b96969fda1ae0605f61288635209dd69dcd27ba3ec0bf5148bc157f954"},
    {file = "coverage-6.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cc799916b618ec9fd00135e576424165691fec4f70d7dc12cfaef09268a2478c"},
    {file = "coverage-6.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62646d98cf0381ffda301a816d6ac6c35fc97aa81b09c4c52d66a15c4bef9d7c"},
    {file = "coverage-6.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:27a3df08a855522dfef8b8635f58bab81341b2fb5f447819bc252da3aa4cf44c"},
    {file = "coverage-6.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:610c0ba11da8de3a753dc4b1f71894f9f9debfdde6559599f303286e70aeb0c2"},
    {file = "coverage-6.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:35b246ae3a2c042dc8f410c94bcb9754b18179cdb81ff9477a9089dbc9ecc186"},
    {file = "coverage-6.1.2-cp37-cp37m-win32.whl", hash = "sha256:0cde7d9fe2fb55ff68ebe7fb319ef188e9b88e0a3d1c9c5db7dd829cd93d2193"},
    {file = "coverage-6.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:958ac66272ff20e63d818627216e3d7412fdf68a2d25787b89a5c6f1eb7fdd93"},
    {file = "coverage-6.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a300b39c3d5905686c75a369d2a66e68fd01472ea42e16b38c948bd02b29e5bd"},
    {file = "coverage-6.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d3855d5d26292539861f5ced2ed042fc2aa33a12f80e487053aed3bcb6ced13"},
    {file = "coverage-6.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:586d38dfc7da4a87f5816b203ff06dd7c1bb5b16211ccaa0e9788a8da2b93696"},
    {file = "coverage-6.1.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a34fccb45f7b2d890183a263578d60a392a1a218fdc12f5bce1477a6a68d4373"},
    {file = "coverage-6.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bc1ee1318f703bc6c971da700d74466e9b86e0c443eb85983fb2a1bd20447263"},
    {file = "coverage-6.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3f546f48d5d80a90a266769aa613bc0719cb3e9c2ef3529d53f463996dd15a9d"},
    {file = "coverage-6.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd92ece726055e80d4e3f01fff3b91f54b18c9c357c48fcf6119e87e2461a091"},
    {file = "coverage-6.1.2-cp38-cp38-win32.whl", hash = "sha256:24ed38ec86754c4d5a706fbd5b52b057c3df87901a8610d7e5642a08ec07087e"},
    {file = "coverage-6.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:97ef6e9119bd39d60ef7b9cd5deea2b34869c9f0b9777450a7e3759c1ab09b9b"},
    {file = "coverage-6.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e5a8c947a2a89c56655ecbb789458a3a8e3b0cbf4c04250331df8f647b3de59"},
    {file = "coverage-6.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a39590d1e6acf6a3c435c5d233f72f5d43b585f5be834cff1f21fec4afda225"},
    {file = "coverage-6.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9d2c2e3ce7b8cc932a2f918186964bd44de8c84e2f9ef72dc616f5bb8be22e71"},
    {file = "coverage-6.1.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3348865798c077c695cae00da0924136bb5cc501f236cfd6b6d9f7a3c94e0ec4"},
    {file = "coverage-6.1.2-cp39-cp39-win32.whl", hash = "sha256:fae3fe111670e51f1ebbc475823899524e3459ea2db2cb88279bbfb2a0b8a3de"},
    {file = "coverage-6.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:af45eea024c0e3a25462fade161afab4f0d9d9e0d5a5d53e86149f74f0a35ecc"},
    {file = "coverage-6.1.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:eab14fdd410500dae50fd14ccc332e65543e7b39f6fc076fe90603a0e5d2f929"},
    {file = "coverage-6.1.2.tar.gz", hash = "sha256:d9a635114b88c0ab462e0355472d00a180a5fbfd8511e7f18e4ac32652e7d972"},
]
darglint = [
    {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"},
    {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"},
]
dataclasses = [
    {file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"},
    {file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"},
]
deprecated = [
    {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"},
    {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"},
]
duty = [
    {file = "duty-0.6.0-py3-none-any.whl", hash = "sha256:7757f4ce0875934341baea53b324a76150dddd7f95b82dda88b1fe0e84d78e38"},
    {file = "duty-0.6.0.tar.gz", hash = "sha256:551baa40460c0af976b6b8ff34fc389623a55053a2ffbed3dac13b1b3196714b"},
]
execnet = [
    {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"},
    {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
]
failprint = [
    {file = "failprint-0.6.2-py3-none-any.whl", hash = "sha256:93dee89bdde24b884a325d83cb399c7a9ef18553f15152124866248f50856d9a"},
    {file = "failprint-0.6.2.tar.gz", hash = "sha256:0ab080d43bb63cfa0f9f02402206176c9fba8c3484b83fc7992fdabfbb96f388"},
]
flake8 = [
    {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
    {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
]
flake8-bandit = [
    {file = "flake8_bandit-2.1.2.tar.gz", hash = "sha256:687fc8da2e4a239b206af2e54a90093572a60d0954f3054e23690739b0b0de3b"},
]
flake8-black = [
    {file = "flake8-black-0.2.3.tar.gz", hash = "sha256:c199844bc1b559d91195ebe8620216f21ed67f2cc1ff6884294c91a0d2492684"},
    {file = "flake8_black-0.2.3-py3-none-any.whl", hash = "sha256:cc080ba5b3773b69ba102b6617a00cc4ecbad8914109690cfda4d565ea435d96"},
]
flake8-bugbear = [
    {file = "flake8-bugbear-20.11.1.tar.gz", hash = "sha256:528020129fea2dea33a466b9d64ab650aa3e5f9ffc788b70ea4bc6cf18283538"},
    {file = "flake8_bugbear-20.11.1-py36.py37.py38-none-any.whl", hash = "sha256:f35b8135ece7a014bc0aee5b5d485334ac30a6da48494998cc1fabf7ec70d703"},
]
flake8-builtins = [
    {file = "flake8-builtins-1.5.3.tar.gz", hash = "sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b"},
    {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"},
]
flake8-comprehensions = [
    {file = "flake8-comprehensions-3.7.0.tar.gz", hash = "sha256:6b3218b2dde8ac5959c6476cde8f41a79e823c22feb656be2710cd2a3232cef9"},
    {file = "flake8_comprehensions-3.7.0-py3-none-any.whl", hash = "sha256:a5d7aea6315bbbd6fbcb2b4e80bff6a54d1600155e26236e555d0c6fe1d62522"},
]
flake8-docstrings = [
    {file = "flake8-docstrings-1.6.0.tar.gz", hash = "sha256:9fe7c6a306064af8e62a055c2f61e9eb1da55f84bb39caef2b84ce53708ac34b"},
    {file = "flake8_docstrings-1.6.0-py2.py3-none-any.whl", hash = "sha256:99cac583d6c7e32dd28bbfbef120a7c0d1b6dde4adb5a9fd441c4227a6534bde"},
]
flake8-plugin-utils = [
    {file = "flake8-plugin-utils-1.3.2.tar.gz", hash = "sha256:20fa2a8ca2decac50116edb42e6af0a1253ef639ad79941249b840531889c65a"},
    {file = "flake8_plugin_utils-1.3.2-py3-none-any.whl", hash = "sha256:1fe43e3e9acf3a7c0f6b88f5338cad37044d2f156c43cb6b080b5f9da8a76f06"},
]
flake8-polyfill = [
    {file = "flake8-polyfill-1.0.2.tar.gz", hash = "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda"},
    {file = "flake8_polyfill-1.0.2-py2.py3-none-any.whl", hash = "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9"},
]
flake8-pytest-style = [
    {file = "flake8-pytest-style-1.5.1.tar.gz", hash = "sha256:56af62da468a547560a9f455c7f205449ed03e8f8a42f85373180e91c1031c40"},
    {file = "flake8_pytest_style-1.5.1-py3-none-any.whl", hash = "sha256:ae62f8db8ad0ea7d90695deb6dbbacfc67d45cb83a7c360388b34a9705786114"},
]
flake8-string-format = [
    {file = "flake8-string-format-0.3.0.tar.gz", hash = "sha256:65f3da786a1461ef77fca3780b314edb2853c377f2e35069723348c8917deaa2"},
    {file = "flake8_string_format-0.3.0-py2.py3-none-any.whl", hash = "sha256:812ff431f10576a74c89be4e85b8e075a705be39bc40c4b4278b5b13e2afa9af"},
]
flake8-tidy-imports = [
    {file = "flake8-tidy-imports-4.5.0.tar.gz", hash = "sha256:ac637961d0f319012d099e49619f8c928e3221f74e00fe6eb89513bc64c40adb"},
    {file = "flake8_tidy_imports-4.5.0-py3-none-any.whl", hash = "sha256:87eed94ae6a2fda6a5918d109746feadf1311e0eb8274ab7a7920f6db00a41c9"},
]
flake8-variables-names = [
    {file = "flake8_variables_names-0.0.4.tar.gz", hash = "sha256:d6fa0571a807c72940b5773827c5760421ea6f8206595ff0a8ecfa01e42bf2cf"},
]
ghp-import = [
    {file = "ghp-import-2.0.2.tar.gz", hash = "sha256:947b3771f11be850c852c64b561c600fdddf794bab363060854c1ee7ad05e071"},
    {file = "ghp_import-2.0.2-py3-none-any.whl", hash = "sha256:5f8962b30b20652cdffa9c5a9812f7de6bcb56ec475acac579807719bf242c46"},
]
git-changelog = [
    {file = "git-changelog-0.4.2.tar.gz", hash = "sha256:e3fe1938e519dafd083957fa61350868e99f2f84eed9e7e543d0a7dc2b4c8b85"},
    {file = "git_changelog-0.4.2-py3-none-any.whl", hash = "sha256:d95f540ac0af332d2e59b50f67a60b33280ac7d87859ad4e85972685061f1f53"},
]
gitdb = [
    {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"},
    {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"},
]
gitpython = [
    {file = "GitPython-3.1.20-py3-none-any.whl", hash = "sha256:b1e1c269deab1b08ce65403cf14e10d2ef1f6c89e33ea7c5e5bb0222ea593b8a"},
    {file = "GitPython-3.1.20.tar.gz", hash = "sha256:df0e072a200703a65387b0cfdf0466e3bab729c0458cf6b7349d0e9877636519"},
]
h11 = [
    {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
    {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
]
httpcore = [
    {file = "httpcore-0.12.3-py3-none-any.whl", hash = "sha256:93e822cd16c32016b414b789aeff4e855d0ccbfc51df563ee34d4dbadbb3bcdc"},
    {file = "httpcore-0.12.3.tar.gz", hash = "sha256:37ae835fb370049b2030c3290e12ed298bf1473c41bb72ca4aa78681eba9b7c9"},
]
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.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"},
    {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"},
]
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.8.0-py3-none-any.whl", hash = "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"},
    {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"},
]
jinja2 = [
    {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
    {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
]
jinja2-cli = [
    {file = "jinja2-cli-0.7.0.tar.gz", hash = "sha256:9ccd8d530dad5d031230afd968cf54637b49842a13ececa6e17c2f67f6e9336e"},
    {file = "jinja2_cli-0.7.0-py2.py3-none-any.whl", hash = "sha256:9b3fca56f4c5f1aaf50f5762e60435990c6f4f699fa491afee058295c8a4c189"},
]
markdown = [
    {file = "Markdown-3.3.4-py3-none-any.whl", hash = "sha256:96c3ba1261de2f7547b46a00ea8463832c921d3f9d6aba3f255a6f71386db20c"},
    {file = "Markdown-3.3.4.tar.gz", hash = "sha256:31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49"},
]
markupsafe = [
    {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-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-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_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-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-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"},
]
mergedeep = [
    {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
    {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
]
mkdocs = [
    {file = "mkdocs-1.2.3-py3-none-any.whl", hash = "sha256:a1fa8c2d0c1305d7fc2b9d9f607c71778572a8b110fb26642aa00296c9e6d072"},
    {file = "mkdocs-1.2.3.tar.gz", hash = "sha256:89f5a094764381cda656af4298727c9f53dc3e602983087e1fe96ea1df24f4c1"},
]
mkdocs-autorefs = [
    {file = "mkdocs-autorefs-0.2.1.tar.gz", hash = "sha256:b8156d653ed91356e71675ce1fa1186d2b2c2085050012522895c9aa98fca3e5"},
    {file = "mkdocs_autorefs-0.2.1-py3-none-any.whl", hash = "sha256:f301b983a34259df90b3fcf7edc234b5e6c7065bd578781e66fd90b8cfbe76be"},
]
mkdocs-coverage = [
    {file = "mkdocs-coverage-0.2.1.tar.gz", hash = "sha256:32a3581b2c4d44289d2d17dd1d9dca36bc640db699bbe007803370b52780b37e"},
    {file = "mkdocs_coverage-0.2.1-py3-none-any.whl", hash = "sha256:0d860b6d5852933e00ff14151600bfc6495349f876b2a7c3b53cb4b972591754"},
]
mkdocs-macros-plugin = [
    {file = "mkdocs-macros-plugin-0.5.12.tar.gz", hash = "sha256:106aeb1ff3ba580e4884aec225ec6891ed8c93d083056088f8e66f3309fcd579"},
    {file = "mkdocs_macros_plugin-0.5.12-py3-none-any.whl", hash = "sha256:43b7ea0259e2e18a7fe52b73a548c5ea38bb99bc9ab37d026cbdd42e45769c65"},
]
mkdocs-material = [
    {file = "mkdocs-material-6.2.8.tar.gz", hash = "sha256:ce2f4a71e5db49540d71fd32f9afba7645765f7eca391e560d1d27f947eb344c"},
    {file = "mkdocs_material-6.2.8-py2.py3-none-any.whl", hash = "sha256:c9b63d709d29778aa3dafc7178b6a8c655b00937be2594aab016d1423696c792"},
]
mkdocs-material-extensions = [
    {file = "mkdocs-material-extensions-1.0.3.tar.gz", hash = "sha256:bfd24dfdef7b41c312ede42648f9eb83476ea168ec163b613f9abd12bbfddba2"},
    {file = "mkdocs_material_extensions-1.0.3-py3-none-any.whl", hash = "sha256:a82b70e533ce060b2a5d9eb2bc2e1be201cf61f901f93704b4acf6e3d5983a44"},
]
mkdocstrings = [
    {file = "mkdocstrings-0.15.2-py3-none-any.whl", hash = "sha256:8d6cbe64c07ae66739010979ca01d49dd2f64d1a45009f089d217b9cd2a65e36"},
    {file = "mkdocstrings-0.15.2.tar.gz", hash = "sha256:c2fee9a3a644647c06eb2044fdfede1073adfd1a55bf6752005d3db10705fe73"},
]
mypy = [
    {file = "mypy-0.812-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49"},
    {file = "mypy-0.812-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c"},
    {file = "mypy-0.812-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521"},
    {file = "mypy-0.812-cp35-cp35m-win_amd64.whl", hash = "sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb"},
    {file = "mypy-0.812-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a"},
    {file = "mypy-0.812-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c"},
    {file = "mypy-0.812-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6"},
    {file = "mypy-0.812-cp36-cp36m-win_amd64.whl", hash = "sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064"},
    {file = "mypy-0.812-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56"},
    {file = "mypy-0.812-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8"},
    {file = "mypy-0.812-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7"},
    {file = "mypy-0.812-cp37-cp37m-win_amd64.whl", hash = "sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564"},
    {file = "mypy-0.812-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506"},
    {file = "mypy-0.812-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5"},
    {file = "mypy-0.812-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66"},
    {file = "mypy-0.812-cp38-cp38-win_amd64.whl", hash = "sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e"},
    {file = "mypy-0.812-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a"},
    {file = "mypy-0.812-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a"},
    {file = "mypy-0.812-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97"},
    {file = "mypy-0.812-cp39-cp39-win_amd64.whl", hash = "sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df"},
    {file = "mypy-0.812-py3-none-any.whl", hash = "sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4"},
    {file = "mypy-0.812.tar.gz", hash = "sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119"},
]
mypy-extensions = [
    {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
    {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
]
oauthlib = [
    {file = "oauthlib-3.1.1-py2.py3-none-any.whl", hash = "sha256:42bf6354c2ed8c6acb54d971fce6f88193d97297e18602a3a886603f9d7730cc"},
    {file = "oauthlib-3.1.1.tar.gz", hash = "sha256:8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3"},
]
packaging = [
    {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"},
    {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"},
]
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.7.0-py2.py3-none-any.whl", hash = "sha256:60002958e459b195e8dbe61bf22bcf344eedf1b4e03a321a5414feb15566100c"},
    {file = "pbr-5.7.0.tar.gz", hash = "sha256:4651ca1445e80f2781827305de3d76b3ce53195f2227762684eb08f17bc473b7"},
]
pep8-naming = [
    {file = "pep8-naming-0.11.1.tar.gz", hash = "sha256:a1dd47dd243adfe8a83616e27cf03164960b507530f155db94e10b36a6cd6724"},
    {file = "pep8_naming-0.11.1-py2.py3-none-any.whl", hash = "sha256:f43bfe3eea7e0d73e8b5d07d6407ab47f2476ccaeff6937c84275cd30b016738"},
]
pluggy = [
    {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
    {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
ptyprocess = [
    {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"},
    {file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"},
]
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"},
]
pydocstyle = [
    {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"},
    {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"},
]
pyflakes = [
    {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"},
    {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"},
]
pygments = [
    {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"},
    {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"},
]
pymdown-extensions = [
    {file = "pymdown-extensions-8.2.tar.gz", hash = "sha256:b6daa94aad9e1310f9c64c8b1f01e4ce82937ab7eb53bfc92876a97aca02a6f4"},
    {file = "pymdown_extensions-8.2-py3-none-any.whl", hash = "sha256:141452d8ed61165518f2c923454bf054866b85cf466feedb0eb68f04acdc2560"},
]
pyparsing = [
    {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
    {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
]
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.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"},
    {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"},
]
pytest-randomly = [
    {file = "pytest-randomly-3.10.2.tar.gz", hash = "sha256:2c0a332c4b124e372e2473803bcc91ec87797664f4955afef2b844c0021662b1"},
    {file = "pytest_randomly-3.10.2-py3-none-any.whl", hash = "sha256:cbd5c50b7c41491c202c71a3df33a75619d610a4f5c34aa2bd02ac30fce7cd43"},
]
pytest-sugar = [
    {file = "pytest-sugar-0.9.4.tar.gz", hash = "sha256:b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3"},
]
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"},
]
python-gitlab = [
    {file = "python-gitlab-2.10.1.tar.gz", hash = "sha256:7afa7d7c062fa62c173190452265a30feefb844428efc58ea5244f3b9fc0d40f"},
    {file = "python_gitlab-2.10.1-py3-none-any.whl", hash = "sha256:581a219759515513ea9399e936ed7137437cfb681f52d2641626685c492c999d"},
]
pytkdocs = [
    {file = "pytkdocs-0.11.0-py3-none-any.whl", hash = "sha256:8fb46adc1416fbeafebc3ea6f2adbf71efec2ff5d651a3f82801f0b6514703c2"},
    {file = "pytkdocs-0.11.0.tar.gz", hash = "sha256:e63ec71dc5e9feabc672f862f04394abd26557c7831c25cb8a60c99af36693b9"},
]
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"},
]
pyyaml-env-tag = [
    {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"},
    {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"},
]
regex = [
    {file = "regex-2021.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf"},
    {file = "regex-2021.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f"},
    {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965"},
    {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667"},
    {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36"},
    {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f"},
    {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0"},
    {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4"},
    {file = "regex-2021.11.10-cp310-cp310-win32.whl", hash = "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a"},
    {file = "regex-2021.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12"},
    {file = "regex-2021.11.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc"},
    {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0"},
    {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30"},
    {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345"},
    {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733"},
    {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23"},
    {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e"},
    {file = "regex-2021.11.10-cp36-cp36m-win32.whl", hash = "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4"},
    {file = "regex-2021.11.10-cp36-cp36m-win_amd64.whl", hash = "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e"},
    {file = "regex-2021.11.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"},
    {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36"},
    {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d"},
    {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8"},
    {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a"},
    {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e"},
    {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f"},
    {file = "regex-2021.11.10-cp37-cp37m-win32.whl", hash = "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec"},
    {file = "regex-2021.11.10-cp37-cp37m-win_amd64.whl", hash = "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4"},
    {file = "regex-2021.11.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83"},
    {file = "regex-2021.11.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244"},
    {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50"},
    {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646"},
    {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb"},
    {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec"},
    {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe"},
    {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94"},
    {file = "regex-2021.11.10-cp38-cp38-win32.whl", hash = "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc"},
    {file = "regex-2021.11.10-cp38-cp38-win_amd64.whl", hash = "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d"},
    {file = "regex-2021.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b"},
    {file = "regex-2021.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d"},
    {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7"},
    {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc"},
    {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb"},
    {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449"},
    {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b"},
    {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef"},
    {file = "regex-2021.11.10-cp39-cp39-win32.whl", hash = "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a"},
    {file = "regex-2021.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29"},
    {file = "regex-2021.11.10.tar.gz", hash = "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6"},
]
requests = [
    {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"},
    {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"},
]
requests-oauthlib = [
    {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"},
    {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"},
    {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"},
]
requests-toolbelt = [
    {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"},
    {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"},
]
rfc3986 = [
    {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
    {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
]
six = [
    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
smmap = [
    {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"},
    {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"},
]
sniffio = [
    {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
    {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
]
snowballstemmer = [
    {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"},
    {file = "snowballstemmer-2.1.0.tar.gz", hash = "sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914"},
]
stevedore = [
    {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"},
    {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"},
]
termcolor = [
    {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
]
toml = [
    {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
    {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typed-ast = [
    {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"},
    {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"},
    {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"},
    {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"},
    {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"},
    {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"},
    {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"},
    {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"},
    {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"},
    {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"},
    {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"},
    {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"},
    {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"},
    {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"},
    {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"},
    {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"},
    {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"},
    {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"},
    {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"},
    {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"},
    {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"},
    {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"},
    {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"},
    {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"},
    {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"},
    {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"},
    {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"},
    {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"},
    {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"},
    {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"},
]
typing-extensions = [
    {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
    {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
    {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
urllib3 = [
    {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"},
    {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"},
]
watchdog = [
    {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3"},
    {file = "watchdog-2.1.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b"},
    {file = "watchdog-2.1.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542"},
    {file = "watchdog-2.1.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669"},
    {file = "watchdog-2.1.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660"},
    {file = "watchdog-2.1.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3"},
    {file = "watchdog-2.1.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04"},
    {file = "watchdog-2.1.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b"},
    {file = "watchdog-2.1.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604"},
    {file = "watchdog-2.1.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6"},
    {file = "watchdog-2.1.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9"},
    {file = "watchdog-2.1.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_aarch64.whl", hash = "sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_armv7l.whl", hash = "sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_i686.whl", hash = "sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_s390x.whl", hash = "sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2"},
    {file = "watchdog-2.1.6-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15"},
    {file = "watchdog-2.1.6-py3-none-win32.whl", hash = "sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d"},
    {file = "watchdog-2.1.6-py3-none-win_amd64.whl", hash = "sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5"},
    {file = "watchdog-2.1.6-py3-none-win_ia64.whl", hash = "sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923"},
    {file = "watchdog-2.1.6.tar.gz", hash = "sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7"},
]
wps-light = [
    {file = "wps-light-0.15.3.tar.gz", hash = "sha256:e3040611340796427c346006298954c859ab12471cf31ec60d6254af95d70c37"},
    {file = "wps_light-0.15.3-py3-none-any.whl", hash = "sha256:1193bad23fd2bfd74c0cb2558f3dd66eb0619cfaee895a1c113252d1965d555e"},
]
wrapt = [
    {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"},
    {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"},
    {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"},
    {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"},
    {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"},
    {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"},
    {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"},
    {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"},
    {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"},
    {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"},
    {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"},
    {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"},
    {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"},
    {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"},
    {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"},
    {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"},
    {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"},
    {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"},
    {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"},
    {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"},
    {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"},
    {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"},
    {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"},
    {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"},
    {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"},
    {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"},
    {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"},
    {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"},
    {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"},
    {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"},
    {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"},
    {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"},
    {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"},
    {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"},
    {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"},
    {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"},
    {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"},
    {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"},
    {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"},
    {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"},
    {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"},
    {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"},
    {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"},
    {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"},
    {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"},
    {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"},
    {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"},
    {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"},
    {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"},
    {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"},
    {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"},
]
zipp = [
    {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"},
    {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"},
]

I was hoping to be able to switch from poetry to pdm but until this issue is resolved doesn't look like i can yet.

I would just try to start a test project from : https://github.com/pawamoy/copier-pdm which is the Original posters thing and add one of the applicable things me or him mentioned.

I do agree it seem possibly related to those 'mkdocs, autoflake, flake8, black, python>=3.6' ones as those are the primary ones it shows when its stuck in a loop till it times out.

Thanks for your time and care into looking into it. This project looks pretty compelling and looking forward to using it in depth in the future ;)

@pawamoy
Copy link
Contributor Author

pawamoy commented Nov 15, 2021

I noticed nothing: after first generating a project, and starting the locking process, the resolution goes in a loop. If I interrupt it, and restart the locking process, it manages to finish resolving the deps. Just as if something got cached during the loop, that PDM was only able to use after restarting the locking process.

@frostming
Copy link
Collaborator

Anyone would volunteer to try to reduce the number of dependencies for reproducing the problem? It is a headache waiting for a long locking process and seeing success. Sorry but I just don't have enough energy to debug this issue.

@pawamoy
Copy link
Contributor Author

pawamoy commented Nov 18, 2021

I'll try to find some time @frostming 🙂

@frostming frostming added the ❓ help wanted Extra attention is needed label Nov 18, 2021
@JaviFuentes94
Copy link

Experiencing the same issue with the latest pdm version in a couple of projects. Unfortunately, my project has a lot of dependencies (some of them private) so I can't provide a minimal example.

@pawamoy
Copy link
Contributor Author

pawamoy commented Nov 18, 2021

Here is a reduced set:

[build-system]
requires = ["pdm-pep517"]
build-backend = "pdm.pep517.api"

[project]
name = "pawamoy-testing"
version = "0.0.0"
description = "Testing this great template"
authors = [{name = "Timothee Mazzucotelli", email = "pawamoy@pm.me"}]
license = {file = "LICENSE"}
readme = "README.md"
requires-python = ">=3.6.2"
dependencies = []

[tool.pdm]
package-dir = "src"

[tool.pdm.dev-dependencies]
dev = [
    "duty~=0.7",
    "mkdocs-literate-nav~=0.4; python_version >= '3.7'",
    "autoflake~=1.4",
    "flake8-comprehensions~=3.7",
    "flake8-docstrings~=1.6",
    "flake8-string-format~=0.3",
    "flake8-tidy-imports~=4.5",
    "pytest-cov~=3.0",
    "pytest-xdist~=2.4",
]

To replicate:

  • lock
  • add package
pdm lock
pdm add dependenpy -v  # loop

Note that if I don't lock before adding the package (i.e. if I do pdm add dependenpy directly), it manages to resolve everything. You have to lock a first time before adding the package to replicate.

@pawamoy
Copy link
Contributor Author

pawamoy commented Nov 19, 2021

#746 seems to fix the issue 🚀 Thanks!
I'll reopen a new issue if I experience it again!
@JaviFuentes94 @meramsey let us know if #746 fixed it for you as well.

@pawamoy pawamoy closed this as completed Nov 19, 2021
@meramsey
Copy link

After updating the pdm by running installer again
Removing the pdm.lock
Then running pdm install from the project root works now.

Thanks for resolving the issue @frostming looking forward to testing stuff out further now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working ❓ help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

4 participants