relay/app/reactions/renderers.py
Andros Fenollosa 2f6c7f302c New encoder
2025-11-13 18:20:22 +01:00

31 lines
895 B
Python

from rest_framework.renderers import JSONRenderer
import json
class UTF8JSONRenderer(JSONRenderer):
"""
JSON renderer that preserves UTF-8 characters (like emojis) instead of escaping them.
"""
charset = 'utf-8'
def render(self, data, accepted_media_type=None, renderer_context=None):
if data is None:
return bytes()
renderer_context = renderer_context or {}
indent = self.get_indent(accepted_media_type, renderer_context)
if indent is None:
separators = (',', ':')
else:
separators = (',', ': ')
ret = json.dumps(
data,
ensure_ascii=False,
indent=indent,
separators=separators
)
# Handle invalid surrogate characters by using 'surrogatepass' error handler
return ret.encode('utf-8', errors='surrogatepass')