From fc59a97e44f28173ad23ac76053598bb765878a8 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Sat, 24 Jun 2017 20:13:31 -0400 Subject: [PATCH] cache view parent obj & add prefetch to sublists --- awx/api/generics.py | 6 +++++- awx/api/views.py | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/awx/api/generics.py b/awx/api/generics.py index 2345867e83..a6ec9b7939 100644 --- a/awx/api/generics.py +++ b/awx/api/generics.py @@ -368,12 +368,16 @@ class ListCreateAPIView(ListAPIView, generics.ListCreateAPIView): class ParentMixin(object): + parent_object = None def get_parent_object(self): + if self.parent_object is not None: + return self.parent_object parent_filter = { self.lookup_field: self.kwargs.get(self.lookup_field, None), } - return get_object_or_404(self.parent_model, **parent_filter) + self.parent_object = get_object_or_404(self.parent_model, **parent_filter) + return self.parent_object def check_parent_access(self, parent=None): parent = parent or self.get_parent_object() diff --git a/awx/api/views.py b/awx/api/views.py index a63f762297..ed6becca69 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -1968,6 +1968,7 @@ class InventoryHostsList(SubListCreateAttachDetachAPIView): parent_model = Inventory relationship = 'hosts' parent_key = 'inventory' + capabilities_prefetch = ['inventory.admin'] class HostGroupsList(ControlledByScmMixin, SubListCreateAttachDetachAPIView): @@ -2226,6 +2227,7 @@ class GroupHostsList(ControlledByScmMixin, SubListCreateAttachDetachAPIView): serializer_class = HostSerializer parent_model = Group relationship = 'hosts' + capabilities_prefetch = ['inventory.admin'] def update_raw_data(self, data): data.pop('inventory', None) @@ -2252,6 +2254,7 @@ class GroupAllHostsList(SubListAPIView): serializer_class = HostSerializer parent_model = Group relationship = 'hosts' + capabilities_prefetch = ['inventory.admin'] def get_queryset(self): parent = self.get_parent_object() @@ -2608,6 +2611,7 @@ class InventorySourceHostsList(SubListAPIView): parent_model = InventorySource relationship = 'hosts' new_in_148 = True + capabilities_prefetch = ['inventory.admin'] class InventorySourceGroupsList(SubListAPIView): @@ -3936,6 +3940,7 @@ class JobEventHostsList(SubListAPIView): parent_model = JobEvent relationship = 'hosts' view_name = _('Job Event Hosts List') + capabilities_prefetch = ['inventory.admin'] class BaseJobEventsList(SubListAPIView):