Fixed #27438 -- Added the diffsettings --default option.
This commit is contained in:
parent
373c6c409c
commit
50f9e736fa
|
@ -18,16 +18,24 @@ class Command(BaseCommand):
|
||||||
'--all', action='store_true', dest='all', default=False,
|
'--all', action='store_true', dest='all', default=False,
|
||||||
help='Display all settings, regardless of their value. Default values are prefixed by "###".',
|
help='Display all settings, regardless of their value. Default values are prefixed by "###".',
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--default', dest='default', metavar='MODULE', default=None,
|
||||||
|
help=(
|
||||||
|
"The settings module to compare the current settings against. Leave empty to "
|
||||||
|
"compare against Django's default settings."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
def handle(self, **options):
|
def handle(self, **options):
|
||||||
# Inspired by Postfix's "postconf -n".
|
# Inspired by Postfix's "postconf -n".
|
||||||
from django.conf import settings, global_settings
|
from django.conf import settings, Settings, global_settings
|
||||||
|
|
||||||
# Because settings are imported lazily, we need to explicitly load them.
|
# Because settings are imported lazily, we need to explicitly load them.
|
||||||
settings._setup()
|
settings._setup()
|
||||||
|
|
||||||
user_settings = module_to_dict(settings._wrapped)
|
user_settings = module_to_dict(settings._wrapped)
|
||||||
default_settings = module_to_dict(global_settings)
|
default = options['default']
|
||||||
|
default_settings = module_to_dict(Settings(default) if default else global_settings)
|
||||||
|
|
||||||
output = []
|
output = []
|
||||||
for key in sorted(user_settings):
|
for key in sorted(user_settings):
|
||||||
|
|
|
@ -223,7 +223,7 @@ Specifies the database onto which to open a shell. Defaults to ``default``.
|
||||||
.. django-admin:: diffsettings
|
.. django-admin:: diffsettings
|
||||||
|
|
||||||
Displays differences between the current settings file and Django's default
|
Displays differences between the current settings file and Django's default
|
||||||
settings.
|
settings (or another settings file specified by :option:`--default`).
|
||||||
|
|
||||||
Settings that don't appear in the defaults are followed by ``"###"``. For
|
Settings that don't appear in the defaults are followed by ``"###"``. For
|
||||||
example, the default settings don't define :setting:`ROOT_URLCONF`, so
|
example, the default settings don't define :setting:`ROOT_URLCONF`, so
|
||||||
|
@ -235,6 +235,13 @@ example, the default settings don't define :setting:`ROOT_URLCONF`, so
|
||||||
Displays all settings, even if they have Django's default value. Such settings
|
Displays all settings, even if they have Django's default value. Such settings
|
||||||
are prefixed by ``"###"``.
|
are prefixed by ``"###"``.
|
||||||
|
|
||||||
|
.. django-admin-option:: --default MODULE
|
||||||
|
|
||||||
|
.. versionadded:: 1.11
|
||||||
|
|
||||||
|
The settings module to compare the current settings against. Leave empty to
|
||||||
|
compare against Django's default settings.
|
||||||
|
|
||||||
``dumpdata``
|
``dumpdata``
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
|
@ -281,6 +281,9 @@ Management Commands
|
||||||
* The new :option:`loaddata --exclude` option allows excluding models and apps
|
* The new :option:`loaddata --exclude` option allows excluding models and apps
|
||||||
while loading data from fixtures.
|
while loading data from fixtures.
|
||||||
|
|
||||||
|
* The new :option:`diffsettings --default` option allows specifying a settings
|
||||||
|
module other than Django's default settings to compare against.
|
||||||
|
|
||||||
Migrations
|
Migrations
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -2128,6 +2128,20 @@ class DiffSettings(AdminScriptTestCase):
|
||||||
self.assertNoOutput(err)
|
self.assertNoOutput(err)
|
||||||
self.assertOutput(out, "### STATIC_URL = None")
|
self.assertOutput(out, "### STATIC_URL = None")
|
||||||
|
|
||||||
|
def test_custom_default(self):
|
||||||
|
"""
|
||||||
|
The --default option specifies an alternate settings module for
|
||||||
|
comparison.
|
||||||
|
"""
|
||||||
|
self.write_settings('settings_default.py', sdict={'FOO': '"foo"', 'BAR': '"bar1"'})
|
||||||
|
self.addCleanup(self.remove_settings, 'settings_default.py')
|
||||||
|
self.write_settings('settings_to_diff.py', sdict={'FOO': '"foo"', 'BAR': '"bar2"'})
|
||||||
|
self.addCleanup(self.remove_settings, 'settings_to_diff.py')
|
||||||
|
out, err = self.run_manage(['diffsettings', '--settings=settings_to_diff', '--default=settings_default'])
|
||||||
|
self.assertNoOutput(err)
|
||||||
|
self.assertNotInOutput(out, "FOO")
|
||||||
|
self.assertOutput(out, "BAR = 'bar2'")
|
||||||
|
|
||||||
|
|
||||||
class Dumpdata(AdminScriptTestCase):
|
class Dumpdata(AdminScriptTestCase):
|
||||||
"""Tests for dumpdata management command."""
|
"""Tests for dumpdata management command."""
|
||||||
|
|
Loading…
Reference in New Issue