web/lib/django/core/management/commands/diffsettings.py
author ymh <ymh.work@gmail.com>
Wed, 02 Jun 2010 18:57:35 +0200
changeset 38 77b6da96e6f1
permissions -rw-r--r--
update django
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
from django.core.management.base import NoArgsCommand
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
def module_to_dict(module, omittable=lambda k: k.startswith('_')):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
    "Converts a module namespace to a Python dictionary. Used by get_settings_diff."
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
    return dict([(k, repr(v)) for k, v in module.__dict__.items() if not omittable(k)])
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
class Command(NoArgsCommand):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
    help = """Displays differences between the current settings.py and Django's
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
    default settings. Settings that don't appear in the defaults are
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
    followed by "###"."""
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    requires_model_validation = False
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    def handle_noargs(self, **options):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
        # Inspired by Postfix's "postconf -n".
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
        from django.conf import settings, global_settings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        # Because settings are imported lazily, we need to explicitly load them.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        settings._setup()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        user_settings = module_to_dict(settings._wrapped)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        default_settings = module_to_dict(global_settings)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        output = []
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        keys = user_settings.keys()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        keys.sort()
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        for key in keys:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
            if key not in default_settings:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
                output.append("%s = %s  ###" % (key, user_settings[key]))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
            elif user_settings[key] != default_settings[key]:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
                output.append("%s = %s" % (key, user_settings[key]))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        return '\n'.join(output)