@@ -34,6 +34,21 @@ class ActionMixin(serializers.Serializer): # pylint: disable=abstract-method
3434 action = serializers .CharField (max_length = 255 )
3535
3636
37+ class OrderMixin (serializers .Serializer ): # pylint: disable=abstract-method
38+ """Mixin providing ordering field functionality."""
39+
40+ sort_by = serializers .ChoiceField (
41+ required = False ,
42+ choices = [(e .value , e .name ) for e in SortField ],
43+ default = SortField .USERNAME ,
44+ )
45+ order = serializers .ChoiceField (
46+ required = False ,
47+ choices = [(e .value , e .name ) for e in SortOrder ],
48+ default = SortOrder .ASC ,
49+ )
50+
51+
3752class PermissionValidationSerializer (ActionMixin , ScopeMixin ): # pylint: disable=abstract-method
3853 """Serializer for permission validation request."""
3954
@@ -111,20 +126,10 @@ class RemoveUsersFromRoleWithScopeSerializer(
111126 users = CommaSeparatedListField (allow_blank = False )
112127
113128
114- class ListUsersInRoleWithScopeSerializer (ScopeMixin ): # pylint: disable=abstract-method
129+ class ListUsersInRoleWithScopeSerializer (ScopeMixin , OrderMixin ): # pylint: disable=abstract-method
115130 """Serializer for listing users in a role with a scope."""
116131
117132 roles = CommaSeparatedListField (required = False , default = [])
118- sort_by = serializers .ChoiceField (
119- required = False ,
120- choices = [(e .value , e .name ) for e in SortField ],
121- default = SortField .USERNAME ,
122- )
123- order = serializers .ChoiceField (
124- required = False ,
125- choices = [(e .value , e .name ) for e in SortOrder ],
126- default = SortOrder .ASC ,
127- )
128133 search = LowercaseCharField (required = False , default = None )
129134
130135
@@ -210,7 +215,7 @@ def get_roles(self, obj: api.RoleAssignmentData) -> list[str]:
210215 return [role .external_key for role in obj .roles ]
211216
212217
213- class ListTeamMembersSerializer (serializers . Serializer ): # pylint: disable=abstract-method
218+ class ListTeamMembersSerializer (OrderMixin ): # pylint: disable=abstract-method
214219 """
215220 Serializer for listing team members.
216221 This serializer is TeamMembersAPIView, which is used in the Admin Console.
@@ -219,16 +224,6 @@ class ListTeamMembersSerializer(serializers.Serializer): # pylint: disable=abst
219224
220225 scopes = CaseSensitiveCommaSeparatedListField (required = False , default = [])
221226 orgs = CaseSensitiveCommaSeparatedListField (required = False , default = [])
222- sort_by = serializers .ChoiceField (
223- required = False ,
224- choices = [(e .value , e .name ) for e in SortField ],
225- default = SortField .USERNAME ,
226- )
227- order = serializers .ChoiceField (
228- required = False ,
229- choices = [(e .value , e .name ) for e in SortOrder ],
230- default = SortOrder .ASC ,
231- )
232227 search = LowercaseCharField (required = False , default = None )
233228
234229
@@ -261,21 +256,17 @@ def get_assignation_count(self, obj: UserAssignments) -> int:
261256 return len (obj .assignments )
262257
263258
264- class ListTeamMemberAssignmentsSerializer (serializers . Serializer ): # pylint: disable=abstract-method
259+ class ListTeamMemberAssignmentsSerializer (OrderMixin ): # pylint: disable=abstract-method
265260 """Serializer for listing team member assignments."""
266261
267262 orgs = CaseSensitiveCommaSeparatedListField (required = False , default = [])
268263 roles = CaseSensitiveCommaSeparatedListField (required = False , default = [])
264+ # Overriding sort_by from OrderMixin due to different choices and default value
269265 sort_by = serializers .ChoiceField (
270266 required = False ,
271267 choices = [(e .value , e .name ) for e in AssignmentSortField ],
272268 default = AssignmentSortField .ROLE ,
273269 )
274- order = serializers .ChoiceField (
275- required = False ,
276- choices = [(e .value , e .name ) for e in SortOrder ],
277- default = SortOrder .ASC ,
278- )
279270
280271
281272class TeamMemberAssignmentSerializer (serializers .Serializer ): # pylint: disable=abstract-method
0 commit comments