Depend on a serializer context variable no_truncate

to decide whether to turn off the ANSI control sequence-aware
truncation, instead of needing inappropriate awareness of the details
of the view that invoked the serializer.  This will also allow us to
have views that can more flexibly turn off the truncation under other
circumstances.
This commit is contained in:
Jeff Bradberry
2019-10-10 16:08:17 -04:00
parent a803cedd7c
commit 9efa7b84df
2 changed files with 15 additions and 5 deletions

View File

@@ -3852,12 +3852,12 @@ class JobEventSerializer(BaseSerializer):
def to_representation(self, obj): def to_representation(self, obj):
data = super(JobEventSerializer, self).to_representation(obj) data = super(JobEventSerializer, self).to_representation(obj)
# Show full stdout for event detail view, truncate only for list view.
if hasattr(self.context.get('view', None), 'retrieve'):
return data
# Show full stdout for playbook_on_* events. # Show full stdout for playbook_on_* events.
if obj and obj.event.startswith('playbook_on'): if obj and obj.event.startswith('playbook_on'):
return data return data
# If the view logic says to not trunctate (request was to the detail view or a param was used)
if self.context.get('no_truncate', False):
return data
max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY
if 'stdout' in data: if 'stdout' in data:
data['stdout'] = truncate_stdout(data['stdout'], max_bytes) data['stdout'] = truncate_stdout(data['stdout'], max_bytes)
@@ -3957,8 +3957,8 @@ class AdHocCommandEventSerializer(BaseSerializer):
def to_representation(self, obj): def to_representation(self, obj):
data = super(AdHocCommandEventSerializer, self).to_representation(obj) data = super(AdHocCommandEventSerializer, self).to_representation(obj)
# Show full stdout for event detail view, truncate only for list view. # If the view logic says to not trunctate (request was to the detail view or a param was used)
if hasattr(self.context.get('view', None), 'retrieve'): if self.context.get('no_truncate', False):
return data return data
max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY
if 'stdout' in data: if 'stdout' in data:

View File

@@ -3774,6 +3774,11 @@ class JobEventDetail(RetrieveAPIView):
model = models.JobEvent model = models.JobEvent
serializer_class = serializers.JobEventSerializer serializer_class = serializers.JobEventSerializer
def get_serializer_context(self):
context = super().get_serializer_context()
context.update(no_truncate=True)
return context
class JobEventChildrenList(SubListAPIView): class JobEventChildrenList(SubListAPIView):
@@ -4008,6 +4013,11 @@ class AdHocCommandEventDetail(RetrieveAPIView):
model = models.AdHocCommandEvent model = models.AdHocCommandEvent
serializer_class = serializers.AdHocCommandEventSerializer serializer_class = serializers.AdHocCommandEventSerializer
def get_serializer_context(self):
context = super().get_serializer_context()
context.update(no_truncate=True)
return context
class BaseAdHocCommandEventsList(SubListAPIView): class BaseAdHocCommandEventsList(SubListAPIView):