Skip to content

Commit ebde56b

Browse files
authored
Represent SafeString as plain string on schema rendering. (#8429)
* Use SafeString.represent_str to represent SafeString as str * Add SafeString yaml rendering test
1 parent c0d95cb commit ebde56b

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

rest_framework/renderers.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from django.template import engines, loader
2020
from django.urls import NoReverseMatch
2121
from django.utils.html import mark_safe
22+
from django.utils.safestring import SafeString
2223

2324
from rest_framework import VERSION, exceptions, serializers, status
2425
from rest_framework.compat import (
@@ -1055,6 +1056,7 @@ def render(self, data, media_type=None, renderer_context=None):
10551056
class Dumper(yaml.Dumper):
10561057
def ignore_aliases(self, data):
10571058
return True
1059+
Dumper.add_representer(SafeString, Dumper.represent_str)
10581060
return yaml.dump(data, default_flow_style=False, sort_keys=False, Dumper=Dumper).encode('utf-8')
10591061

10601062

tests/schemas/test_openapi.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.db import models
66
from django.test import RequestFactory, TestCase, override_settings
77
from django.urls import path
8+
from django.utils.safestring import SafeString
89
from django.utils.translation import gettext_lazy as _
910

1011
from rest_framework import filters, generics, pagination, routers, serializers
@@ -583,6 +584,11 @@ def test_openapi_yaml_rendering_without_aliases(self):
583584
renderer.render(data) == b'o2:\n test: test\no1:\n test: test\n' # py <= 3.5
584585
)
585586

587+
def test_openapi_yaml_safestring_render(self):
588+
renderer = OpenAPIRenderer()
589+
data = {'o1': SafeString('test')}
590+
assert renderer.render(data) == b'o1: test\n'
591+
586592
def test_serializer_filefield(self):
587593
path = '/{id}/'
588594
method = 'POST'

0 commit comments

Comments
 (0)