mirror of https://github.com/django/django.git
Fixed #17037 -- Added a --all option to diffsettings.
This commit is contained in:
parent
68905695b8
commit
20a91cce04
|
@ -1,14 +1,22 @@
|
||||||
|
from optparse import make_option
|
||||||
|
|
||||||
from django.core.management.base import NoArgsCommand
|
from django.core.management.base import NoArgsCommand
|
||||||
|
|
||||||
def module_to_dict(module, omittable=lambda k: k.startswith('_')):
|
def module_to_dict(module, omittable=lambda k: k.startswith('_')):
|
||||||
"Converts a module namespace to a Python dictionary. Used by get_settings_diff."
|
"""Converts a module namespace to a Python dictionary."""
|
||||||
return dict([(k, repr(v)) for k, v in module.__dict__.items() if not omittable(k)])
|
return dict((k, repr(v)) for k, v in module.__dict__.items() if not omittable(k))
|
||||||
|
|
||||||
class Command(NoArgsCommand):
|
class Command(NoArgsCommand):
|
||||||
help = """Displays differences between the current settings.py and Django's
|
help = """Displays differences between the current settings.py and Django's
|
||||||
default settings. Settings that don't appear in the defaults are
|
default settings. Settings that don't appear in the defaults are
|
||||||
followed by "###"."""
|
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
|
requires_model_validation = False
|
||||||
|
|
||||||
def handle_noargs(self, **options):
|
def handle_noargs(self, **options):
|
||||||
|
@ -22,9 +30,11 @@ class Command(NoArgsCommand):
|
||||||
default_settings = module_to_dict(global_settings)
|
default_settings = module_to_dict(global_settings)
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
for key in sorted(user_settings.keys()):
|
for key in sorted(user_settings):
|
||||||
if key not in default_settings:
|
if key not in default_settings:
|
||||||
output.append("%s = %s ###" % (key, user_settings[key]))
|
output.append("%s = %s ###" % (key, user_settings[key]))
|
||||||
elif user_settings[key] != default_settings[key]:
|
elif user_settings[key] != default_settings[key]:
|
||||||
output.append("%s = %s" % (key, user_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)
|
return '\n'.join(output)
|
||||||
|
|
|
@ -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
|
:setting:`ROOT_URLCONF` is followed by ``"###"`` in the output of
|
||||||
``diffsettings``.
|
``diffsettings``.
|
||||||
|
|
||||||
Note that Django's default settings live in ``django/conf/global_settings.py``,
|
The :djadminopt:`--all` option may be provided to display all settings, even
|
||||||
if you're ever curious to see the full list of defaults.
|
if they have Django's default value. Such settings are prefixed by ``"###"``.
|
||||||
|
|
||||||
|
.. versionadded:: 1.6
|
||||||
|
The :djadminopt:`--all` option was added.
|
||||||
|
|
||||||
dumpdata <appname appname appname.Model ...>
|
dumpdata <appname appname appname.Model ...>
|
||||||
--------------------------------------------
|
--------------------------------------------
|
||||||
|
|
|
@ -157,6 +157,8 @@ Minor features
|
||||||
* The documentation contains a :doc:`deployment checklist
|
* The documentation contains a :doc:`deployment checklist
|
||||||
</howto/deployment/checklist>`.
|
</howto/deployment/checklist>`.
|
||||||
|
|
||||||
|
* The :djadmin:`diffsettings` comand gained a ``--all`` option.
|
||||||
|
|
||||||
Backwards incompatible changes in 1.6
|
Backwards incompatible changes in 1.6
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
|
|
|
@ -1661,11 +1661,21 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
|
||||||
|
|
||||||
class DiffSettings(AdminScriptTestCase):
|
class DiffSettings(AdminScriptTestCase):
|
||||||
"""Tests for diffsettings management command."""
|
"""Tests for diffsettings management command."""
|
||||||
|
|
||||||
def test_basic(self):
|
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.write_settings('settings_to_diff.py', sdict={'FOO': '"bar"'})
|
||||||
self.addCleanup(self.remove_settings, 'settings_to_diff.py')
|
self.addCleanup(self.remove_settings, 'settings_to_diff.py')
|
||||||
args = ['diffsettings', '--settings=settings_to_diff']
|
args = ['diffsettings', '--settings=settings_to_diff']
|
||||||
out, err = self.run_manage(args)
|
out, err = self.run_manage(args)
|
||||||
self.assertNoOutput(err)
|
self.assertNoOutput(err)
|
||||||
self.assertOutput(out, "FOO = 'bar' ###")
|
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")
|
||||||
|
|
Loading…
Reference in New Issue