Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions drf_spectacular/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
from uuid import UUID

import yaml

try
from yaml import CSafeDumper as SafeDumper
except ImportError:
from yaml import SafeDumper

from django.utils.safestring import SafeString
from rest_framework.exceptions import ErrorDetail
from rest_framework.renderers import BaseRenderer, JSONRenderer
Expand All @@ -15,7 +21,7 @@ class OpenApiYamlRenderer(BaseRenderer):

def render(self, data, accepted_media_type=None, renderer_context=None):
# disable yaml advanced feature 'alias' for clean, portable, and readable output
class Dumper(yaml.SafeDumper):
class Dumper(SafeDumper):
def ignore_aliases(self, data):
return True

Expand Down Expand Up @@ -51,7 +57,9 @@ def uuid_representer(dumper, data):
Dumper.add_representer(UUID, uuid_representer)

def safestring_representer(dumper, data):
return dumper.represent_str(data)
# CSafeDumper needs actually a str instance, not a SafeString one.
# str(SafeString()) still returns SafeString.
return dumper.represent_str(super(SafeString, data).__str__())
Dumper.add_representer(SafeString, safestring_representer)

def ordereddict_representer(dumper, data):
Expand Down