From 0ff280a363645216232a3662a3f79d99d8f94e8b Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Wed, 22 Jul 2015 12:36:38 -0400 Subject: [PATCH] Initial support for downloading stdout --- awx/api/renderers.py | 3 +++ awx/api/views.py | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/awx/api/renderers.py b/awx/api/renderers.py index 5f3eee81db..fd60520db2 100644 --- a/awx/api/renderers.py +++ b/awx/api/renderers.py @@ -45,6 +45,9 @@ class PlainTextRenderer(renderers.BaseRenderer): data = unicode(data) return data.encode(self.charset) +class DownloadTextRenderer(PlainTextRenderer): + format = "txt_download" + class AnsiTextRenderer(PlainTextRenderer): media_type = 'text/plain' diff --git a/awx/api/views.py b/awx/api/views.py index bb6ff67f2c..3e5b7c89a2 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -2788,7 +2788,7 @@ class UnifiedJobStdout(RetrieveAPIView): serializer_class = UnifiedJobStdoutSerializer renderer_classes = [BrowsableAPIRenderer, renderers.StaticHTMLRenderer, - PlainTextRenderer, AnsiTextRenderer, + PlainTextRenderer, AnsiTextRenderer, DownloadTextRenderer, renderers.JSONRenderer] filter_backends = () new_in_148 = True @@ -2820,6 +2820,10 @@ class UnifiedJobStdout(RetrieveAPIView): return Response(data) elif request.accepted_renderer.format == 'ansi': return Response(unified_job.result_stdout_raw) + elif request.accepted_renderer.format == 'txt_download': + content = unified_job.result_stdout + headers = {"Content-Disposition": 'attachment; filename="job_%s.txt"' % str(unified_job.id)} + return Response(content, headers=headers) else: return super(UnifiedJobStdout, self).retrieve(request, *args, **kwargs)