From 20a91cce04c72bc8c64a1c43b7398edac7b709cc Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Sun, 17 Mar 2013 20:48:30 +0100 Subject: [PATCH] Fixed #17037 -- Added a --all option to diffsettings. --- django/core/management/commands/diffsettings.py | 16 +++++++++++++--- docs/ref/django-admin.txt | 7 +++++-- docs/releases/1.6.txt | 2 ++ tests/admin_scripts/tests.py | 12 +++++++++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/django/core/management/commands/diffsettings.py b/django/core/management/commands/diffsettings.py index aa7395e5ee..9e70e9ad8f 100644 --- a/django/core/management/commands/diffsettings.py +++ b/django/core/management/commands/diffsettings.py @@ -1,14 +1,22 @@ +from optparse import make_option + 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)]) + """Converts a module namespace to a Python dictionary.""" + 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 "###".""" + option_list = NoArgsCommand.option_list + ( + make_option('--all', action='store_true', dest='all', default=False, + help='Display all settings, regardless of their value. ' + 'Default values are prefixed by "###".'), + ) + requires_model_validation = False def handle_noargs(self, **options): @@ -22,9 +30,11 @@ class Command(NoArgsCommand): default_settings = module_to_dict(global_settings) output = [] - for key in sorted(user_settings.keys()): + for key in sorted(user_settings): 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])) + elif options['all']: + output.append("### %s = %s" % (key, user_settings[key])) return '\n'.join(output) diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt index d31e30a14d..ac257db9f5 100644 --- a/docs/ref/django-admin.txt +++ b/docs/ref/django-admin.txt @@ -168,8 +168,11 @@ example, the default settings don't define :setting:`ROOT_URLCONF`, so :setting:`ROOT_URLCONF` is followed by ``"###"`` in the output of ``diffsettings``. -Note that Django's default settings live in ``django/conf/global_settings.py``, -if you're ever curious to see the full list of defaults. +The :djadminopt:`--all` option may be provided to display all settings, even +if they have Django's default value. Such settings are prefixed by ``"###"``. + +.. versionadded:: 1.6 + The :djadminopt:`--all` option was added. dumpdata -------------------------------------------- diff --git a/docs/releases/1.6.txt b/docs/releases/1.6.txt index 2ab44c0744..c52f6ee3d9 100644 --- a/docs/releases/1.6.txt +++ b/docs/releases/1.6.txt @@ -157,6 +157,8 @@ Minor features * The documentation contains a :doc:`deployment checklist `. +* The :djadmin:`diffsettings` comand gained a ``--all`` option. + Backwards incompatible changes in 1.6 ===================================== diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index 90f77206cd..baec16820e 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -1661,11 +1661,21 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase): class DiffSettings(AdminScriptTestCase): """Tests for diffsettings management command.""" + def test_basic(self): - "Runs without error and emits settings diff." + """Runs without error and emits settings diff.""" self.write_settings('settings_to_diff.py', sdict={'FOO': '"bar"'}) self.addCleanup(self.remove_settings, 'settings_to_diff.py') args = ['diffsettings', '--settings=settings_to_diff'] out, err = self.run_manage(args) self.assertNoOutput(err) self.assertOutput(out, "FOO = 'bar' ###") + + def test_all(self): + """The all option also shows settings with the default value.""" + self.write_settings('settings_to_diff.py', sdict={'STATIC_URL': 'None'}) + self.addCleanup(self.remove_settings, 'settings_to_diff.py') + args = ['diffsettings', '--settings=settings_to_diff', '--all'] + out, err = self.run_manage(args) + self.assertNoOutput(err) + self.assertOutput(out, "### STATIC_URL = None")