From dc9b6096556bdf9a9a4cebf51905ddd9a5a0455a Mon Sep 17 00:00:00 2001 From: Wayne Witzel III Date: Fri, 6 May 2016 11:49:24 -0400 Subject: [PATCH 1/3] add owners summary_field for Credential --- awx/api/serializers.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index badfb619ae..c089de70fe 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1634,15 +1634,23 @@ class CredentialSerializer(BaseSerializer): def get_summary_fields(self, obj): summary_dict = super(CredentialSerializer, self).get_summary_fields(obj) + summary_dict['owners'] = [] - qs = Organization.objects.filter(admin_role__children=obj.owner_role) - if qs.count() > 0: - org = qs[0] - summary_dict['organization'] = { - 'id': org.id, - 'name': org.name, - 'description': org.description, - } + for user in obj.owner_role.members.all(): + summary_dict['owners'].append({ + 'id': user.pk, + 'name': user.username, + 'description': ' '.join([user.first_name, user.last_name]), + 'url': reverse('api:user_detail', args=(user.pk,)), + }) + + for parent in obj.owner_role.parents.exclude(object_id__isnull=True).all(): + summary_dict['owners'].append({ + 'id': parent.content_object.pk, + 'name': parent.content_object.name, + 'description': parent.content_object.description, + 'url': parent.content_object.get_absolute_url(), + }) return summary_dict From 963ce418515db523a9d8d62019be5f28d2d9c861 Mon Sep 17 00:00:00 2001 From: Wayne Witzel III Date: Fri, 6 May 2016 15:11:28 -0400 Subject: [PATCH 2/3] fix credential details test --- awx/main/tests/functional/api/test_credential.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/main/tests/functional/api/test_credential.py b/awx/main/tests/functional/api/test_credential.py index fffab6f1a0..c122262bc3 100644 --- a/awx/main/tests/functional/api/test_credential.py +++ b/awx/main/tests/functional/api/test_credential.py @@ -137,8 +137,8 @@ def test_credential_detail(post, get, organization, org_admin): response = get(reverse('api:credential_detail', args=(response.data['id'],)), org_admin) assert response.status_code == 200 summary_fields = response.data['summary_fields'] - assert 'organization' in summary_fields - assert summary_fields['organization']['id'] == organization.id + assert 'owners' in summary_fields + assert summary_fields['owners'][0]['id'] == organization.id related_fields = response.data['related'] assert 'organization' in related_fields From e6210de7b2164a80a411cbc08478c597b978ffbb Mon Sep 17 00:00:00 2001 From: Wayne Witzel III Date: Fri, 6 May 2016 15:21:23 -0400 Subject: [PATCH 3/3] fix related fields to include team and user --- awx/api/serializers.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index c089de70fe..1a919f22d3 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -1627,9 +1627,13 @@ class CredentialSerializer(BaseSerializer): access_list = reverse('api:credential_access_list', args=(obj.pk,)), )) - qs = Organization.objects.filter(admin_role__children=obj.owner_role) - if qs.count() > 0: - res.update(dict(organization=qs[0].get_absolute_url())) + parents = obj.owner_role.parents.exclude(object_id__isnull=True) + if parents.count() > 0: + res.update({parents[0].content_type.name:parents[0].content_object.get_absolute_url()}) + elif obj.owner_role.members.count() > 0: + user = obj.owner_role.members.first() + res.update({'user': reverse('api:user_detail', args=(user.pk,))}) + return res def get_summary_fields(self, obj):