mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-22 09:36:49 +03:00
Disable yaml aliases for schema generation. (#7131)
This commit is contained in:
parent
79d37bce4c
commit
4137ef41ef
|
@ -1053,7 +1053,11 @@ class OpenAPIRenderer(BaseRenderer):
|
|||
assert yaml, 'Using OpenAPIRenderer, but `pyyaml` is not installed.'
|
||||
|
||||
def render(self, data, media_type=None, renderer_context=None):
|
||||
return yaml.dump(data, default_flow_style=False, sort_keys=False).encode('utf-8')
|
||||
# disable yaml advanced feature 'alias' for clean, portable, and readable output
|
||||
class Dumper(yaml.Dumper):
|
||||
def ignore_aliases(self, data):
|
||||
return True
|
||||
return yaml.dump(data, default_flow_style=False, sort_keys=False, Dumper=Dumper).encode('utf-8')
|
||||
|
||||
|
||||
class JSONOpenAPIRenderer(BaseRenderer):
|
||||
|
|
|
@ -8,7 +8,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
from rest_framework import filters, generics, pagination, routers, serializers
|
||||
from rest_framework.compat import uritemplate
|
||||
from rest_framework.parsers import JSONParser, MultiPartParser
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
from rest_framework.renderers import JSONRenderer, OpenAPIRenderer
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.schemas.openapi import AutoSchema, SchemaGenerator
|
||||
|
||||
|
@ -473,6 +473,19 @@ class TestOperationIntrospection(TestCase):
|
|||
assert len(success_response['content'].keys()) == 1
|
||||
assert 'application/json' in success_response['content']
|
||||
|
||||
def test_openapi_yaml_rendering_without_aliases(self):
|
||||
renderer = OpenAPIRenderer()
|
||||
|
||||
reused_object = {'test': 'test'}
|
||||
data = {
|
||||
'o1': reused_object,
|
||||
'o2': reused_object,
|
||||
}
|
||||
assert (
|
||||
renderer.render(data) == b'o1:\n test: test\no2:\n test: test\n' or
|
||||
renderer.render(data) == b'o2:\n test: test\no1:\n test: test\n' # py <= 3.5
|
||||
)
|
||||
|
||||
def test_serializer_filefield(self):
|
||||
path = '/{id}/'
|
||||
method = 'POST'
|
||||
|
|
Loading…
Reference in New Issue
Block a user