mirror of
https://github.com/ansible/awx.git
synced 2026-03-13 23:17:32 -02:30
make event stdout encoding more resilient to UTF-16 surrogate pairs
see: https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
This commit is contained in:
@@ -7,6 +7,24 @@ from prometheus_client.parser import text_string_to_metric_families
|
||||
# Django REST Framework
|
||||
from rest_framework import renderers
|
||||
from rest_framework.request import override_method
|
||||
from rest_framework.utils import encoders
|
||||
|
||||
|
||||
class SurrogateEncoder(encoders.JSONEncoder):
|
||||
|
||||
def encode(self, obj):
|
||||
ret = super(SurrogateEncoder, self).encode(obj)
|
||||
try:
|
||||
ret.encode()
|
||||
except UnicodeEncodeError as e:
|
||||
if 'surrogates not allowed' in e.reason:
|
||||
ret = ret.encode('utf-8', 'replace').decode()
|
||||
return ret
|
||||
|
||||
|
||||
class DefaultJSONRenderer(renderers.JSONRenderer):
|
||||
|
||||
encoder_class = SurrogateEncoder
|
||||
|
||||
|
||||
class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer):
|
||||
|
||||
@@ -310,7 +310,7 @@ REST_FRAMEWORK = {
|
||||
'awx.api.parsers.JSONParser',
|
||||
),
|
||||
'DEFAULT_RENDERER_CLASSES': (
|
||||
'rest_framework.renderers.JSONRenderer',
|
||||
'awx.api.renderers.DefaultJSONRenderer',
|
||||
'awx.api.renderers.BrowsableAPIRenderer',
|
||||
),
|
||||
'DEFAULT_METADATA_CLASS': 'awx.api.metadata.Metadata',
|
||||
|
||||
Reference in New Issue
Block a user