cache view parent obj & add prefetch to sublists

This commit is contained in:
AlanCoding
2017-06-24 20:13:31 -04:00
parent 68ee601359
commit fc59a97e44
2 changed files with 10 additions and 1 deletions

View File

@@ -368,12 +368,16 @@ class ListCreateAPIView(ListAPIView, generics.ListCreateAPIView):
class ParentMixin(object): class ParentMixin(object):
parent_object = None
def get_parent_object(self): def get_parent_object(self):
if self.parent_object is not None:
return self.parent_object
parent_filter = { parent_filter = {
self.lookup_field: self.kwargs.get(self.lookup_field, None), 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): def check_parent_access(self, parent=None):
parent = parent or self.get_parent_object() parent = parent or self.get_parent_object()

View File

@@ -1968,6 +1968,7 @@ class InventoryHostsList(SubListCreateAttachDetachAPIView):
parent_model = Inventory parent_model = Inventory
relationship = 'hosts' relationship = 'hosts'
parent_key = 'inventory' parent_key = 'inventory'
capabilities_prefetch = ['inventory.admin']
class HostGroupsList(ControlledByScmMixin, SubListCreateAttachDetachAPIView): class HostGroupsList(ControlledByScmMixin, SubListCreateAttachDetachAPIView):
@@ -2226,6 +2227,7 @@ class GroupHostsList(ControlledByScmMixin, SubListCreateAttachDetachAPIView):
serializer_class = HostSerializer serializer_class = HostSerializer
parent_model = Group parent_model = Group
relationship = 'hosts' relationship = 'hosts'
capabilities_prefetch = ['inventory.admin']
def update_raw_data(self, data): def update_raw_data(self, data):
data.pop('inventory', None) data.pop('inventory', None)
@@ -2252,6 +2254,7 @@ class GroupAllHostsList(SubListAPIView):
serializer_class = HostSerializer serializer_class = HostSerializer
parent_model = Group parent_model = Group
relationship = 'hosts' relationship = 'hosts'
capabilities_prefetch = ['inventory.admin']
def get_queryset(self): def get_queryset(self):
parent = self.get_parent_object() parent = self.get_parent_object()
@@ -2608,6 +2611,7 @@ class InventorySourceHostsList(SubListAPIView):
parent_model = InventorySource parent_model = InventorySource
relationship = 'hosts' relationship = 'hosts'
new_in_148 = True new_in_148 = True
capabilities_prefetch = ['inventory.admin']
class InventorySourceGroupsList(SubListAPIView): class InventorySourceGroupsList(SubListAPIView):
@@ -3936,6 +3940,7 @@ class JobEventHostsList(SubListAPIView):
parent_model = JobEvent parent_model = JobEvent
relationship = 'hosts' relationship = 'hosts'
view_name = _('Job Event Hosts List') view_name = _('Job Event Hosts List')
capabilities_prefetch = ['inventory.admin']
class BaseJobEventsList(SubListAPIView): class BaseJobEventsList(SubListAPIView):