mirror of
https://github.com/ansible/awx.git
synced 2026-05-17 06:17:36 -02:30
Rework stdout display for file storage only
* Cleanup old code related to stdout download using temporary files * Remove copy-into-database code * Modify stdout download code to reference stdout file
This commit is contained in:
@@ -464,7 +464,6 @@ class UnifiedJobTemplateSerializer(BaseSerializer):
|
||||
|
||||
class UnifiedJobSerializer(BaseSerializer):
|
||||
|
||||
#result_stdout = serializers.CharField(source='result_stdout', label='result stdout', read_only=True)
|
||||
result_stdout = serializers.SerializerMethodField('get_result_stdout')
|
||||
unified_job_template = serializers.Field(source='unified_job_template_id', label='unified job template')
|
||||
job_env = serializers.CharField(source='job_env', label='job env', read_only=True)
|
||||
@@ -565,18 +564,27 @@ class UnifiedJobListSerializer(UnifiedJobSerializer):
|
||||
|
||||
class UnifiedJobStdoutSerializer(UnifiedJobSerializer):
|
||||
|
||||
result_stdout = serializers.SerializerMethodField('get_result_stdout')
|
||||
|
||||
class Meta:
|
||||
fields = ('result_stdout',)
|
||||
|
||||
def get_result_stdout(self, obj):
|
||||
obj_size = obj.result_stdout_size
|
||||
if obj_size > settings.STDOUT_MAX_BYTES_DISPLAY:
|
||||
return "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, settings.STDOUT_MAX_BYTES_DISPLAY)
|
||||
return obj.result_stdout
|
||||
|
||||
def get_types(self):
|
||||
if type(self) is UnifiedJobStdoutSerializer:
|
||||
return ['project_update', 'inventory_update', 'job', 'ad_hoc_command', 'system_job']
|
||||
else:
|
||||
return super(UnifiedJobStdoutSerializer, self).get_types()
|
||||
|
||||
def to_native(self, obj):
|
||||
ret = super(UnifiedJobStdoutSerializer, self).to_native(obj)
|
||||
return ret.get('result_stdout', '')
|
||||
# TODO: Needed?
|
||||
#def to_native(self, obj):
|
||||
# ret = super(UnifiedJobStdoutSerializer, self).to_native(obj)
|
||||
# return ret.get('result_stdout', '')
|
||||
|
||||
|
||||
class UserSerializer(BaseSerializer):
|
||||
|
||||
@@ -2111,20 +2111,11 @@ class JobList(ListCreateAPIView):
|
||||
model = Job
|
||||
serializer_class = JobListSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.request.user.get_queryset(self.model).defer('result_stdout_text')
|
||||
return qs
|
||||
|
||||
class JobDetail(RetrieveUpdateDestroyAPIView):
|
||||
|
||||
model = Job
|
||||
serializer_class = JobSerializer
|
||||
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(JobDetail, self).get_queryset().defer('result_stdout_text')
|
||||
return qs
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
obj = self.get_object()
|
||||
# Only allow changes (PUT/PATCH) when job status is "new".
|
||||
@@ -2794,11 +2785,6 @@ class UnifiedJobList(ListAPIView):
|
||||
model = UnifiedJob
|
||||
serializer_class = UnifiedJobListSerializer
|
||||
new_in_148 = True
|
||||
|
||||
def get_queryset(self):
|
||||
qs = self.request.user.get_queryset(self.model).defer('result_stdout_text')
|
||||
return qs
|
||||
|
||||
|
||||
class UnifiedJobStdout(RetrieveAPIView):
|
||||
|
||||
@@ -2809,16 +2795,15 @@ class UnifiedJobStdout(RetrieveAPIView):
|
||||
filter_backends = ()
|
||||
new_in_148 = True
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(UnifiedJobStdout, self).get_queryset().defer('result_stdout_text')
|
||||
return qs
|
||||
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
unified_job = self.get_object()
|
||||
obj_size = unified_job.result_stdout_size
|
||||
if request.accepted_renderer.format != 'txt_download' and obj_size > settings.STDOUT_MAX_BYTES_DISPLAY:
|
||||
return Response("Standard Output too large to display (%d bytes), "
|
||||
"only download supported for sizes over %d bytes" % (obj_size, settings.STDOUT_MAX_BYTES_DISPLAY))
|
||||
response_message = "Standard Output too large to display (%d bytes), only download supported for sizes over %d bytes" % (obj_size, settings.STDOUT_MAX_BYTES_DISPLAY)
|
||||
if request.accepted_renderer.format == 'json':
|
||||
return Response({'range': {'start': 0, 'end': 1, 'absolute_end': 1}, 'content': response_message})
|
||||
else:
|
||||
return Response(response_message)
|
||||
|
||||
if request.accepted_renderer.format in ('html', 'api', 'json'):
|
||||
start_line = request.QUERY_PARAMS.get('start_line', 0)
|
||||
@@ -2847,7 +2832,7 @@ class UnifiedJobStdout(RetrieveAPIView):
|
||||
return Response(unified_job.result_stdout_raw)
|
||||
elif request.accepted_renderer.format == 'txt_download':
|
||||
try:
|
||||
content_fd = open(unified_job.dump_result_stdout(), 'r')
|
||||
content_fd = open(unified_job.result_stdout_file, 'r')
|
||||
response = HttpResponse(FileWrapper(content_fd), content_type='text/plain')
|
||||
response["Content-Disposition"] = 'attachment; filename="job_%s.txt"' % str(unified_job.id)
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user