mirror of
https://github.com/ansible/awx.git
synced 2026-03-25 12:55:04 -02:30
Allow limiting the stdout view given start_line and end_line parameters
This commit is contained in:
@@ -1653,6 +1653,8 @@ class UnifiedJobStdout(RetrieveAPIView):
|
|||||||
unified_job = self.get_object()
|
unified_job = self.get_object()
|
||||||
if request.accepted_renderer.format in ('html', 'api'):
|
if request.accepted_renderer.format in ('html', 'api'):
|
||||||
scheme = request.QUERY_PARAMS.get('scheme', None)
|
scheme = request.QUERY_PARAMS.get('scheme', None)
|
||||||
|
start_line = request.QUERY_PARAMS.get('start_line', 0)
|
||||||
|
end_line = request.QUERY_PARAMS.get('end_line', None)
|
||||||
if scheme not in SCHEME:
|
if scheme not in SCHEME:
|
||||||
scheme = 'ansi2html'
|
scheme = 'ansi2html'
|
||||||
dark_val = request.QUERY_PARAMS.get('dark', '')
|
dark_val = request.QUERY_PARAMS.get('dark', '')
|
||||||
@@ -1663,11 +1665,11 @@ class UnifiedJobStdout(RetrieveAPIView):
|
|||||||
title=get_view_name(self.__class__))
|
title=get_view_name(self.__class__))
|
||||||
if content_only:
|
if content_only:
|
||||||
headers = conv.produce_headers()
|
headers = conv.produce_headers()
|
||||||
body = conv.convert(unified_job.result_stdout_raw, full=False)
|
body = conv.convert(unified_job.result_stdout_raw_limited(start_line, end_line), full=False)
|
||||||
data = '\n'.join([headers, body])
|
data = '\n'.join([headers, body])
|
||||||
data = '<div class="nocode body_foreground body_background">%s</div>' % data
|
data = '<div class="nocode body_foreground body_background">%s</div>' % data
|
||||||
else:
|
else:
|
||||||
data = conv.convert(unified_job.result_stdout_raw)
|
data = conv.convert(unified_job.result_stdout_raw_limited(start_line, end_line))
|
||||||
# Fix ugly grey background used by default.
|
# Fix ugly grey background used by default.
|
||||||
data = data.replace('.body_background { background-color: #AAAAAA; }',
|
data = data.replace('.body_background { background-color: #AAAAAA; }',
|
||||||
'.body_background { background-color: #f5f5f5; }')
|
'.body_background { background-color: #f5f5f5; }')
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import re
|
|||||||
import shlex
|
import shlex
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
from cStringIO import StringIO
|
||||||
|
|
||||||
# PyYAML
|
# PyYAML
|
||||||
import yaml
|
import yaml
|
||||||
@@ -501,21 +502,35 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique
|
|||||||
pass
|
pass
|
||||||
super(UnifiedJob, self).delete()
|
super(UnifiedJob, self).delete()
|
||||||
|
|
||||||
@property
|
def result_stdout_raw_handle(self):
|
||||||
def result_stdout_raw(self):
|
|
||||||
if self.result_stdout_file != "":
|
if self.result_stdout_file != "":
|
||||||
if not os.path.exists(self.result_stdout_file):
|
if not os.path.exists(self.result_stdout_file):
|
||||||
return "stdout capture is missing"
|
return StringIO("stdout capture is missing")
|
||||||
with open(self.result_stdout_file, "r") as stdout_fd:
|
return open(self.result_stdout_file, "r")
|
||||||
return stdout_fd.read()
|
|
||||||
else:
|
else:
|
||||||
return self.result_stdout_text
|
return StringIO(self.result_stdout_text)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def result_stdout_raw(self):
|
||||||
|
return self.result_stdout_raw_handle().read()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def result_stdout(self):
|
def result_stdout(self):
|
||||||
ansi_escape = re.compile(r'\x1b[^m]*m')
|
ansi_escape = re.compile(r'\x1b[^m]*m')
|
||||||
return ansi_escape.sub('', self.result_stdout_raw)
|
return ansi_escape.sub('', self.result_stdout_raw)
|
||||||
|
|
||||||
|
def result_stdout_raw_limited(self, start_line=0, end_line=None):
|
||||||
|
return_buffer = ""
|
||||||
|
if end_line is not None:
|
||||||
|
end_line = int(end_line)
|
||||||
|
for line in self.result_stdout_raw_handle().readlines()[int(start_line):end_line]:
|
||||||
|
return_buffer += line
|
||||||
|
return return_buffer
|
||||||
|
|
||||||
|
def result_stdout_limited(self, start_line=0, end_line=None):
|
||||||
|
ansi_escape = re.compile(r'\x1b[^m]*m')
|
||||||
|
return ansi_escape.sub('', self.result_stdout_raw_limited(start_line, end_line))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def celery_task(self):
|
def celery_task(self):
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user