Skip to content

Commit

Permalink
Improve API perf
Browse files Browse the repository at this point in the history
  • Loading branch information
a-belhadj committed Dec 7, 2023
1 parent 846a362 commit f052ef4
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 6 deletions.
12 changes: 11 additions & 1 deletion profiles/api/serializers/scope_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class Meta:
fields = '__all__'


class ScopeSerializer(AbstractScopeSerializer):
class ScopeSerializerManager(ModelSerializer):
organization = SerializerMethodField()
team = SerializerMethodField()

Expand All @@ -40,6 +40,16 @@ def get_team(self, obj):
return {}


class ScopeSerializerNested(ScopeSerializerManager):
pass


class ScopeSerializer(AbstractScopeSerializer, ScopeSerializerManager):
class Meta:
model = Scope
fields = '__all__'


class AbstractScopeCreateRBACSerializer(ModelSerializer):
roles = MultipleChoiceField(
choices=[],
Expand Down
9 changes: 9 additions & 0 deletions profiles/api/serializers/user_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ class Meta:
'request_notification_filters', 'instance_notification_filters']


class UserSerializeNested(ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'email', 'first_name', 'last_name', 'is_staff', 'is_superuser',
'is_active']
read_only_fields = ['id', 'username', 'email', 'first_name', 'last_name', 'is_staff',
'is_superuser', 'is_active']


class UserSerializer(ModelSerializer):
class Meta:
model = User
Expand Down
6 changes: 3 additions & 3 deletions service_catalog/api/serializers/instance_serializer.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
from rest_framework import serializers

from profiles.api.serializers import UserSerializer, ScopeSerializer
from profiles.api.serializers import UserSerializer, ScopeSerializerNested, UserSerializeNested
from resource_tracker_v2.api.serializers.resource_serializer import ResourceSerializer
from service_catalog.models import Instance, InstanceState


class InstanceReadSerializer(serializers.ModelSerializer):
state = serializers.ChoiceField(choices=InstanceState.choices)
resources = ResourceSerializer(many=True, read_only=True)
requester = UserSerializer(read_only=True)
quota_scope = ScopeSerializer(read_only=True)
requester = UserSerializeNested()
quota_scope = ScopeSerializerNested(read_only=True)

class Meta:
model = Instance
Expand Down
4 changes: 3 additions & 1 deletion service_catalog/api/views/instance_api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ class InstanceList(SquestListCreateAPIView):
filterset_class = InstanceFilter

def get_queryset(self):
return Instance.get_queryset_for_user(self.request.user, 'service_catalog.view_instance')
return Instance.get_queryset_for_user(self.request.user, 'service_catalog.view_instance').prefetch_related(
"requester", "requester__profile", "resources", "requester__groups", "quota_scope", "service",
)

def get_serializer_class(self):
if self.request.method in ["POST"]:
Expand Down
7 changes: 6 additions & 1 deletion service_catalog/api/views/request_api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ class RequestList(SquestListAPIView):
filterset_class = RequestFilter

def get_queryset(self):
return Request.get_queryset_for_user(self.request.user, 'service_catalog.view_request')
return Request.get_queryset_for_user(self.request.user, 'service_catalog.view_request').prefetch_related(
"user", "operation", "instance__requester","instance__requester__profile","instance__resources","instance__requester__groups" ,"instance__quota_scope", "instance__service",
"operation__service", "approval_workflow_state", "approval_workflow_state__approval_workflow",
"approval_workflow_state__current_step",
"approval_workflow_state__current_step__approval_step", "approval_workflow_state__approval_step_states"
)

def get_serializer_class(self):
if self.request.user.has_perm("service_catalog.view_admin_survey"):
Expand Down

0 comments on commit f052ef4

Please sign in to comment.