From 720f14c7d4015635f924bdbe292898c06ace1307 Mon Sep 17 00:00:00 2001 From: "T. Franzel" Date: Sat, 10 Dec 2022 02:41:38 +0100 Subject: [PATCH] Add custom settings to CLI (view parity) #892 --- .../management/commands/spectacular.py | 18 +++++++++++++----- tests/test_command.py | 8 ++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/drf_spectacular/management/commands/spectacular.py b/drf_spectacular/management/commands/spectacular.py index 5d035aab..8f6bcebe 100644 --- a/drf_spectacular/management/commands/spectacular.py +++ b/drf_spectacular/management/commands/spectacular.py @@ -6,7 +6,7 @@ from drf_spectacular.drainage import GENERATOR_STATS from drf_spectacular.renderers import OpenApiJsonRenderer, OpenApiYamlRenderer -from drf_spectacular.settings import spectacular_settings +from drf_spectacular.settings import patched_settings, spectacular_settings from drf_spectacular.validation import validate_schema @@ -41,6 +41,7 @@ def add_arguments(self, parser): parser.add_argument('--api-version', dest="api_version", default=None, type=str) parser.add_argument('--lang', dest="lang", default=None, type=str) parser.add_argument('--color', dest="color", default=False, action='store_true') + parser.add_argument('--custom-settings', dest="custom_settings", default=None, type=str) def handle(self, *args, **options): if options['generator_class']: @@ -55,11 +56,18 @@ def handle(self, *args, **options): urlconf=options['urlconf'], api_version=options['api_version'], ) - if options['lang']: - with translation.override(options['lang']): - schema = generator.get_schema(request=None, public=True) + + if options['custom_settings']: + custom_settings = import_string(options['custom_settings']) else: - schema = generator.get_schema(request=None, public=True) + custom_settings = None + + with patched_settings(custom_settings): + if options['lang']: + with translation.override(options['lang']): + schema = generator.get_schema(request=None, public=True) + else: + schema = generator.get_schema(request=None, public=True) GENERATOR_STATS.emit_summary() diff --git a/tests/test_command.py b/tests/test_command.py index 0107ee42..8b2bf995 100644 --- a/tests/test_command.py +++ b/tests/test_command.py @@ -63,6 +63,14 @@ def test_command_color(capsys): GENERATOR_STATS._yellow = GENERATOR_STATS._clear = '' +CUSTOM = {'DESCRIPTION': 'custom setting'} + + +def test_command_custom_settings(capsys): + management.call_command('spectacular', '--custom-settings=tests.test_command.CUSTOM') + assert 'description: custom setting' in capsys.readouterr().out + + def test_command_check(capsys): management.call_command('check', '--deploy') stderr = capsys.readouterr().err