Move performance boost to access.py.

This commit is contained in:
Aaron Tan 2016-12-01 11:04:06 -05:00
parent 908b140d28
commit e63716c0bb
3 changed files with 6 additions and 7 deletions

View File

@ -241,10 +241,7 @@ class ListAPIView(generics.ListAPIView, GenericAPIView):
# Base class for a read-only list view.
def get_queryset(self):
qs = self.request.user.get_queryset(self.model)
if getattr(self.model, 'spawned_by_workflow', False):
qs = qs.select_related('unified_job_node__workflow_job')
return qs
return self.request.user.get_queryset(self.model)
def paginate_queryset(self, queryset):
page = super(ListAPIView, self).paginate_queryset(queryset)

View File

@ -599,18 +599,18 @@ class UnifiedJobSerializer(BaseSerializer):
elif isinstance(obj, AdHocCommand):
res['stdout'] = reverse('api:ad_hoc_command_stdout', args=(obj.pk,))
if obj.workflow_job_id:
res['source_worklflow_job'] = reverse('api:workflow_job_detail', args=(obj.workflow_job_id,))
res['source_workflow_job'] = reverse('api:workflow_job_detail', args=(obj.workflow_job_id,))
return res
def get_summary_fields(self, obj):
summary_fields = super(UnifiedJobSerializer, self).get_summary_fields(obj)
if obj.spawned_by_workflow:
summary_fields['source_worklflow_job'] = {}
summary_fields['source_workflow_job'] = {}
summary_obj = obj.unified_job_node.workflow_job
for field in SUMMARIZABLE_FK_FIELDS['job']:
val = getattr(summary_obj, field, None)
if val is not None:
summary_fields['source_worklflow_job'][field] = val
summary_fields['source_workflow_job'][field] = val
return summary_fields

View File

@ -1847,6 +1847,8 @@ class UnifiedJobAccess(BaseAccess):
qs = qs.prefetch_related(
'unified_job_template',
)
if self.model.spawned_by_workflow:
qs = qs.select_related('unified_job_node__workflow_job')
# WISH - sure would be nice if the following worked, but it does not.
# In the future, as django and polymorphic libs are upgraded, try again.