From d10d5f1539c7b75f8f9eeb6c0379da416e1fa7a5 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Thu, 31 Jan 2019 00:59:13 -0500 Subject: [PATCH] work around a bug in Django that breaks the stdout HTML view in py3 see: https://github.com/ansible/awx/issues/3108 --- awx/api/renderers.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/awx/api/renderers.py b/awx/api/renderers.py index 2bcbaeb66c..abf67ea351 100644 --- a/awx/api/renderers.py +++ b/awx/api/renderers.py @@ -1,6 +1,8 @@ # Copyright (c) 2015 Ansible, Inc. # All Rights Reserved. +from django.utils.safestring import SafeText + # Django REST Framework from rest_framework import renderers from rest_framework.request import override_method @@ -18,6 +20,19 @@ class BrowsableAPIRenderer(renderers.BrowsableAPIRenderer): return renderers.JSONRenderer() return renderer + def get_content(self, renderer, data, accepted_media_type, renderer_context): + if isinstance(data, SafeText): + # Older versions of Django (pre-2.0) have a py3 bug which causes + # bytestrings marked as "safe" to not actually get _treated_ as + # safe; this causes certain embedded strings (like the stdout HTML + # view) to be improperly escaped + # see: https://github.com/ansible/awx/issues/3108 + # https://code.djangoproject.com/ticket/28121 + return data + return super(BrowsableAPIRenderer, self).get_content(renderer, data, + accepted_media_type, + renderer_context) + def get_context(self, data, accepted_media_type, renderer_context): # Store the associated response status to know how to populate the raw # data form.