app/django/core/management/commands/diffsettings.py
author Lennard de Rijk <ljvderijk@gmail.com>
Thu, 05 Mar 2009 17:44:48 +0000
changeset 1676 a3c33bef2ea8
parent 54 03e267d67478
permissions -rw-r--r--
Organization Proposals list now correctly sorts. Changed the index.yaml to reflect this. (Removed old entry). Also added a TODO to change this list once http://code.google.com/p/googleappengine/issues/detail?id=1100 is fixed. This means we can't properly sort when using the IN operator on another property then we are sorting on. Patch by: Lennard de Rijk Reviewed by: to-be-reviewed

from django.core.management.base import NoArgsCommand

def module_to_dict(module, omittable=lambda k: k.startswith('_')):
    "Converts a module namespace to a Python dictionary. Used by get_settings_diff."
    return dict([(k, repr(v)) for k, v in module.__dict__.items() if not omittable(k)])

class Command(NoArgsCommand):
    help = """Displays differences between the current settings.py and Django's
    default settings. Settings that don't appear in the defaults are
    followed by "###"."""

    requires_model_validation = False

    def handle_noargs(self, **options):
        # Inspired by Postfix's "postconf -n".
        from django.conf import settings, global_settings

        # Because settings are imported lazily, we need to explicitly load them.
        settings._import_settings()

        user_settings = module_to_dict(settings._target)
        default_settings = module_to_dict(global_settings)

        output = []
        keys = user_settings.keys()
        keys.sort()
        for key in keys:
            if key not in default_settings:
                output.append("%s = %s  ###" % (key, user_settings[key]))
            elif user_settings[key] != default_settings[key]:
                output.append("%s = %s" % (key, user_settings[key]))
        print '\n'.join(output)