Name | django-version-checks JSON |
Version |
1.14.0
JSON |
| download |
home_page | None |
Summary | System checks for your project's environment. |
upload_time | 2025-02-06 22:19:18 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | None |
keywords |
django
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
=====================
django-version-checks
=====================
.. image:: https://img.shields.io/github/actions/workflow/status/adamchainz/django-version-checks/main.yml.svg?branch=main&style=for-the-badge
:target: https://github.com/adamchainz/django-version-checks/actions?workflow=CI
.. image:: https://img.shields.io/badge/Coverage-100%25-success?style=for-the-badge
:target: https://github.com/adamchainz/django-version-checks/actions?workflow=CI
.. image:: https://img.shields.io/pypi/v/django-version-checks.svg?style=for-the-badge
:target: https://pypi.org/project/django-version-checks/
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge
:target: https://github.com/psf/black
.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge
:target: https://github.com/pre-commit/pre-commit
:alt: pre-commit
System checks for your project's environment.
----
**Improve your Django and Git skills** with `my books <https://adamj.eu/books/>`__.
----
Requirements
============
Python 3.9 to 3.13 supported.
Django 4.2 to 5.2 supported.
Installation
============
First, install with **pip**:
.. code-block:: bash
python -m pip install django-version-checks
Second, add the app to your ``INSTALLED_APPS`` setting:
.. code-block:: python
INSTALLED_APPS = [
...,
"django_version_checks",
...,
]
Third, add a ``VERSION_CHECKS`` setting with the version checks you want to enforce (as documented below).
For example:
.. code-block:: python
VERSION_CHECKS = {
"python": "==3.9.*",
}
Usage
=====
See also the `introductory blog post <https://adamj.eu/tech/2020/12/14/introducing-django-version-checks/>`__.
django-version-checks adds several `system checks <https://docs.djangoproject.com/en/stable/topics/checks/>`__ that can help ensure that the current environment has the right versions of Python, databases, etc.
This is useful when coordinating upgrades across all your infrastructure.
Note that django-version-checks does not check the versions of your Python dependencies.
This is because mismatched dependency versions are likely to cause ``ImportError``\s or other import-time problems, before system checks run.
To version check your Python dependencies, try `pip-lock <https://github.com/adamchainz/pip-lock/>`__.
Checks use the `PEP 440 specifier format <https://www.python.org/dev/peps/pep-0440/#id53>`__ via the ``packaging`` module.
This is the same format used by pip, and allows some flexibility in specifying valid version ranges.
The ``~=`` operator is particularly useful.
For example, you can use ``~=3.9.1`` to mean “3.9.1+, but less than 3.10.0”, allowing environments to take on patch releases without changes, but nothing more.
The individual checks are documented below.
Each occupies a key in the ``VERSION_CHECKS`` dictionary, and documents its supported types for specifiers.
If a check is misconfigured with a bad type or specifier you will see one of these system check errors:
* ``dvc.E001``: ``<check>`` is misconfigured. Expected a ``<type>`` but got ``<value>``.
* ``dvc.E002``: ``<check>`` is misconfigured. ``<value>`` is not a valid PEP440 specifier.
``mysql`` check
----------------
This check compares the current version of MariaDB/MySQL to the given specifier.
The range can specified either as a single string:
.. code-block:: python
VERSION_CHECKS = {
"mysql": "~=10.5.8",
}
…or as a dictionary mapping database aliases to their specifiers:
.. code-block:: python
VERSION_CHECKS = {
"postgresql": {
"default": "~=10.5.8",
"analytics": "~=10.4.17",
},
}
Note: as a database check, Django will only run this during ``migrate`` or when using ``check --database`` (Django 3.1+) / ``check --tags database`` (Django <3.1).
See (`docs <https://docs.djangoproject.com/en/3.1/ref/checks/#builtin-tags>`__).
If this check fails, the system check will report:
* ``dvc.E005``: The current version of MariaDB/MySQL (``<version>``) for the ``<alias>`` database connection does not match the specified range (``<range>``).
``postgresql`` check
--------------------
This check compares the current version of PostgreSQL to the given specifier.
The range can specified either as a single string:
.. code-block:: python
VERSION_CHECKS = {
"postgresql": "~=12.2",
}
…or as a dictionary mapping database aliases to their specifiers:
.. code-block:: python
VERSION_CHECKS = {
"postgresql": {
"default": "~=12.2",
"analytics": "~=13.1",
},
}
Note: as a database check, Django will only run this during ``migrate`` or when using ``check --database`` (Django 3.1+) / ``check --tags database`` (Django <3.1).
See (`docs <https://docs.djangoproject.com/en/3.1/ref/checks/#builtin-tags>`__).
If this check fails, the system check will report:
* ``dvc.E004``: The current version of PostgreSQL (``<version>``) for the ``<alias>`` database connection does not match the specified range (``<range>``).
``python`` check
----------------
This check compares the current version of Python to the given single specifier:
.. code-block:: python
VERSION_CHECKS = {
"python": "~=3.9.1",
}
If this check fails, the system check will report:
* ``dvc.E003``: The current version of Python (``<version>``) does not match the specified range (``<range>``).
``sqlite`` check
--------------------
This check compares the current version of SQLite to the given single specifier:
.. code-block:: python
VERSION_CHECKS = {
"sqlite": "~=3.37",
}
Note: as a database check, Django will only run this during ``migrate`` or when using ``check --database`` (Django 3.1+) / ``check --tags database`` (Django <3.1).
See (`docs <https://docs.djangoproject.com/en/3.1/ref/checks/#builtin-tags>`__).
If this check fails, the system check will report:
* ``dvc.E006``: The current version of SQLite (``<version>``) does not match the specified range (``<range>``).
Example Upgrade
===============
Let’s walk through using django-version-checks to upgrade Python from version 3.8 to 3.9.
We have an infrastructure consisting of CI, staging, and production environments, and several developers’ development machines.
First, we add a pre-existing check to ensure that all environments are on Python 3.8:
.. code-block:: python
VERSION_CHECKS = {
"python": "~=3.8.6",
}
Second, we rewrite the specifier to allow versions of Python 3.9:
.. code-block:: python
VERSION_CHECKS = {
"python": ">=3.8.6,<3.10.0",
}
Third, we upgrade our infrastructure.
We’d probably upgrade in the order: CI, development environments, staging, production.
Each environment should have an automated run of ``manage.py check``, as per the `Django deployment checklist <https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/>`__.
Fourth, we change the specifier again to allow Python 3.9 only:
.. code-block:: python
VERSION_CHECKS = {
"python": "~=3.9.1",
}
And we’re upgraded! 🎉
Raw data
{
"_id": null,
"home_page": null,
"name": "django-version-checks",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "Django",
"author": null,
"author_email": "Adam Johnson <me@adamj.eu>",
"download_url": "https://files.pythonhosted.org/packages/47/ff/cbb197e4b6e4c851631e987a64c6caf18b7f871939700e4b5ea069f17922/django_version_checks-1.14.0.tar.gz",
"platform": null,
"description": "=====================\ndjango-version-checks\n=====================\n\n.. image:: https://img.shields.io/github/actions/workflow/status/adamchainz/django-version-checks/main.yml.svg?branch=main&style=for-the-badge\n :target: https://github.com/adamchainz/django-version-checks/actions?workflow=CI\n\n.. image:: https://img.shields.io/badge/Coverage-100%25-success?style=for-the-badge\n :target: https://github.com/adamchainz/django-version-checks/actions?workflow=CI\n\n.. image:: https://img.shields.io/pypi/v/django-version-checks.svg?style=for-the-badge\n :target: https://pypi.org/project/django-version-checks/\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge\n :target: https://github.com/psf/black\n\n.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=for-the-badge\n :target: https://github.com/pre-commit/pre-commit\n :alt: pre-commit\n\nSystem checks for your project's environment.\n\n----\n\n**Improve your Django and Git skills** with `my books <https://adamj.eu/books/>`__.\n\n----\n\nRequirements\n============\n\nPython 3.9 to 3.13 supported.\n\nDjango 4.2 to 5.2 supported.\n\nInstallation\n============\n\nFirst, install with **pip**:\n\n.. code-block:: bash\n\n python -m pip install django-version-checks\n\nSecond, add the app to your ``INSTALLED_APPS`` setting:\n\n.. code-block:: python\n\n INSTALLED_APPS = [\n ...,\n \"django_version_checks\",\n ...,\n ]\n\nThird, add a ``VERSION_CHECKS`` setting with the version checks you want to enforce (as documented below).\nFor example:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"python\": \"==3.9.*\",\n }\n\nUsage\n=====\n\nSee also the `introductory blog post <https://adamj.eu/tech/2020/12/14/introducing-django-version-checks/>`__.\n\ndjango-version-checks adds several `system checks <https://docs.djangoproject.com/en/stable/topics/checks/>`__ that can help ensure that the current environment has the right versions of Python, databases, etc.\nThis is useful when coordinating upgrades across all your infrastructure.\n\nNote that django-version-checks does not check the versions of your Python dependencies.\nThis is because mismatched dependency versions are likely to cause ``ImportError``\\s or other import-time problems, before system checks run.\nTo version check your Python dependencies, try `pip-lock <https://github.com/adamchainz/pip-lock/>`__.\n\nChecks use the `PEP 440 specifier format <https://www.python.org/dev/peps/pep-0440/#id53>`__ via the ``packaging`` module.\nThis is the same format used by pip, and allows some flexibility in specifying valid version ranges.\nThe ``~=`` operator is particularly useful.\nFor example, you can use ``~=3.9.1`` to mean \u201c3.9.1+, but less than 3.10.0\u201d, allowing environments to take on patch releases without changes, but nothing more.\n\nThe individual checks are documented below.\nEach occupies a key in the ``VERSION_CHECKS`` dictionary, and documents its supported types for specifiers.\nIf a check is misconfigured with a bad type or specifier you will see one of these system check errors:\n\n* ``dvc.E001``: ``<check>`` is misconfigured. Expected a ``<type>`` but got ``<value>``.\n* ``dvc.E002``: ``<check>`` is misconfigured. ``<value>`` is not a valid PEP440 specifier.\n\n``mysql`` check\n----------------\n\nThis check compares the current version of MariaDB/MySQL to the given specifier.\nThe range can specified either as a single string:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"mysql\": \"~=10.5.8\",\n }\n\n\u2026or as a dictionary mapping database aliases to their specifiers:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"postgresql\": {\n \"default\": \"~=10.5.8\",\n \"analytics\": \"~=10.4.17\",\n },\n }\n\nNote: as a database check, Django will only run this during ``migrate`` or when using ``check --database`` (Django 3.1+) / ``check --tags database`` (Django <3.1).\nSee (`docs <https://docs.djangoproject.com/en/3.1/ref/checks/#builtin-tags>`__).\n\nIf this check fails, the system check will report:\n\n* ``dvc.E005``: The current version of MariaDB/MySQL (``<version>``) for the ``<alias>`` database connection does not match the specified range (``<range>``).\n\n``postgresql`` check\n--------------------\n\nThis check compares the current version of PostgreSQL to the given specifier.\nThe range can specified either as a single string:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"postgresql\": \"~=12.2\",\n }\n\n\u2026or as a dictionary mapping database aliases to their specifiers:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"postgresql\": {\n \"default\": \"~=12.2\",\n \"analytics\": \"~=13.1\",\n },\n }\n\nNote: as a database check, Django will only run this during ``migrate`` or when using ``check --database`` (Django 3.1+) / ``check --tags database`` (Django <3.1).\nSee (`docs <https://docs.djangoproject.com/en/3.1/ref/checks/#builtin-tags>`__).\n\nIf this check fails, the system check will report:\n\n* ``dvc.E004``: The current version of PostgreSQL (``<version>``) for the ``<alias>`` database connection does not match the specified range (``<range>``).\n\n``python`` check\n----------------\n\nThis check compares the current version of Python to the given single specifier:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"python\": \"~=3.9.1\",\n }\n\nIf this check fails, the system check will report:\n\n* ``dvc.E003``: The current version of Python (``<version>``) does not match the specified range (``<range>``).\n\n``sqlite`` check\n--------------------\n\nThis check compares the current version of SQLite to the given single specifier:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"sqlite\": \"~=3.37\",\n }\n\nNote: as a database check, Django will only run this during ``migrate`` or when using ``check --database`` (Django 3.1+) / ``check --tags database`` (Django <3.1).\nSee (`docs <https://docs.djangoproject.com/en/3.1/ref/checks/#builtin-tags>`__).\n\nIf this check fails, the system check will report:\n\n* ``dvc.E006``: The current version of SQLite (``<version>``) does not match the specified range (``<range>``).\n\nExample Upgrade\n===============\n\nLet\u2019s walk through using django-version-checks to upgrade Python from version 3.8 to 3.9.\nWe have an infrastructure consisting of CI, staging, and production environments, and several developers\u2019 development machines.\n\nFirst, we add a pre-existing check to ensure that all environments are on Python 3.8:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"python\": \"~=3.8.6\",\n }\n\nSecond, we rewrite the specifier to allow versions of Python 3.9:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"python\": \">=3.8.6,<3.10.0\",\n }\n\nThird, we upgrade our infrastructure.\nWe\u2019d probably upgrade in the order: CI, development environments, staging, production.\nEach environment should have an automated run of ``manage.py check``, as per the `Django deployment checklist <https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/>`__.\n\nFourth, we change the specifier again to allow Python 3.9 only:\n\n.. code-block:: python\n\n VERSION_CHECKS = {\n \"python\": \"~=3.9.1\",\n }\n\nAnd we\u2019re upgraded! \ud83c\udf89\n",
"bugtrack_url": null,
"license": null,
"summary": "System checks for your project's environment.",
"version": "1.14.0",
"project_urls": {
"Changelog": "https://github.com/adamchainz/django-version-checks/blob/main/CHANGELOG.rst",
"Funding": "https://adamj.eu/books/",
"Repository": "https://github.com/adamchainz/django-version-checks"
},
"split_keywords": [
"django"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "754735026ed44ea67cc2c26016d30cd9220f314df5303edb073fc911cc493536",
"md5": "7770dc9154a36a4237807c74349a8def",
"sha256": "b5ca9d2d792190f8b5afbb70d228e0feb2dbea7b3d42a2c5dc17b8fe5d1618eb"
},
"downloads": -1,
"filename": "django_version_checks-1.14.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7770dc9154a36a4237807c74349a8def",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 7675,
"upload_time": "2025-02-06T22:19:16",
"upload_time_iso_8601": "2025-02-06T22:19:16.521348Z",
"url": "https://files.pythonhosted.org/packages/75/47/35026ed44ea67cc2c26016d30cd9220f314df5303edb073fc911cc493536/django_version_checks-1.14.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "47ffcbb197e4b6e4c851631e987a64c6caf18b7f871939700e4b5ea069f17922",
"md5": "e836a941f3b7e8c996ddeeee0f50ca2d",
"sha256": "ca8ed0777d173c32c047522bf79b8f054317a5e0ff14b798ee6806ddf1627348"
},
"downloads": -1,
"filename": "django_version_checks-1.14.0.tar.gz",
"has_sig": false,
"md5_digest": "e836a941f3b7e8c996ddeeee0f50ca2d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 9814,
"upload_time": "2025-02-06T22:19:18",
"upload_time_iso_8601": "2025-02-06T22:19:18.293649Z",
"url": "https://files.pythonhosted.org/packages/47/ff/cbb197e4b6e4c851631e987a64c6caf18b7f871939700e4b5ea069f17922/django_version_checks-1.14.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-06 22:19:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "adamchainz",
"github_project": "django-version-checks",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "django-version-checks"
}