Skip to content

Commit 85456c1

Browse files
committed
Use faster CSafeDumper
It uses C implementation and heavily reduces YAML generating time for larger API specifications.
1 parent 5734744 commit 85456c1

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drf_spectacular/renderers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class OpenApiYamlRenderer(BaseRenderer):
1515

1616
def render(self, data, accepted_media_type=None, renderer_context=None):
1717
# disable yaml advanced feature 'alias' for clean, portable, and readable output
18-
class Dumper(yaml.SafeDumper):
18+
class Dumper(yaml.CSafeDumper):
1919
def ignore_aliases(self, data):
2020
return True
2121

@@ -51,7 +51,9 @@ def uuid_representer(dumper, data):
5151
Dumper.add_representer(UUID, uuid_representer)
5252

5353
def safestring_representer(dumper, data):
54-
return dumper.represent_str(data)
54+
# CSafeDumper needs actually a str instance, not a SafeString one.
55+
# str(SafeString()) still returns SafeString.
56+
return dumper.represent_str(super(SafeString, data).__str__())
5557
Dumper.add_representer(SafeString, safestring_representer)
5658

5759
def ordereddict_representer(dumper, data):

0 commit comments

Comments
 (0)