From 1f1faee98477540ee15d44902e43bbfe8e4ea074 Mon Sep 17 00:00:00 2001 From: Peter Schutt Date: Wed, 22 Jun 2022 16:14:09 +1000 Subject: [PATCH 1/4] POC for controlled development environment and usage instructions. --- CONTRIBUTING.md | 45 ++++++++++++++++++++++++++------------------- pyproject.toml | 21 +++++++++++++++++++++ tox.ini | 10 +++++----- 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 246a91ac2e..4c939d4e09 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,40 +2,47 @@ To contribute code changes or update the documentation, please follow these steps: +## Making changes + 1. Fork the upstream repository and clone the fork locally. -2. Install [poetry](https://python-poetry.org/), and install the project's dependencies with `poetry install` -3. Install [pre-commit](https://pre-commit.com/) and install the hook by running `pre-commit install` -4. Make whatever changes and additions you wish and commit these - please try to keep your commit history clean. -5. Create a pull request to the main repository with an explanation of your changes +2. Setup a development environment by follwing the steps below. +3. Make whatever changes and additions you wish and commit these - please try to keep your commit history clean. +4. Create a pull request to the main repository with an explanation of your changes Note: if you add new code or modify existing code - 100% test coverage is mandatory and tests should be well written. ---- - -## Tox for testing against different versions - -### Config +## Setup a dev environment -1. Install and configure [pyenv](https://github.com/pyenv/pyenv) -2. Install required python versions via pyenv, e.g., `$ pyenv install 3.x.x` for each required version. -3. In root directory of library, create .python-version file in root, e.g.: +1. Install `pyenv` and configure per the instructions for your platform: https://github.com/pyenv/pyenv#installation +2. Install the specific versions of python you wish to test against, generally this would be latest available point + releases, e.g., `$ pyenv install 3.10.5`. (Obsoleted python versions can be cleaned up with `$ pyenv uninstall `) +3. In root directory of library, create `.python-version` file, and list the versions of python to test against, e.g.: ```text +# .python-version 3.10.5 3.9.13 3.8.13 3.7.13 ``` -4. Restart shell or run command like: `$ pyenv shell 3.10.5 3.9.13 3.8.13 3.7.13` -5. Remove any existing poetry environment: `$ poetry env remove python` -6. Tell poetry to use system python 1: `$ poetry env use system` -7. `$ poetry install` +4. Restart shell, run `pyenv local` and the versions listed in `.python-version` should emit to stdout. +5. If an existing poetry environment exists, can remove with `poetry env remove python`. +6. Tell poetry to use the preferred python version specified, e.g., `poetry env use 3.10.5`. +7. Install library and dev dependencies `poetry install --extras "test lint dev"`. + +### Existing workflow + +If preferred workflow is to interact with `pytest` and `pre-commit` directly, you can do that as +expected: + +- `$ poetry run pytest` +- `$ pre-commit run --all-files` -1: Not sure if this is the "right" way to handle this yet, however this prevents poetry from reusing -the local environment in each of the tox environments. +However, all but the most significant changes should be tested across all supported versions. Doing +this locally saves having to wait for a CI failure to pick up cross-version errors. -### Run +### Test against all versions `$ poetry run tox` diff --git a/pyproject.toml b/pyproject.toml index d8538d85e2..b027362d5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,17 @@ python-multipart = "*" pyyaml = "*" starlette = "*" typing-extensions = "*" + +Jinja2 = { version = "*", optional = true } +Mako = { version = "*", optional = true } +freezegun = { version = "*", optional = true } +hypothesis = { extras = ["cli"], version = "*", optional = true } +mkdocs-material = { version = "^8.2.0", optional = true } +pre-commit = { version = "*", optional = true } +pytest = { version = "*", optional = true } +pytest-asyncio = { version = "*", optional = true } +pytest-cov = { version = "*", optional = true } +pytest-mock = { version = "*", optional = true } requests = { version = "*", optional = true } brotli = { version = "*", optional = true } @@ -58,10 +69,20 @@ freezegun = "*" pytest-mock = "*" tox = "*" requests = "*" +sqlalchemy = { extras = ["mypy"], version = "*", optional = true } +tox = { version = "*", optional = true } +uvicorn = { version = "*", optional = true } [tool.poetry.extras] testing = ["requests","brotli"] brotli = ["brotli"] +test = [ + "hypothesis", "pytest", "pytest-asyncio", "pytest-cov", "uvicorn", "sqlalchemy", "Jinja2", + "Mako", "freezegun", "pytest-mock" +] +lint = ["pre-commit"] +docs = ["mkdocs-material"] +dev = ["tox"] [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tox.ini b/tox.ini index fae7d64566..cfdfdb8100 100644 --- a/tox.ini +++ b/tox.ini @@ -3,11 +3,11 @@ isolated_build = True envlist = py37,py38,py39,py310,lint [testenv] -whitelist_externals = poetry -commands = - poetry install -v - poetry run pytest . +extras = + test +commands = pytest [testenv:lint] -deps = pre-commit +extras = + lint commands = pre-commit run --all-files --show-diff-on-failure From a8c0be03dadabe63fd6d8bf52487115a6c35327c Mon Sep 17 00:00:00 2001 From: Peter Schutt Date: Fri, 24 Jun 2022 16:36:22 +1000 Subject: [PATCH 2/4] Improved tox testing setup and CI. --- .github/workflows/ci.yaml | 66 +++++++++++++++++++++------------------ CONTRIBUTING.md | 4 +++ pyproject.toml | 27 ++++++++++++++-- starlite/utils/typing.py | 2 +- tox.ini | 54 +++++++++++++++++++++++++++----- 5 files changed, 112 insertions(+), 41 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index c1460cc2a3..b31ffe4b8c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -4,19 +4,10 @@ on: push: branches: - main +env: + PYTHON_LATEST: "3.10" jobs: - validate: - runs-on: ubuntu-latest - env: - SETUPTOOLS_USE_DISTUTILS: stdlib - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: "3.10" - - uses: pre-commit/action@v3.0.0 test: - needs: validate runs-on: ubuntu-latest strategy: fail-fast: true @@ -29,30 +20,43 @@ jobs: uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - name: Install Poetry - uses: snok/install-poetry@v1 - - name: Load cached venv - id: cached-poetry-dependencies - uses: actions/cache@v3 + - name: Install Dependencies + run: | + python -VV + python -m site + python -m pip install --upgrade pip setuptools wheel + python -m pip install --upgrade virtualenv tox tox-gh-actions + - run: "python -m tox" + - name: Upload coverage data + uses: actions/upload-artifact@v3 with: - path: .venv - key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }} - - name: Install dependencies - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - run: poetry install --no-interaction --no-root --extras="brotli" - - name: Set pythonpath - run: echo "PYTHONPATH=$PWD" >> $GITHUB_ENV - - name: Test - run: poetry run pytest - if: matrix.python-version != '3.10' - - name: Test with Coverage - run: poetry run pytest --cov=. --cov-report=xml - if: matrix.python-version == '3.10' - - uses: actions/upload-artifact@v3 + name: coverage-data + path: "tests/.coverage.*" + if-no-files-found: ignore + coverage: + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v3 + with: + # Use latest Python, so it understands all syntax. + python-version: ${{env.PYTHON_LATEST}} + - run: python -m pip install --upgrade coverage[toml] + - name: Download coverage data + uses: actions/download-artifact@v3 + with: + name: coverage-data + - name: Combine coverage and upload + run: | + python -m coverage combine + python -m coverage xml -i + python -m coverage report -i + - name: Upload XML report + uses: actions/upload-artifact@v3 with: name: coverage-xml path: coverage.xml - if: matrix.python-version == '3.10' sonar: needs: test if: github.event.pull_request.head.repo.fork == false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4c939d4e09..6d0d696663 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,6 +11,10 @@ To contribute code changes or update the documentation, please follow these step Note: if you add new code or modify existing code - 100% test coverage is mandatory and tests should be well written. +## Setup a simple dev environment + +1. Ensure `poetry` is available + ## Setup a dev environment 1. Install `pyenv` and configure per the instructions for your platform: https://github.com/pyenv/pyenv#installation diff --git a/pyproject.toml b/pyproject.toml index b027362d5e..968c211810 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,8 +77,16 @@ uvicorn = { version = "*", optional = true } testing = ["requests","brotli"] brotli = ["brotli"] test = [ - "hypothesis", "pytest", "pytest-asyncio", "pytest-cov", "uvicorn", "sqlalchemy", "Jinja2", - "Mako", "freezegun", "pytest-mock" + "Jinja2", + "Mako", + "freezegun", + "hypothesis", + "pytest", + "pytest-asyncio", + "pytest-cov", + "pytest-mock", + "sqlalchemy", + "uvicorn", ] lint = ["pre-commit"] docs = ["mkdocs-material"] @@ -131,7 +139,22 @@ ignored-argument-names = "args|kwargs|_|__" good-names = "_,i,e,fn" [tool.coverage.run] +branch = true +data_file = "./.coverage" omit = ["*/tests/*"] +source = ["starlite"] + +[tool.coverage.paths] +source = [ + "../starlite", + "*/site-packages/starlite" +] + +[tool.coverage.report] +fail_under = 97 + +[tool.coverage.xml] +output = "./coverage.xml" [tool.pytest.ini_options] asyncio_mode = "auto" diff --git a/starlite/utils/typing.py b/starlite/utils/typing.py index 40384ccf4d..b5f693c142 100644 --- a/starlite/utils/typing.py +++ b/starlite/utils/typing.py @@ -8,7 +8,7 @@ UNION_TYPES = {UnionType, Union} else: - UNION_TYPES = {Union} # pragma: no cover + UNION_TYPES = {Union} def detect_optional_union(annotation: Any) -> bool: diff --git a/tox.ini b/tox.ini index cfdfdb8100..9be0f30faa 100644 --- a/tox.ini +++ b/tox.ini @@ -1,13 +1,53 @@ [tox] +envlist = clean,py37,py38,py39,py310,lint,coverage-report isolated_build = True -envlist = py37,py38,py39,py310,lint + +[gh-actions] +python = + 3.7: py37 + 3.8: py38 + 3.9: py39 + 3.10: py310,lint [testenv] -extras = - test -commands = pytest +extras = test +commands = python -m pytest {posargs: -vv} --no-cov +# change dir to tests/ as advised for projects w/out `src/` dir layout, see: +# https://github.com/pytest-dev/pytest-cov/blob/4cfbe1426f681770360294718ca9e2fe0bb9c229/examples/adhoc-layout/tox.ini#L24-L25 +changedir = tests + +setenv = + py{37,310}: COVERAGE_FILE = .coverage.{envname} + +[testenv:py37] +basepython = python3.7 +depends = clean +extras = test +commands = python -m pytest {posargs: -vv} --cov --cov-append + +[testenv:py310] +basepython = python3.10 +depends = clean +extras = test +commands = python -m pytest {posargs: -vv} --cov --cov-append + +[testenv:coverage-report] +basepython = python3.10 +depends = py37,py310 +skip_install = true +deps = coverage[toml]>=6.4 +commands = + coverage combine + coverage xml -i + coverage report --fail-under=97 -i [testenv:lint] -extras = - lint -commands = pre-commit run --all-files --show-diff-on-failure +basepython = python3.10 +skip_install = true +deps = pre-commit +commands = pre-commit run --all-files + +[testenv:clean] +skip_install = true +deps = coverage +commands = coverage erase From 6f666f0ac44400c6c06f2b633ec844c252d2e1ef Mon Sep 17 00:00:00 2001 From: Peter Schutt Date: Mon, 27 Jun 2022 12:08:50 +1000 Subject: [PATCH 3/4] Add requests to `test` extras. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 968c211810..8e371549d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -85,6 +85,7 @@ test = [ "pytest-asyncio", "pytest-cov", "pytest-mock", + "requests", "sqlalchemy", "uvicorn", ] From 9023ac40fd44c420f9ae9600c8b86ea68b7f97da Mon Sep 17 00:00:00 2001 From: Peter Schutt Date: Sun, 10 Jul 2022 21:20:15 +1000 Subject: [PATCH 4/4] Rebased, updates. --- CONTRIBUTING.md | 2 +- poetry.lock | 354 ++++++++++++++++++++++++------------------------ pyproject.toml | 30 ++-- tox.ini | 2 +- 4 files changed, 187 insertions(+), 201 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d0d696663..b7bca31148 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ To contribute code changes or update the documentation, please follow these step ## Making changes 1. Fork the upstream repository and clone the fork locally. -2. Setup a development environment by follwing the steps below. +2. Setup a development environment by following the steps below. 3. Make whatever changes and additions you wish and commit these - please try to keep your commit history clean. 4. Create a pull request to the main repository with an explanation of your changes diff --git a/poetry.lock b/poetry.lock index b9ce419cfa..8e7f2534d2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -20,16 +20,16 @@ trio = ["trio (>=0.16)"] name = "atomicwrites" version = "1.4.1" description = "Atomic file writes." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" version = "21.4.0" description = "Classes Without Boilerplate" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] @@ -42,8 +42,8 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> name = "black" version = "22.6.0" description = "The uncompromising code formatter." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6.2" [package.dependencies] @@ -74,15 +74,23 @@ name = "certifi" version = "2022.6.15" description = "Python package for providing Mozilla's CA Bundle." category = "main" -optional = false +optional = true python-versions = ">=3.6" +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "main" +optional = true +python-versions = ">=3.6.1" + [[package]] name = "charset-normalizer" version = "2.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" -optional = false +optional = true python-versions = ">=3.6.0" [package.extras] @@ -92,8 +100,8 @@ unicode_backport = ["unicodedata2"] name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -104,16 +112,16 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} name = "colorama" version = "0.4.5" description = "Cross-platform colored terminal text." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "commonmark" version = "0.9.1" description = "Python parser for the CommonMark Markdown spec" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "*" [package.extras] @@ -123,8 +131,8 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "coverage" version = "6.4.1" description = "Code coverage measurement for Python" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -137,16 +145,16 @@ toml = ["tomli"] name = "distlib" version = "0.3.4" description = "Distribution utilities" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "*" [[package]] name = "exceptiongroup" version = "1.0.0rc8" description = "Backport of PEP 654 (exception groups)" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.extras] @@ -176,8 +184,8 @@ typing-extensions = {version = ">=3.10.0.2", markers = "python_version < \"3.8\" name = "filelock" version = "3.7.1" description = "A platform independent file lock." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.extras] @@ -188,8 +196,8 @@ testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-co name = "freezegun" version = "1.2.1" description = "Let your Python tests travel through time" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -199,8 +207,8 @@ python-dateutil = ">=2.7" name = "ghp-import" version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." -category = "dev" -optional = false +category = "main" +optional = true python-versions = "*" [package.dependencies] @@ -213,8 +221,8 @@ dev = ["twine", "markdown", "flake8", "wheel"] name = "greenlet" version = "1.1.2" description = "Lightweight in-process concurrent programming" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" [package.extras] @@ -224,8 +232,8 @@ docs = ["sphinx"] name = "h11" version = "0.13.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -233,10 +241,10 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "hypothesis" -version = "6.50.0" +version = "6.50.1" description = "A library for property-based testing" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -263,6 +271,17 @@ pytz = ["pytz (>=2014.1)"] redis = ["redis (>=3.0.0)"] zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2022.1)"] +[[package]] +name = "identify" +version = "2.5.1" +description = "File identification library for Python" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.3" @@ -275,8 +294,8 @@ python-versions = ">=3.5" name = "importlib-metadata" version = "4.12.0" description = "Read metadata from Python packages" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -292,16 +311,16 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- name = "iniconfig" version = "1.1.1" description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "*" [[package]] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -314,8 +333,8 @@ i18n = ["Babel (>=2.7)"] name = "mako" version = "1.2.1" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -331,8 +350,8 @@ testing = ["pytest"] name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -345,24 +364,24 @@ testing = ["coverage", "pyyaml"] name = "markupsafe" version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [[package]] name = "mergedeep" version = "1.3.4" description = "A deep merge function for 🐍." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [[package]] name = "mkdocs" version = "1.3.0" description = "Project documentation with Markdown." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -384,8 +403,8 @@ i18n = ["babel (>=2.9.0)"] name = "mkdocs-material" version = "8.3.9" description = "Documentation that simply works" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -400,16 +419,16 @@ pymdown-extensions = ">=9.4" name = "mkdocs-material-extensions" version = "1.0.3" description = "Extension pack for Python Markdown." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [[package]] name = "mypy" version = "0.961" description = "Optional static typing for Python" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -427,10 +446,18 @@ reports = ["lxml"] name = "mypy-extensions" version = "0.4.3" description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" -optional = false +category = "main" +optional = true python-versions = "*" +[[package]] +name = "nodeenv" +version = "1.7.0" +description = "Node.js virtual environment builder" +category = "main" +optional = true +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" + [[package]] name = "openapi-schema-pydantic" version = "1.2.4" @@ -454,8 +481,8 @@ python-versions = ">=3.7" name = "packaging" version = "21.3" description = "Core utilities for Python packages" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -465,16 +492,16 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" name = "pathspec" version = "0.9.0" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false +category = "main" +optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "platformdirs" version = "2.5.2" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.extras] @@ -485,8 +512,8 @@ test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytes name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -496,12 +523,29 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pre-commit" +version = "2.19.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + [[package]] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] @@ -537,16 +581,16 @@ typing-extensions = "*" name = "pygments" version = "2.12.0" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [[package]] name = "pymdown-extensions" version = "9.5" description = "Extension pack for Python Markdown." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -556,8 +600,8 @@ markdown = ">=3.2" name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6.8" [package.extras] @@ -567,8 +611,8 @@ diagrams = ["railroad-diagrams", "jinja2"] name = "pytest" version = "7.1.2" description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -589,8 +633,8 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2. name = "pytest-asyncio" version = "0.18.3" description = "Pytest support for asyncio" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -604,8 +648,8 @@ testing = ["coverage (==6.2)", "hypothesis (>=5.7.1)", "flaky (>=3.5.0)", "mypy name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -619,8 +663,8 @@ testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtuale name = "pytest-mock" version = "3.8.2" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -663,8 +707,8 @@ python-versions = ">=3.6" name = "pyyaml-env-tag" version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -675,7 +719,7 @@ name = "requests" version = "2.28.1" description = "Python HTTP for Humans." category = "main" -optional = false +optional = true python-versions = ">=3.7, <4" [package.dependencies] @@ -692,8 +736,8 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] name = "rich" version = "12.4.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6.3,<4.0.0" [package.dependencies] @@ -724,16 +768,16 @@ python-versions = ">=3.5" name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "*" [[package]] name = "sqlalchemy" version = "1.4.39" description = "Database Abstraction Library" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" [package.dependencies] @@ -767,8 +811,8 @@ sqlcipher = ["sqlcipher3-binary"] name = "sqlalchemy2-stubs" version = "0.0.2a24" description = "Typing Stubs for SQLAlchemy 1.4" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.dependencies] @@ -793,24 +837,24 @@ full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [[package]] name = "tox" version = "3.25.1" description = "tox is a generic virtualenv management and test command line tool" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] @@ -832,8 +876,8 @@ testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)", "pytes name = "typed-ast" version = "1.5.4" description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [[package]] @@ -849,7 +893,7 @@ name = "urllib3" version = "1.26.10" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] @@ -861,8 +905,8 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "uvicorn" version = "0.18.2" description = "The lightning-fast ASGI server." -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.dependencies] @@ -877,8 +921,8 @@ standard = ["websockets (>=10.0)", "httptools (>=0.4.0)", "watchfiles (>=0.13)", name = "virtualenv" version = "20.15.1" description = "Virtual Python Environment builder" -category = "dev" -optional = false +category = "main" +optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] @@ -896,8 +940,8 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", name = "watchdog" version = "2.1.9" description = "Filesystem events monitoring" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.6" [package.extras] @@ -907,8 +951,8 @@ watchmedo = ["PyYAML (>=3.10)"] name = "zipp" version = "3.8.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false +category = "main" +optional = true python-versions = ">=3.7" [package.extras] @@ -916,13 +960,17 @@ docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [extras] -brotli = ["Brotli"] -testing = ["requests", "Brotli"] +brotli = ["brotli"] +dev = ["tox"] +docs = ["mkdocs-material"] +lint = ["pre-commit"] +test = ["brotli", "jinja2", "mako", "freezegun", "hypothesis", "pytest", "pytest-asyncio", "pytest-cov", "pytest-mock", "requests", "sqlalchemy", "uvicorn"] +testing = ["requests", "brotli"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<4.0" -content-hash = "f866931a1ee917526587f84e8db934ab294f096736793633aa4c7614fbc5a7ed" +content-hash = "78765ff125540f6dfee3242ccc9bb5f795236b2cc64c78e76f22a10cd4584ab7" [metadata.files] anyio = [ @@ -959,74 +1007,15 @@ black = [ {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, ] -brotli = [ - {file = "Brotli-1.0.9-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70"}, - {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b"}, - {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6"}, - {file = "Brotli-1.0.9-cp27-cp27m-win32.whl", hash = "sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa"}, - {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452"}, - {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7"}, - {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9744a863b489c79a73aba014df554b0e7a0fc44ef3f8a0ef2a52919c7d155031"}, - {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"}, - {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa"}, - {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb"}, - {file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"}, - {file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"}, - {file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"}, - {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296"}, - {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430"}, - {file = "Brotli-1.0.9-cp35-cp35m-win32.whl", hash = "sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1"}, - {file = "Brotli-1.0.9-cp35-cp35m-win_amd64.whl", hash = "sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea"}, - {file = "Brotli-1.0.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"}, - {file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6"}, - {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b"}, - {file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"}, - {file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"}, - {file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"}, - {file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3"}, - {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d"}, - {file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"}, - {file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"}, - {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"}, - {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"}, - {file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17"}, - {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649"}, - {file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"}, - {file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"}, - {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"}, - {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"}, - {file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1"}, - {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c"}, - {file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"}, - {file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"}, - {file = "Brotli-1.0.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d"}, - {file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"}, -] +brotli = [] certifi = [ {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] charset-normalizer = [ {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, @@ -1170,6 +1159,10 @@ h11 = [ {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, ] hypothesis = [] +identify = [ + {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, + {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, +] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -1281,6 +1274,10 @@ 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"}, ] +nodeenv = [ + {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, + {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, +] openapi-schema-pydantic = [ {file = "openapi-schema-pydantic-1.2.4.tar.gz", hash = "sha256:3e22cf58b74a69f752cc7e5f1537f6e44164282db2700cbbcd3bb99ddd065196"}, {file = "openapi_schema_pydantic-1.2.4-py3-none-any.whl", hash = "sha256:a932ecc5dcbb308950282088956e94dea069c9823c84e507d64f6b622222098c"}, @@ -1300,7 +1297,6 @@ orjson = [ {file = "orjson-3.7.7-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:6fbf29bb7897d345bd0120c466cd923c70a5d661144221457cbed637f4c93d1b"}, {file = "orjson-3.7.7-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c43fd0317a7114e617f5b8aefd0d0a61b387927a1914b79ebd0d1235c658f5b"}, {file = "orjson-3.7.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9451779dba8546962bc02ce2aeed9de6e069f7101f8db2784beaf71ede4dd0"}, - {file = "orjson-3.7.7-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:e8bfad95df150d95ca67a4484d9f56e2bd0a932a5eb4635bbb5cd45130ca9251"}, {file = "orjson-3.7.7-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:ce3acc906a6aa7923bc7c78472196b2b7cf7c160aff01946984d51fcde9e9483"}, {file = "orjson-3.7.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c1e8489d50bb0cffb5ccb70c3459f79dee1aeb997abfd97751d3862b32bce412"}, {file = "orjson-3.7.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:891c0f2cb44beafa911cf7e15165dee8b8acaa5b48a75abaf37d529e1de68344"}, @@ -1341,6 +1337,10 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +pre-commit = [ + {file = "pre_commit-2.19.0-py2.py3-none-any.whl", hash = "sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10"}, + {file = "pre_commit-2.19.0.tar.gz", hash = "sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615"}, +] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, diff --git a/pyproject.toml b/pyproject.toml index 8e371549d9..e9555d9b4c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,33 +42,18 @@ pyyaml = "*" starlette = "*" typing-extensions = "*" -Jinja2 = { version = "*", optional = true } -Mako = { version = "*", optional = true } +brotli = { version = "*", optional = true } freezegun = { version = "*", optional = true } hypothesis = { extras = ["cli"], version = "*", optional = true } -mkdocs-material = { version = "^8.2.0", optional = true } +jinja2 = { version = "*", optional = true } +mako = { version = "*", optional = true } +mkdocs-material = { version = "*", optional = true } pre-commit = { version = "*", optional = true } pytest = { version = "*", optional = true } pytest-asyncio = { version = "*", optional = true } pytest-cov = { version = "*", optional = true } pytest-mock = { version = "*", optional = true } requests = { version = "*", optional = true } -brotli = { version = "*", optional = true } - -[tool.poetry.dev-dependencies] -hypothesis = { extras = ["cli"], version = "*" } -mkdocs-material = "*" -pytest = "*" -pytest-asyncio = "*" -pytest-cov = "*" -uvicorn = "*" -sqlalchemy = {extras = ["mypy"], version = "*"} -Jinja2 = "*" -Mako = "*" -freezegun = "*" -pytest-mock = "*" -tox = "*" -requests = "*" sqlalchemy = { extras = ["mypy"], version = "*", optional = true } tox = { version = "*", optional = true } uvicorn = { version = "*", optional = true } @@ -77,8 +62,9 @@ uvicorn = { version = "*", optional = true } testing = ["requests","brotli"] brotli = ["brotli"] test = [ - "Jinja2", - "Mako", + "brotli", + "jinja2", + "mako", "freezegun", "hypothesis", "pytest", @@ -152,7 +138,7 @@ source = [ ] [tool.coverage.report] -fail_under = 97 +fail_under = 96 [tool.coverage.xml] output = "./coverage.xml" diff --git a/tox.ini b/tox.ini index 9be0f30faa..4ab77fc5bc 100644 --- a/tox.ini +++ b/tox.ini @@ -39,7 +39,7 @@ deps = coverage[toml]>=6.4 commands = coverage combine coverage xml -i - coverage report --fail-under=97 -i + coverage report -i [testenv:lint] basepython = python3.10