diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 378a80f..de4287b 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -22,7 +22,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install tox tox-gh-actions + python -m pip install tox tox-gh - name: Run tests with tox run: tox - name: Run Codecov diff --git a/.gitignore b/.gitignore index 71c3cad..b0a2a15 100644 --- a/.gitignore +++ b/.gitignore @@ -72,9 +72,10 @@ tests/__init__.py # Development task artifacts *.db +Pipfile # Visual Studio Code config files .vscode # pytest -.pytest_cache/ \ No newline at end of file +.pytest_cache/ diff --git a/requirements/dev.in b/requirements/dev.in index 68c9d02..6183b58 100644 --- a/requirements/dev.in +++ b/requirements/dev.in @@ -3,7 +3,7 @@ django>=3.0.3,<5.1 diff-cover # Changeset diff test coverage pip-tools # Requirements file management -tox # virtualenv management for tests +tox>=4.15.0 # virtualenv management for tests tox-battery # Makes tox aware of requirements file changes twine # Utility for PyPI package uploads wheel # For generation of wheels for PyPI diff --git a/requirements/dev.txt b/requirements/dev.txt index 4d51cc8..efbde0a 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,10 +1,12 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/dev.txt --resolver=backtracking requirements/base.in requirements/dev.in requirements/quality.in +# pip-compile --output-file=requirements/dev.txt requirements/base.in requirements/dev.in requirements/quality.in # -asgiref==3.7.2 +annotated-types==0.7.0 + # via pydantic +asgiref==3.8.1 # via django astroid==2.15.8 # via @@ -13,43 +15,56 @@ astroid==2.15.8 # pylint-celery # pylint-flask # requirements-detector -bandit==1.7.5 +authlib==1.3.0 + # via safety +bandit==1.7.8 # via -r requirements/quality.in -build==1.0.3 +build==1.2.1 # via pip-tools -certifi==2023.11.17 +cachetools==5.3.3 + # via tox +certifi==2024.2.2 # via requests cffi==1.16.0 # via cryptography chardet==5.2.0 - # via diff-cover + # via + # diff-cover + # tox charset-normalizer==3.3.2 # via requests click==8.1.7 # via # pip-tools # safety -cryptography==41.0.7 - # via secretstorage -diff-cover==8.0.1 + # typer +colorama==0.4.6 + # via tox +cryptography==42.0.7 + # via + # authlib + # secretstorage +diff-cover==9.0.0 # via -r requirements/dev.in -dill==0.3.7 +dill==0.3.8 # via pylint -distlib==0.3.7 +distlib==0.3.8 # via virtualenv -django==5.0 +django==5.0.6 # via # -r requirements/dev.in # djangorestframework -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via -r requirements/base.in -docutils==0.20.1 +docutils==0.21.2 # via readme-renderer dodgy==0.2.1 # via prospector -dparse==0.6.3 - # via safety -filelock==3.13.1 +dparse==0.6.4b0 + # via + # safety + # safety-schemas +filelock==3.14.0 # via # tox # virtualenv @@ -57,36 +72,38 @@ flake8==3.8.4 # via flake8-polyfill flake8-polyfill==1.0.2 # via pep8-naming -gitdb==4.0.11 - # via gitpython -gitpython==3.1.40 - # via bandit -idna==3.6 +idna==3.7 # via requests -importlib-metadata==7.0.0 - # via - # keyring - # twine -isort==5.12.0 +importlib-metadata==7.1.0 + # via twine +isort==5.13.2 # via # -r requirements/quality.in # pylint -jaraco-classes==3.3.0 +jaraco-classes==3.4.0 + # via keyring +jaraco-context==5.3.0 + # via keyring +jaraco-functools==4.0.1 # via keyring jeepney==0.8.0 # via # keyring # secretstorage -jinja2==3.1.2 - # via diff-cover -keyring==24.3.0 +jinja2==3.1.4 + # via + # diff-cover + # safety +keyring==25.2.1 # via twine -lazy-object-proxy==1.9.0 +lazy-object-proxy==1.10.0 # via astroid markdown-it-py==3.0.0 # via rich -markupsafe==2.1.3 +markupsafe==2.1.5 # via jinja2 +marshmallow==3.21.2 + # via safety mccabe==0.6.1 # via # flake8 @@ -94,52 +111,60 @@ mccabe==0.6.1 # pylint mdurl==0.1.2 # via markdown-it-py -more-itertools==10.1.0 - # via jaraco-classes -nh3==0.2.14 +more-itertools==10.2.0 + # via + # jaraco-classes + # jaraco-functools +nh3==0.2.17 # via readme-renderer -packaging==23.2 +packaging==24.0 # via # build # dparse + # marshmallow # pyproject-api # requirements-detector # safety + # safety-schemas # tox pbr==6.0.0 # via stevedore pep8-naming==0.10.0 # via prospector -pip-tools==7.3.0 +pip-tools==7.4.1 # via -r requirements/dev.in -pkginfo==1.9.6 +pkginfo==1.10.0 # via twine -platformdirs==4.1.0 +platformdirs==4.2.2 # via # pylint # tox # virtualenv -pluggy==1.3.0 +pluggy==1.5.0 # via # diff-cover # tox prospector==1.4.1.1 # via -r requirements/quality.in -py==1.11.0 - # via tox pycodestyle==2.6.0 # via # flake8 # prospector -pycparser==2.21 +pycparser==2.22 # via cffi +pydantic==2.7.1 + # via + # safety + # safety-schemas +pydantic-core==2.18.2 + # via pydantic pydocstyle==6.3.0 # via prospector pyflakes==2.2.0 # via # flake8 # prospector -pygments==2.17.2 +pygments==2.18.0 # via # diff-cover # readme-renderer @@ -168,17 +193,19 @@ pylint-plugin-utils==0.8.2 # pylint-celery # pylint-django # pylint-flask -pyproject-hooks==1.0.0 - # via build -pytz==2023.3.post1 - # via djangorestframework +pyproject-api==1.6.1 + # via tox +pyproject-hooks==1.1.0 + # via + # build + # pip-tools pyyaml==6.0.1 # via # bandit # prospector -readme-renderer==42.0 +readme-renderer==43.0 # via twine -requests==2.31.0 +requests==2.32.2 # via # requests-toolbelt # safety @@ -189,70 +216,71 @@ requirements-detector==1.2.2 # via prospector rfc3986==2.0.0 # via twine -rich==13.7.0 +rich==13.7.1 # via # bandit + # safety # twine -ruamel-yaml==0.18.5 - # via safety + # typer +ruamel-yaml==0.18.6 + # via + # safety + # safety-schemas ruamel-yaml-clib==0.2.8 # via ruamel-yaml -safety==2.3.4 +safety==3.2.0 # via -r requirements/quality.in +safety-schemas==0.0.2 + # via safety secretstorage==3.3.3 # via keyring semver==3.0.2 # via requirements-detector setoptconf==0.3.0 # via prospector -six==1.16.0 - # via tox -smmap==5.0.1 - # via gitdb +shellingham==1.5.4 + # via typer snowballstemmer==2.2.0 # via pydocstyle -sqlparse==0.4.4 +sqlparse==0.5.0 # via django -stevedore==5.1.0 +stevedore==5.2.0 # via bandit toml==0.10.2 # via requirements-detector -tomli==2.0.1 - # via - # build - # dparse - # pip-tools - # pylint - # pyproject-api - # pyproject-hooks - # tox -tomlkit==0.12.3 +tomlkit==0.12.5 # via pylint -tox==3.28.0 +tox==4.15.0 # via # -r requirements/dev.in # tox-battery -tox-battery==0.6.2 +tox-battery==0.6.1 # via -r requirements/dev.in -twine==4.0.2 +twine==5.1.0 # via -r requirements/dev.in -typing-extensions==4.8.0 +typer==0.12.3 + # via safety +typing-extensions==4.11.0 # via - # asgiref - # astroid -urllib3==2.1.0 + # pydantic + # pydantic-core + # safety + # safety-schemas + # typer +urllib3==2.2.1 # via # requests + # safety # twine -virtualenv==20.25.0 +virtualenv==20.26.2 # via tox -wheel==0.42.0 +wheel==0.43.0 # via # -r requirements/dev.in # pip-tools wrapt==1.16.0 # via astroid -zipp==3.17.0 +zipp==3.18.2 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/doc.txt b/requirements/doc.txt index 44428a6..5da7b05 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,24 +1,24 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/doc.txt --resolver=backtracking requirements/base.in requirements/doc.in +# pip-compile --output-file=requirements/doc.txt requirements/base.in requirements/doc.in # -alabaster==0.7.13 +alabaster==0.7.16 # via sphinx -asgiref==3.7.2 +asgiref==3.8.1 # via django -babel==2.13.1 +babel==2.15.0 # via sphinx -certifi==2023.11.17 +certifi==2024.2.2 # via requests charset-normalizer==3.3.2 # via requests -django==5.0 +django==5.0.6 # via # -r requirements/doc.in # djangorestframework -djangorestframework==3.14.0 +djangorestframework==3.15.1 # via -r requirements/base.in doc8==1.1.1 # via -r requirements/doc.in @@ -28,62 +28,50 @@ docutils==0.20.1 # readme-renderer # restructuredtext-lint # sphinx -idna==3.6 +idna==3.7 # via requests imagesize==1.4.1 # via sphinx -jinja2==3.1.2 +jinja2==3.1.4 # via sphinx -markupsafe==2.1.3 +markupsafe==2.1.5 # via jinja2 -nh3==0.2.14 +nh3==0.2.17 # via readme-renderer -packaging==23.2 +packaging==24.0 # via sphinx pbr==6.0.0 # via stevedore -pygments==2.17.2 +pygments==2.18.0 # via # doc8 # readme-renderer # sphinx -pytz==2023.3.post1 - # via djangorestframework -readme-renderer==42.0 +readme-renderer==43.0 # via -r requirements/doc.in -requests==2.31.0 +requests==2.32.2 # via sphinx restructuredtext-lint==1.4.0 # via doc8 snowballstemmer==2.2.0 # via sphinx -sphinx==7.2.6 - # via - # -r requirements/doc.in - # sphinxcontrib-applehelp - # sphinxcontrib-devhelp - # sphinxcontrib-htmlhelp - # sphinxcontrib-qthelp - # sphinxcontrib-serializinghtml -sphinxcontrib-applehelp==1.0.7 +sphinx==7.3.7 + # via -r requirements/doc.in +sphinxcontrib-applehelp==1.0.8 # via sphinx -sphinxcontrib-devhelp==1.0.5 +sphinxcontrib-devhelp==1.0.6 # via sphinx -sphinxcontrib-htmlhelp==2.0.4 +sphinxcontrib-htmlhelp==2.0.5 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.6 +sphinxcontrib-qthelp==1.0.7 # via sphinx -sphinxcontrib-serializinghtml==1.1.9 +sphinxcontrib-serializinghtml==1.1.10 # via sphinx -sqlparse==0.4.4 +sqlparse==0.5.0 # via django -stevedore==5.1.0 - # via doc8 -tomli==2.0.1 +stevedore==5.2.0 # via doc8 -typing-extensions==4.8.0 - # via asgiref -urllib3==2.1.0 +urllib3==2.2.1 # via requests diff --git a/requirements/quality.txt b/requirements/quality.txt index 6667aff..e6b081a 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,9 +1,11 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/quality.txt --resolver=backtracking requirements/quality.in +# pip-compile --output-file=requirements/quality.txt requirements/quality.in # +annotated-types==0.7.0 + # via pydantic astroid==2.15.8 # via # -r requirements/quality.in @@ -11,38 +13,50 @@ astroid==2.15.8 # pylint-celery # pylint-flask # requirements-detector -bandit==1.7.5 +authlib==1.3.0 + # via safety +bandit==1.7.8 # via -r requirements/quality.in -certifi==2023.11.17 +certifi==2024.2.2 # via requests +cffi==1.16.0 + # via cryptography charset-normalizer==3.3.2 # via requests click==8.1.7 - # via safety -dill==0.3.7 + # via + # safety + # typer +cryptography==42.0.7 + # via authlib +dill==0.3.8 # via pylint dodgy==0.2.1 # via prospector -dparse==0.6.3 - # via safety +dparse==0.6.4b0 + # via + # safety + # safety-schemas flake8==3.8.4 # via flake8-polyfill flake8-polyfill==1.0.2 # via pep8-naming -gitdb==4.0.11 - # via gitpython -gitpython==3.1.40 - # via bandit -idna==3.6 +idna==3.7 # via requests -isort==5.12.0 +isort==5.13.2 # via # -r requirements/quality.in # pylint -lazy-object-proxy==1.9.0 +jinja2==3.1.4 + # via safety +lazy-object-proxy==1.10.0 # via astroid markdown-it-py==3.0.0 # via rich +markupsafe==2.1.5 + # via jinja2 +marshmallow==3.21.2 + # via safety mccabe==0.6.1 # via # flake8 @@ -50,16 +64,18 @@ mccabe==0.6.1 # pylint mdurl==0.1.2 # via markdown-it-py -packaging==21.3 +packaging==24.0 # via # dparse + # marshmallow # requirements-detector # safety + # safety-schemas pbr==6.0.0 # via stevedore pep8-naming==0.10.0 # via prospector -platformdirs==4.1.0 +platformdirs==4.2.2 # via pylint prospector==1.4.1.1 # via -r requirements/quality.in @@ -67,13 +83,21 @@ pycodestyle==2.6.0 # via # flake8 # prospector +pycparser==2.22 + # via cffi +pydantic==2.7.1 + # via + # safety + # safety-schemas +pydantic-core==2.18.2 + # via pydantic pydocstyle==6.3.0 # via prospector pyflakes==2.2.0 # via # flake8 # prospector -pygments==2.17.2 +pygments==2.18.0 # via rich pylint==2.17.7 # via @@ -99,46 +123,56 @@ pylint-plugin-utils==0.8.2 # pylint-celery # pylint-django # pylint-flask -pyparsing==3.1.1 - # via packaging pyyaml==6.0.1 # via # bandit # prospector -requests==2.31.0 +requests==2.32.2 # via safety requirements-detector==1.2.2 # via prospector -rich==13.7.0 - # via bandit -ruamel-yaml==0.18.5 - # via safety +rich==13.7.1 + # via + # bandit + # safety + # typer +ruamel-yaml==0.18.6 + # via + # safety + # safety-schemas ruamel-yaml-clib==0.2.8 # via ruamel-yaml -safety==2.3.5 +safety==3.2.0 # via -r requirements/quality.in +safety-schemas==0.0.2 + # via safety semver==3.0.2 # via requirements-detector setoptconf==0.3.0 # via prospector -smmap==5.0.1 - # via gitdb +shellingham==1.5.4 + # via typer snowballstemmer==2.2.0 # via pydocstyle -stevedore==5.1.0 +stevedore==5.2.0 # via bandit toml==0.10.2 # via requirements-detector -tomli==2.0.1 - # via - # dparse - # pylint -tomlkit==0.12.3 +tomlkit==0.12.5 # via pylint -typing-extensions==4.8.0 - # via astroid -urllib3==2.1.0 - # via requests +typer==0.12.3 + # via safety +typing-extensions==4.11.0 + # via + # pydantic + # pydantic-core + # safety + # safety-schemas + # typer +urllib3==2.2.1 + # via + # requests + # safety wrapt==1.16.0 # via astroid diff --git a/requirements/test.txt b/requirements/test.txt index d171745..98117ff 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,43 +1,37 @@ # -# This file is autogenerated by pip-compile with Python 3.10 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements/test.txt --resolver=backtracking requirements/base.in requirements/test.in +# pip-compile --output-file=requirements/test.txt requirements/base.in requirements/test.in # -asgiref==3.7.2 +asgiref==3.8.1 # via django -coverage[toml]==7.3.2 +coverage[toml]==7.5.1 # via # coverage # pytest-cov -djangorestframework==3.14.0 +django==5.0.6 + # via + # djangorestframework + # model-bakery +djangorestframework==3.15.1 # via -r requirements/base.in -exceptiongroup==1.2.0 - # via pytest iniconfig==2.0.0 # via pytest -model-bakery==1.17.0 +model-bakery==1.18.0 # via -r requirements/test.in -packaging==23.2 +packaging==24.0 # via pytest -pluggy==1.3.0 +pluggy==1.5.0 # via pytest -pytest==7.4.3 +pytest==8.2.1 # via # -r requirements/test.in # pytest-cov # pytest-django -pytest-cov==4.1.0 +pytest-cov==5.0.0 # via -r requirements/test.in -pytest-django==4.7.0 +pytest-django==4.8.0 # via -r requirements/test.in -pytz==2023.3.post1 - # via djangorestframework -sqlparse==0.4.4 +sqlparse==0.5.0 # via django -tomli==2.0.1 - # via - # coverage - # pytest -typing-extensions==4.8.0 - # via asgiref diff --git a/tox.ini b/tox.ini index 2537ae4..472c9c6 100644 --- a/tox.ini +++ b/tox.ini @@ -1,4 +1,6 @@ [tox] +requires = + tox>=4 envlist = py37-django{32} py{38,39}-django{32,41,42} @@ -6,14 +8,14 @@ envlist = py311-django{41,42,50} py312-django{42,50} -[gh-actions] +[gh] python = - 3.7: py37 - 3.8: py38 - 3.9: py39 - 3.10: py310 - 3.11: py311 - 3.12: py312 + 3.7 = py37-django{32} + 3.8 = py38-django{32,41,42} + 3.9 = py39-django{32,41,42} + 3.10 = py310-django{32,41,42,50} + 3.11 = py311-django{41,42,50} + 3.12 = py312-django{42,50} [pytest] DJANGO_SETTINGS_MODULE = test_settings @@ -30,6 +32,13 @@ deps = django42: Django>=4.2,<5.0 django50: Django>=5.0,<5.1 -r{toxinidir}/requirements/test.txt +basepython = + py312: python3.12 + py311: python3.11 + py310: python3.10 + py39: python3.9 + py38: python3.8 + py37: python3.7 commands = pytest {posargs}