app/django/core/management/commands/diffsettings.py
author Pawel Solyga <Pawel.Solyga@gmail.com>
Tue, 20 Jan 2009 22:01:02 +0000
changeset 852 c94bf642be8d
parent 54 03e267d67478
permissions -rw-r--r--
Replace css class 'notice' that is used in User profile template field help text with new 'fieldhelptext' class. Notice is part of CSS for notification bar and we want width limit just for field help text not for notification bar text. Patch by: Pawel Solyga Review 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)