Source code for fairdm.management.commands.show_config
"""Interrogate the running portal about where a setting came from.
With no arguments, reports every layer ``fairdm.setup()`` considered, in
application order, each marked found or absent. Given a setting name,
reports that setting's resolved value and the layer that produced it — the
value passed through ``SafeExceptionReporterFilter().cleanse_setting()``
first, so a secret never reaches stdout.
"""
from django.conf import settings
from django.core.management.base import BaseCommand, CommandParser
from django.views.debug import SafeExceptionReporterFilter
from fairdm.conf import record
[docs]
class Command(BaseCommand):
"""Report the configuration layers, or where one setting came from."""
help = (
"Report the configuration layers fairdm.setup() composed, or a "
"named setting's resolved value and the layer that produced it."
)
[docs]
def add_arguments(self, parser: CommandParser) -> None:
"""Add the optional setting name argument."""
parser.add_argument(
"setting",
nargs="?",
default=None,
help="Report this setting's resolved value and producing layer.",
)
[docs]
def handle(self, *args, **options) -> None:
"""Report one setting when a name is given, otherwise every layer."""
setting_name = options["setting"]
if setting_name:
self._report_setting(setting_name)
else:
self._report_layers()
def _report_layers(self) -> None:
"""Print each layer in application order, marked found or absent."""
for layer in record.layers():
status = "found" if layer.found else "absent"
self.stdout.write(f"{layer.name}: {status}")
def _report_setting(self, name: str) -> None:
"""Print a setting's cleansed value and the layer that produced it.
Args:
name: The setting name to report.
"""
value = getattr(settings, name, None)
cleansed = SafeExceptionReporterFilter().cleanse_setting(name, value)
layer = record.producer(name)
layer_name = layer.name if layer is not None else "unattributed"
self.stdout.write(f"{name} = {cleansed} ({layer_name})")