diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 26e5056..1d1b518 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.0.0 +current_version = 2.1.0 commit = False tag = False parse = (?P\d+)\.(?P\d+)((\.(?P\d+))|((?P(a|b|rc|final))(?P\d+))) diff --git a/.github/workflows/run-project-tests.yml b/.github/workflows/run-project-tests.yml index 6354bb6..c7664e2 100644 --- a/.github/workflows/run-project-tests.yml +++ b/.github/workflows/run-project-tests.yml @@ -24,12 +24,14 @@ jobs: matrix: os: [ubuntu-20.04, windows-2022] # Django LTS versions & latest version only - django-version: ["2.2", "3.2"] + django-version: ["2.2", "3.2", "4.2"] project: ["extension", "integration", "replacement"] exclude: - # Django Registration 2 does not support Django 3.2 + # Django Registration 2 does not support Django above 2.2 - django-version: "3.2" project: "integration" + - django-version: "4.2" + project: "integration" steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 53713e3..9a34c8b 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -18,8 +18,56 @@ jobs: strategy: matrix: os: [ubuntu-20.04, windows-2022] - python-version: ["3.6", "3.7", "3.8", "3.9"] - django-version: ["2.2", "3.0", "3.1", "3.2"] + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] + django-version: ["2.2", "3.0", "3.1", "3.2", "4.0", "4.1", "4.2"] + exclude: + # Django 2.2 + - django-version: "2.2" + python-version: "3.10" + - django-version: "2.2" + python-version: "3.11" + - django-version: "2.2" + python-version: "3.12" + # Django 3.0 + - django-version: "3.0" + python-version: "3.10" + - django-version: "3.0" + python-version: "3.11" + - django-version: "3.0" + python-version: "3.12" + # Django 3.1 + - django-version: "3.1" + python-version: "3.10" + - django-version: "3.1" + python-version: "3.11" + - django-version: "3.1" + python-version: "3.12" + # Django 3.2 + - django-version: "3.2" + python-version: "3.11" + - django-version: "3.2" + python-version: "3.12" + # Django 4.0 + - django-version: "4.0" + python-version: "3.6" + - django-version: "4.0" + python-version: "3.7" + - django-version: "4.0" + python-version: "3.11" + - django-version: "4.0" + python-version: "3.12" + # Django 4.1 + - django-version: "4.1" + python-version: "3.6" + - django-version: "4.1" + python-version: "3.7" + - django-version: "4.1" + python-version: "3.12" + # Django 4.2 + - django-version: "4.2" + python-version: "3.6" + - django-version: "4.2" + python-version: "3.7" steps: - uses: actions/checkout@v4 diff --git a/README.rst b/README.rst index e7e4984..d3f82f3 100644 --- a/README.rst +++ b/README.rst @@ -2,15 +2,15 @@ Latest Release: |Version| |Tag| Documentation: |StableDocs| -Compatibility: |Implementation| |Python| |Django| |License| |Black| +Compatibility: |Python| |Django| |License| |Black| Tests: |Pre-commit| |Coverage| -.. |Version| image:: http://img.shields.io/pypi/v/django-improved-user.svg +.. |Version| image:: https://img.shields.io/pypi/v/django-improved-user :target: https://pypi.org/project/django-improved-user/ :alt: PyPI Version -.. |Tag| image:: https://img.shields.io/github/tag/jambonrose/django-improved-user.svg +.. |Tag| image:: https://img.shields.io/github/v/tag/jambonrose/django-improved-user :target: https://github.com/jambonrose/django-improved-user/releases :alt: Github Tag @@ -18,19 +18,15 @@ Tests: |Pre-commit| |Coverage| :target: https://django-improved-user.readthedocs.io/en/stable/?badge=stable :alt: Stable Documentation Status -.. |Implementation| image:: https://img.shields.io/pypi/implementation/django-improved-user.svg - :target: https://pypi.org/project/django-improved-user/ - :alt: Python Implementation Support - -.. |Python| image:: https://img.shields.io/pypi/pyversions/django-improved-user.svg +.. |Python| image:: https://img.shields.io/pypi/pyversions/django-improved-user :target: https://pypi.org/project/django-improved-user/ :alt: Python Support -.. |Django| image:: https://img.shields.io/badge/Django-2.2%2C%203.0%2C%203.1%2C%203.2-blue.svg +.. |Django| image:: https://img.shields.io/pypi/frameworkversions/django/django-improved-user :target: https://pypi.org/project/django-improved-user/ :alt: Django Support -.. |License| image:: http://img.shields.io/pypi/l/django-improved-user.svg +.. |License| image:: https://img.shields.io/pypi/l/django-improved-user :target: http://opensource.org/licenses/BSD-2-Clause :alt: License @@ -42,7 +38,7 @@ Tests: |Pre-commit| |Coverage| :target: https://codecov.io/gh/jambonrose/django-improved-user :alt: Coverage Status -.. |Black| image:: https://img.shields.io/badge/code%20style-black-000000.svg +.. |Black| image:: https://img.shields.io/badge/code%20style-black-000000 :target: https://github.com/psf/black .. end-badges diff --git a/docs/conf.py b/docs/conf.py index 39ac00c..fc94608 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -170,7 +170,7 @@ def setup(app): # The short X.Y version. version = "2.0" # The full version, including alpha/beta/rc tags. -release = "2.0.0" +release = "2.1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/index.rst b/docs/index.rst index 9e34bb4..17776fa 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,6 +9,9 @@ If you're in a rush, head over to :doc:`quickstart`. If you're new and want to see what your options are, please read :doc:`select_configuration_method`. +The documentation you are viewing covers Django Improved User 2.1, +compatible with Django 2.2, 3.0, 3.1, 3.2, 4.0, 4.1, 4.2. + .. toctree:: :caption: Contents: :glob: diff --git a/docs/quickstart_contrib.rst b/docs/quickstart_contrib.rst index d625dd1..29f2867 100644 --- a/docs/quickstart_contrib.rst +++ b/docs/quickstart_contrib.rst @@ -29,8 +29,8 @@ You can limit tests or pass paramaters as when using ``manage.py test``. $ ./runtests.py tests.test_basic -v 3 -If you have all of the supported Python versions installed (Python 3.7, -3.8, 3.9, and 3.10), you may use ``tox`` to run all linters and test the +If you have all of the supported Python versions installed, +you may use ``tox`` to run all linters and test the package with multiple versions of Python and Django. .. code:: console @@ -42,8 +42,8 @@ tox. For instance: .. code:: console - $ tox -e py36-django111-unit tests.test_basic - $ tox -e py36-django111-integration user_integration.tests.TestViews.test_home + $ tox -e py311-django42-unit tests.test_basic + $ tox -e py311-django42-integration user_integration.tests.TestViews.test_home Any change to the code should first be discussed in an issue. diff --git a/pyproject.toml b/pyproject.toml index a87906f..e047d58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,9 @@ classifiers = [ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", "Framework :: Django", "Framework :: Django :: 2.2", @@ -31,6 +34,8 @@ classifiers = [ "Framework :: Django :: 3.1", "Framework :: Django :: 3.2", "Framework :: Django :: 4.0", + "Framework :: Django :: 4.1", + "Framework :: Django :: 4.2", ] [project.urls] diff --git a/requirements.txt b/requirements.txt index 6b1f453..0948e3a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,13 @@ -astroid==2.9.2 -bumpversion==0.6.0 -check-manifest==0.47 -coverage==6.2 -docutils==0.18.1 -factory-boy==3.2.1 -Faker==11.3.0 -flit==3.6.0 -Pygments==2.11.2 -pylint==2.12.2 -pylint-django==2.5.0 -python-dateutil==2.8.2 -tox==3.24.5 +astroid>=2.9.2 +bumpversion>=0.6.0 +check-manifest>=0.47 +coverage>=6.2 +docutils>=0.18.1 +factory-boy>=3.2.1 +Faker>=11.3.0 +flit>=3.6.0 +Pygments>=2.11.2 +pylint>=2.12.2 +pylint-django>=2.5.0 +python-dateutil>=2.8.2 +tox>=3.24.5 diff --git a/src/improved_user/__init__.py b/src/improved_user/__init__.py index f2ebf41..70cb692 100644 --- a/src/improved_user/__init__.py +++ b/src/improved_user/__init__.py @@ -5,7 +5,7 @@ # 2. set default app config # pylint: disable=invalid-name -__version__ = "2.0.0" +__version__ = "2.1.0" # https://docs.djangoproject.com/en/stable/ref/applications/#configuring-applications default_app_config = "improved_user.apps.ImprovedUserConfig" # pylint: enable=invalid-name diff --git a/tox.ini b/tox.ini index 90320c5..e05aca6 100644 --- a/tox.ini +++ b/tox.ini @@ -1,53 +1,49 @@ [tox] isolated_build = True envlist = -; py39-django32-lint, -; py39-django32-pylint, - py39-django32-pkgcheck, + py311-django42-pkgcheck, py312-docs, - py{36,37,38,39}-django{22,30,31,32}-unit, - py39-django{22,32}-{extension,replacement} - py39-django{22}-{integration} - py310-djangomain-{unit,extension,integration,replacement} + py{36,37,38,39}-django{22,30,31}-unit, + py{36,37,38,39,310}-django32-unit, + py{38,39,310}-django40-unit, + py{38,39,310,311}-django41-unit, + py{38,39,310,311,312}-django42-unit, + py39-django{22,32,42}-{extension,replacement} [testenv] changedir = docs: docs extension: example_extension_project - integration: example_integration_project replacement: example_replacement_project unit: {toxinidir} skip_install = - {fixme,lint,pkgcheck,pylint}: true + pkgcheck: true extras = - {extension,fixme,integration,pylint,replacement,unit}: factory + {extension, + replacement,unit}: factory setenv = PYTHONDONTWRITEBYTECODE=1 - {extension,integration,replacement,unit}: PYTHONWARNINGS=once + {extension,replacement,unit}: PYTHONWARNINGS=once deps = - {extension,fixme,integration,lint,pkgcheck,pylint,replacement,unit}: -r{toxinidir}/requirements.txt + {extension,pkgcheck,replacement,unit}: -r{toxinidir}/requirements.txt docs: -r{toxinidir}/doc-requirements.txt - {extension,fixme,pylint}: -r{toxinidir}/example_extension_project/requirements.txt - {fixme,integration,pylint}: -r{toxinidir}/example_integration_project/requirements.txt - {fixme,pylint,replacement}: -r{toxinidir}/example_replacement_project/requirements.txt + extension: -r{toxinidir}/example_extension_project/requirements.txt + replacement: -r{toxinidir}/example_replacement_project/requirements.txt django22: Django>=2.2,<2.3 django30: Django>=3.0,<3.1 django31: Django>=3.1,<3.2 django32: Django>=3.2,<3.3 - djangomain: https://github.com/django/django/archive/main.tar.gz + django40: Django>=4.0,<4.1 + django41: Django>=4.1,<4.2 + django42: Django>=4.2,<4.3 commands = docs: sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html docs: python -msphinx -b linkcheck . build/linkcheck - {extension,integration,replacement}: coverage erase - {extension,integration,replacement}: coverage run manage.py test {posargs} - {extension,integration,replacement}: coverage combine --append - {extension,integration,replacement}: coverage report - lint: flake8 src tests runtests.py example_extension_project example_integration_project example_extension_project - lint: isort --verbose --check-only --diff --recursive src tests setup.py runtests.py example_extension_project example_integration_project example_replacement_project + {extension,replacement}: coverage erase + {extension,replacement}: coverage run manage.py test {posargs} + {extension,replacement}: coverage combine --append + {extension,replacement}: coverage report pkgcheck: check-manifest {toxinidir} - # example_*_project/manage.py example_*_project/config example_*_project/user_* - pylint: pylint -d duplicate-code -d fixme src tests setup.py runtests.py example_extension_project/manage.py example_integration_project/manage.py example_replacement_project/manage.py example_extension_project/config example_integration_project/config example_replacement_project/config example_extension_project/user_extension example_integration_project/user_integration example_replacement_project/user_replacement - fixme: pylint src tests setup.py runtests.py example_extension_project/manage.py example_integration_project/manage.py example_replacement_project/manage.py example_extension_project/config example_integration_project/config example_replacement_project/config example_extension_project/user_extension example_integration_project/user_integration example_replacement_project/user_replacement unit: coverage erase unit: coverage run runtests.py {posargs} unit: coverage combine --append