mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-28 08:59:54 +03:00
add options to generateschema & prevent yaml aliases
This commit is contained in:
parent
165da5be0c
commit
27dbd6f580
|
@ -18,6 +18,7 @@ class Command(BaseCommand):
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('--title', dest="title", default='', type=str)
|
parser.add_argument('--title', dest="title", default='', type=str)
|
||||||
parser.add_argument('--url', dest="url", default=None, type=str)
|
parser.add_argument('--url', dest="url", default=None, type=str)
|
||||||
|
parser.add_argument('--api-version', dest="api_version", default=None, type=str)
|
||||||
parser.add_argument('--description', dest="description", default=None, type=str)
|
parser.add_argument('--description', dest="description", default=None, type=str)
|
||||||
if self.get_mode() == COREAPI_MODE:
|
if self.get_mode() == COREAPI_MODE:
|
||||||
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json', 'corejson'], default='openapi', type=str)
|
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json', 'corejson'], default='openapi', type=str)
|
||||||
|
@ -25,6 +26,7 @@ class Command(BaseCommand):
|
||||||
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json'], default='openapi', type=str)
|
parser.add_argument('--format', dest="format", choices=['openapi', 'openapi-json'], default='openapi', type=str)
|
||||||
parser.add_argument('--urlconf', dest="urlconf", default=None, type=str)
|
parser.add_argument('--urlconf', dest="urlconf", default=None, type=str)
|
||||||
parser.add_argument('--generator_class', dest="generator_class", default=None, type=str)
|
parser.add_argument('--generator_class', dest="generator_class", default=None, type=str)
|
||||||
|
parser.add_argument('--file', dest="file", default=None, type=str)
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
if options['generator_class']:
|
if options['generator_class']:
|
||||||
|
@ -36,11 +38,17 @@ class Command(BaseCommand):
|
||||||
title=options['title'],
|
title=options['title'],
|
||||||
description=options['description'],
|
description=options['description'],
|
||||||
urlconf=options['urlconf'],
|
urlconf=options['urlconf'],
|
||||||
|
version=options['api_version'],
|
||||||
)
|
)
|
||||||
schema = generator.get_schema(request=None, public=True)
|
schema = generator.get_schema(request=None, public=True)
|
||||||
renderer = self.get_renderer(options['format'])
|
renderer = self.get_renderer(options['format'])
|
||||||
output = renderer.render(schema, renderer_context={})
|
output = renderer.render(schema, renderer_context={})
|
||||||
self.stdout.write(output.decode())
|
|
||||||
|
if options['file']:
|
||||||
|
with open(options['file'], 'wb') as f:
|
||||||
|
f.write(output)
|
||||||
|
else:
|
||||||
|
self.stdout.write(output.decode())
|
||||||
|
|
||||||
def get_renderer(self, format):
|
def get_renderer(self, format):
|
||||||
if self.get_mode() == COREAPI_MODE:
|
if self.get_mode() == COREAPI_MODE:
|
||||||
|
|
|
@ -1053,6 +1053,8 @@ class OpenAPIRenderer(BaseRenderer):
|
||||||
assert yaml, 'Using OpenAPIRenderer, but `pyyaml` is not installed.'
|
assert yaml, 'Using OpenAPIRenderer, but `pyyaml` is not installed.'
|
||||||
|
|
||||||
def render(self, data, media_type=None, renderer_context=None):
|
def render(self, data, media_type=None, renderer_context=None):
|
||||||
|
# prevent polluting the output with yaml references (aliases)
|
||||||
|
yaml.Dumper.ignore_aliases = lambda *args: True
|
||||||
return yaml.dump(data, default_flow_style=False, sort_keys=False).encode('utf-8')
|
return yaml.dump(data, default_flow_style=False, sort_keys=False).encode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user