summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Marczewski <pwmarcz@gmail.com>2016-11-05 12:31:37 +0100
committerTim Graham <timograham@gmail.com>2016-11-10 07:50:49 -0500
commit50f9e736fa701664c5659d0653aff75b7f4489b6 (patch)
treed19a19558e570cef0d6f24786214eb421a69f304
parent373c6c409c310cb61e1e9c9aff4adba379ffd0b4 (diff)
Fixed #27438 -- Added the diffsettings --default option.
-rw-r--r--django/core/management/commands/diffsettings.py12
-rw-r--r--docs/ref/django-admin.txt9
-rw-r--r--docs/releases/1.11.txt3
-rw-r--r--tests/admin_scripts/tests.py14
4 files changed, 35 insertions, 3 deletions
diff --git a/django/core/management/commands/diffsettings.py b/django/core/management/commands/diffsettings.py
index 7bae48c218..3a5ebcf845 100644
--- a/django/core/management/commands/diffsettings.py
+++ b/django/core/management/commands/diffsettings.py
@@ -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):
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index 86b5e724fa..c35e728f26 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -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``
------------
diff --git a/docs/releases/1.11.txt b/docs/releases/1.11.txt
index bbe1d63028..a612cb0e12 100644
--- a/docs/releases/1.11.txt
+++ b/docs/releases/1.11.txt
@@ -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
~~~~~~~~~~
diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py
index 84b44931b3..329263db0a 100644
--- a/tests/admin_scripts/tests.py
+++ b/tests/admin_scripts/tests.py
@@ -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."""