Commit 91f317c7 authored by Daniel Lindsley's avatar Daniel Lindsley
Browse files

Added a ``checksetup`` management command for verifying Django compatibility.

parent 70d7e45e
Loading
Loading
Loading
Loading
+0 −0

Empty file added.

+39 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals
import warnings

from django.core.compat_checks import django_1_6_0


COMPAT_CHECKS = [
    # Add new modules at the top, so we keep things in descending order.
    # After two-three minor releases, old versions should get dropped.
    django_1_6_0,
]


def check_compatibility():
    """
    Runs through compatibility checks to warn the user with an existing install
    about changes in an up-to-date Django.

    Modules should be located in ``django.core.compat_checks`` (typically one
    per release of Django) & must have a ``run_checks`` function that runs
    all the checks.

    Returns a list of informational messages about incompatibilities.
    """
    messages = []

    for check_module in COMPAT_CHECKS:
        check = getattr(check_module, u'run_checks', None)

        if check is None:
            warnings.warn(
                u"The '%s' module lacks a " % check_module.__name__ +
                u"'run_checks' method, which is needed to verify compatibility."
            )
            continue

        messages.extend(check())

    return messages
+37 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals


def check_test_runner():
    """
    Checks if the user has *not* overridden the ``TEST_RUNNER`` setting &
    warns them about the default behavior changes.

    If the user has overridden that setting, we presume they know what they're
    doing & avoid generating a message.
    """
    from django.conf import settings
    new_default = u'django.test.runner.DiscoverRunner'
    test_runner_setting = getattr(settings, u'TEST_RUNNER', new_default)

    if test_runner_setting == new_default:
        message = [
            u"You have not explicitly set 'TEST_RUNNER'. In Django 1.6,",
            u"there is a new test runner ('%s')" % new_default,
            u"by default. You should ensure your tests are still all",
            u"running & behaving as expected. See",
            u"https://docs.djangoproject.com/en/dev/releases/1.6/#discovery-of-tests-in-any-test-module",
            u"for more information.",
        ]
        return u' '.join(message)


def run_checks():
    """
    Required by the ``checksetup`` management command, this returns a list of
    messages from all the relevant check functions for this version of Django.
    """
    checks = [
        check_test_runner()
    ]
    # Filter out the ``None`` or empty strings.
    return [output for output in checks if output]
+14 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals
import warnings

from django.core.compat_checks.base import check_compatibility
from django.core.management.base import NoArgsCommand


class Command(NoArgsCommand):
    help = u"Checks your configuration's compatibility with this version " + \
           u"of Django."

    def handle_noargs(self, **options):
        for message in check_compatibility():
            warnings.warn(message)
+7 −0
Original line number Diff line number Diff line
@@ -121,6 +121,13 @@ GeoDjango now provides :ref:`form fields and widgets <ref-gis-forms-api>` for
its geo-specialized fields. They are OpenLayers-based by default, but they can
be customized to use any other JS framework.

``checksetup`` management command added for verifying compatibility
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A ``checksetup`` management command was added, enabling you to verify if your
current configuration (currently oriented at settings) is compatible with the
current version of Django.

Minor features
~~~~~~~~~~~~~~

Loading