fix OpenAPIRenderer for timedelta

This commit is contained in:
Rizwan Shaikh 2023-06-12 23:56:40 +05:30
parent a180bde0fd
commit d1680051b1
2 changed files with 13 additions and 0 deletions

View File

@ -9,6 +9,7 @@ REST framework also provides an HTML renderer that renders the browsable API.
import base64
import contextlib
import datetime
from urllib import parse
from django import forms
@ -1062,6 +1063,7 @@ class OpenAPIRenderer(BaseRenderer):
def ignore_aliases(self, data):
return True
Dumper.add_representer(SafeString, Dumper.represent_str)
Dumper.add_representer(datetime.timedelta, encoders.CustomScalar.represent_timedelta)
return yaml.dump(data, default_flow_style=False, sort_keys=False, Dumper=Dumper).encode('utf-8')

View File

@ -65,3 +65,14 @@ class JSONEncoder(json.JSONEncoder):
elif hasattr(obj, '__iter__'):
return tuple(item for item in obj)
return super().default(obj)
class CustomScalar:
"""
CustomScalar that knows how to encode timedelta that renderer
can understand.
"""
@classmethod
def represent_timedelta(cls, dumper, data):
value = str(data.total_seconds())
return dumper.represent_scalar('tag:yaml.org,2002:str', value)