Source code for django_utils.management.commands.settings

from __future__ import print_function

import six
import json
import pprint

from django.conf import settings

from . import base_command


[docs]def json_default(obj): return str(obj)
EXCLUDED_KEYS = {'FILE_CHARSET', 'DEFAULT_CONTENT_TYPE'}
[docs]class Command(base_command.CustomBaseCommand): help = '''Get a list of the current settings, any arguments given will be used to match the settings name (case insensitive). ''' can_import_settings = True requires_model_validation = False output_types = ['pprint', 'print', 'json', 'csv']
[docs] def add_arguments(self, parser): parser.add_argument('keys', nargs='+') parser.add_argument( '-o', '--output-type', default='pprint', choices=self.output_types) parser.add_argument('-k', '--show-keys', action='store_true')
[docs] def render_output(self, data, output_type='pprint', show_keys=False, **options): if output_type == 'pprint': if show_keys: pprint.pprint(data) else: for key, values in data.items(): pprint.pprint(values) elif output_type == 'print': for key, values in data.items(): if show_keys: print(key, end='') print(values) elif output_type == 'csv': for key, values in data.items(): out = [] if show_keys: out.append(key) if isinstance(values, six.string_types): values = [values] elif isinstance(values, dict): values = ['%s=%s' % item for item in values.items()] else: try: values = [str(value) for value in values] except TypeError: values = [str(values)] for i, value in enumerate(values): if '"' in value: value = value.replace('"', '""') if ' ' in value or ',' in value: value = '"%s"' % value values[i] = value out += values print(','.join(out)) elif output_type == 'json': print(json.dumps(data, indent=4, sort_keys=True, default=json_default))
[docs] def handle(self, *args, **options): super(Command, self).handle(*args, **options) args = list(map(str.upper, options.get('keys', args))) data = dict() for key in dir(settings): if key.isupper() and key not in EXCLUDED_KEYS: value = getattr(settings, key) found = False for arg in args: if arg in key: found = True break if found: data[key] = value self.render_output(data, **options)