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,
|
||||
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):
|
||||
# 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.
|
||||
settings._setup()
|
||||
|
||||
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 = []
|
||||
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
|
||||
|
||||
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
|
||||
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
|
||||
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``
|
||||
------------
|
||||
|
||||
|
|
|
@ -281,6 +281,9 @@ Management Commands
|
|||
* The new :option:`loaddata --exclude` option allows excluding models and apps
|
||||
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
|
||||
~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -2128,6 +2128,20 @@ class DiffSettings(AdminScriptTestCase):
|
|||
self.assertNoOutput(err)
|
||||
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):
|
||||
"""Tests for dumpdata management command."""
|
||||
|
|
Loading…
Reference in New Issue