Skip to content

Commit 7565947

Browse files
committed
refactor: add default values in serializers
1 parent 2c6bff7 commit 7565947

2 files changed

Lines changed: 23 additions & 26 deletions

File tree

openedx_authz/rest_api/v1/serializers.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,14 @@ class RemoveUserFromRoleWithScopeSerializer(RoleMixin, ScopeMixin): # pylint: d
5151
class ListUsersInRoleWithScopeSerializer(ScopeMixin): # pylint: disable=abstract-method
5252
"""Serializer for listing users in a role with a scope."""
5353

54-
roles = CommaSeparatedListField(required=False)
55-
sort_by = serializers.ChoiceField(required=False, choices=[(e.value, e.name) for e in SortField])
56-
order = serializers.ChoiceField(required=False, choices=[(e.value, e.name) for e in SortOrder])
57-
search = LowercaseCharField(required=False)
54+
roles = CommaSeparatedListField(required=False, default=[])
55+
sort_by = serializers.ChoiceField(
56+
required=False, choices=[(e.value, e.name) for e in SortField], default=SortField.USERNAME
57+
)
58+
order = serializers.ChoiceField(
59+
required=False, choices=[(e.value, e.name) for e in SortOrder], default=SortOrder.ASC
60+
)
61+
search = LowercaseCharField(required=False, default=None)
5862

5963

6064
class ListRolesWithScopeSerializer(ScopeMixin): # pylint: disable=abstract-method
@@ -77,8 +81,8 @@ class ListRolesWithScopeResponseSerializer(serializers.Serializer): # pylint: d
7781
user_count = serializers.IntegerField()
7882

7983

80-
class RoleAssignmentSerializer(serializers.Serializer): # pylint: disable=abstract-method
81-
"""Serializer for a role assignment."""
84+
class UserRoleAssignmentSerializer(serializers.Serializer): # pylint: disable=abstract-method
85+
"""Serializer for a user role assignment."""
8286

8387
username = serializers.SerializerMethodField()
8488
full_name = serializers.SerializerMethodField()

openedx_authz/rest_api/v1/views.py

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
from rest_framework.views import APIView
1616

1717
from openedx_authz import api
18-
from openedx_authz.rest_api.enums import SortField, SortOrder
1918
from openedx_authz.rest_api.utils import filter_users, get_user_by_username_or_email, sort_users, view_auth_classes
2019
from openedx_authz.rest_api.v1.paginators import AuthZAPIViewPagination
2120
from openedx_authz.rest_api.v1.serializers import (
@@ -26,7 +25,7 @@
2625
PermissionValidationResponseSerializer,
2726
PermissionValidationSerializer,
2827
RemoveUserFromRoleWithScopeSerializer,
29-
RoleAssignmentSerializer,
28+
UserRoleAssignmentSerializer,
3029
)
3130

3231
logger = logging.getLogger(__name__)
@@ -107,22 +106,16 @@ def get(self, request: HttpRequest) -> Response:
107106
"""Retrieve all users with role assignments within a specific scope."""
108107
serializer = ListUsersInRoleWithScopeSerializer(data=request.query_params)
109108
serializer.is_valid(raise_exception=True)
110-
user_role_assignments = api.get_all_user_role_assignments_in_scope(serializer.validated_data["scope"])
109+
query_params = serializer.validated_data
111110

112-
paginator = self.pagination_class()
113-
paginated_assignments = paginator.paginate_queryset(user_role_assignments, request)
114-
115-
response_serializer = RoleAssignmentSerializer(paginated_assignments, many=True)
116-
117-
sort_by = serializer.validated_data.get("sort_by", SortField.USERNAME)
118-
order = serializer.validated_data.get("order", SortOrder.ASC)
119-
search = serializer.validated_data.get("search")
120-
roles = serializer.validated_data.get("roles")
121-
122-
filtered_users = filter_users(response_serializer.data, search, roles)
123-
user_role_assignments = sort_users(filtered_users, sort_by, order)
111+
user_role_assignments = api.get_all_user_role_assignments_in_scope(query_params["scope"])
112+
response_data = UserRoleAssignmentSerializer(user_role_assignments, many=True).data
113+
filtered_users = filter_users(response_data, query_params["search"], query_params["roles"])
114+
user_role_assignments = sort_users(filtered_users, query_params["sort_by"], query_params["order"])
124115

125-
return paginator.get_paginated_response(user_role_assignments)
116+
paginator = self.pagination_class()
117+
paginated_response_data = paginator.paginate_queryset(user_role_assignments, request)
118+
return paginator.get_paginated_response(paginated_response_data)
126119

127120
@apidocs.schema(
128121
body=AddUserToRoleWithScopeSerializer,
@@ -224,7 +217,7 @@ def get(self, request: HttpRequest) -> Response:
224217
response_data = []
225218
for role in roles:
226219
users = api.get_users_for_role(role.external_key)
227-
permissions = [perm.action.external_key for perm in role.permissions] if role.permissions else []
220+
permissions = [perm.action.external_key for perm in role.permissions]
228221
response_data.append(
229222
{
230223
"role": role.external_key,
@@ -233,8 +226,8 @@ def get(self, request: HttpRequest) -> Response:
233226
}
234227
)
235228

229+
serializer = ListRolesWithScopeResponseSerializer(response_data, many=True)
230+
236231
paginator = self.pagination_class()
237232
paginated_response_data = paginator.paginate_queryset(response_data, request)
238-
239-
serializer = ListRolesWithScopeResponseSerializer(paginated_response_data, many=True)
240-
return paginator.get_paginated_response(serializer.data)
233+
return paginator.get_paginated_response(paginated_response_data)

0 commit comments

Comments
 (0)