From 42e9451742f7ea5d9a1ceca8bca19fb78853def3 Mon Sep 17 00:00:00 2001 From: Chris Church Date: Tue, 25 Mar 2014 14:20:37 -0400 Subject: [PATCH] AC-1040 Fix inventory tree view. --- awx/api/serializers.py | 5 +++-- awx/api/views.py | 3 ++- awx/main/access.py | 4 ++-- awx/main/tests/inventory.py | 4 ++++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index ea133a15cf..66d75c08f3 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -72,7 +72,7 @@ SUMMARIZABLE_FK_FIELDS = { 'last_job_host_summary': DEFAULT_SUMMARY_FIELDS + ('failed',), 'last_update': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'license_error'), 'current_update': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'license_error'), - 'inventory_source': ('source', 'last_updated', 'status'), + #'inventory_source': ('source', 'last_updated', 'status'), } class ChoiceField(fields.ChoiceField): @@ -654,7 +654,8 @@ class GroupTreeSerializer(GroupSerializer): if obj is None: return {} children_qs = obj.children.filter(active=True) - children_qs = children_qs.select_related('inventory', 'inventory_source') + children_qs = children_qs.select_related('inventory') + children_qs = children_qs.prefetch_related('inventory_source') return GroupTreeSerializer(children_qs, many=True).data diff --git a/awx/api/views.py b/awx/api/views.py index b01026911a..ecdae5511d 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -1152,7 +1152,8 @@ class InventoryTreeView(RetrieveAPIView): def retrieve(self, request, *args, **kwargs): inventory = self.get_object() groups_qs = inventory.root_groups.filter(active=True) - groups_qs = groups_qs.select_related('inventory', 'inventory_source') + groups_qs = groups_qs.select_related('inventory') + groups_qs = groups_qs.prefetch_related('inventory_source') data = GroupTreeSerializer(groups_qs, many=True).data return Response(data) diff --git a/awx/main/access.py b/awx/main/access.py index 495f9d9af5..9665272de3 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -396,8 +396,8 @@ class GroupAccess(BaseAccess): def get_queryset(self): qs = self.model.objects.filter(active=True).distinct() - qs = qs.select_related('created_by', 'inventory')#, 'inventory_source') - qs = qs.prefetch_related('parents', 'children') + qs = qs.select_related('created_by', 'inventory') + qs = qs.prefetch_related('parents', 'children', 'inventory_source') inventories_qs = self.user.get_queryset(Inventory) return qs.filter(inventory__in=inventories_qs) diff --git a/awx/main/tests/inventory.py b/awx/main/tests/inventory.py index fe3d9f2f59..db0da1664d 100644 --- a/awx/main/tests/inventory.py +++ b/awx/main/tests/inventory.py @@ -807,11 +807,15 @@ class InventoryTest(BaseTest): def test_get_inventory_tree_view(self): # Group A is parent of B, B is parent of C, C is parent of D. g_a = self.inventory_a.groups.create(name='A') + g_a.inventory_source g_b = self.inventory_a.groups.create(name='B') + g_b.inventory_source g_b.parents.add(g_a) g_c = self.inventory_a.groups.create(name='C') + g_c.inventory_source g_c.parents.add(g_b) g_d = self.inventory_a.groups.create(name='D') + g_d.inventory_source g_d.parents.add(g_c) url = reverse('api:inventory_tree_view', args=(self.inventory_a.pk,))