From d4ef57bab63bfb2d50a1dd4484a172ac359eb25f Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Thu, 26 Jun 2014 11:20:47 -0400 Subject: [PATCH] Add absolute end value for limited json stdout view --- awx/api/views.py | 4 ++-- awx/main/models/unified_jobs.py | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/awx/api/views.py b/awx/api/views.py index 5339e2684d..a8e502d6b7 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -1707,7 +1707,7 @@ class UnifiedJobStdout(RetrieveAPIView): dark_bg = (content_only and dark) or (not content_only and (dark or not dark_val)) conv = Ansi2HTMLConverter(scheme=scheme, dark_bg=dark_bg, title=get_view_name(self.__class__)) - content, start, end = unified_job.result_stdout_raw_limited(start_line, end_line) + content, start, end, absolute_end = unified_job.result_stdout_raw_limited(start_line, end_line) if content_only: headers = conv.produce_headers() body = conv.convert(content, full=False) @@ -1719,7 +1719,7 @@ class UnifiedJobStdout(RetrieveAPIView): data = data.replace('.body_background { background-color: #AAAAAA; }', '.body_background { background-color: #f5f5f5; }') if request.accepted_renderer.format == 'json': - return Response({'range': {'start': start, 'end': end}, 'content': body}) + return Response({'range': {'start': start, 'end': end, 'absolute_end': absolute_end}, 'content': body}) return Response(data) elif request.accepted_renderer.format == 'ansi': return Response(unified_job.result_stdout_raw) diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index aa9a48f826..1ce189ea3f 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -524,6 +524,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique if end_line is not None: end_line = int(end_line) stdout_lines = self.result_stdout_raw_handle().readlines() + absolute_end = len(stdout_lines) for line in stdout_lines[int(start_line):end_line]: return_buffer += line if int(start_line) < 0: @@ -535,12 +536,12 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique end_actual = min(int(start_line)+int(end_line), len(stdout_lines)) else: end_actual = len(stdout_lines) - return return_buffer, start_actual, end_actual + return return_buffer, start_actual, end_actual, absolute_end def result_stdout_limited(self, start_line=0, end_line=None): ansi_escape = re.compile(r'\x1b[^m]*m') - content, start, end = self.result_stdout_raw_limited(start_line, end_line) - return ansi_escape.sub('', content), start, end + content, start, end, absolute_end = self.result_stdout_raw_limited(start_line, end_line) + return ansi_escape.sub('', content), start, end, absolute_end @property def celery_task(self):