11import logging
2+ from typing import TypedDict
23
34from django .apps import apps
45from django .core .exceptions import ObjectDoesNotExist
@@ -260,6 +261,16 @@ class RoleMetadataSerializer(serializers.Serializer):
260261 allowed_permissions = serializers .DictField (help_text = _ ('A List of permissions allowed for a role definition, given its content type.' ))
261262
262263
264+ class RoleDefinitionSummary (TypedDict ):
265+ name : str
266+ url : str
267+
268+
269+ class AssignmentSummary (TypedDict ):
270+ type : str
271+ role_definition : RoleDefinitionSummary
272+
273+
263274class AccessListMixin :
264275
265276 def _get_related (self , obj ) -> dict [str , str ]:
@@ -286,11 +297,11 @@ def _get_related(self, obj) -> dict[str, str]:
286297 return related_fields
287298
288299 @staticmethod
289- def summarize_role_definition (role_definition ):
300+ def summarize_role_definition (role_definition ) -> RoleDefinitionSummary :
290301 return {"name" : role_definition .name , "url" : get_url_for_object (role_definition )}
291302
292303 @staticmethod
293- def summarize_assignment_list (assignment_qs , obj_ct ):
304+ def summarize_assignment_list (assignment_qs , obj_ct ) -> list [ AssignmentSummary ] :
294305 assignment_list = []
295306 team_ct = DABContentType .objects .get_for_model (get_team_model ())
296307 for assignment in assignment_qs .distinct ():
@@ -306,7 +317,7 @@ def summarize_assignment_list(assignment_qs, obj_ct):
306317
307318 return assignment_list
308319
309- def get_object_role_assignments (self , actor ):
320+ def get_object_role_assignments (self , actor ) -> list [ AssignmentSummary ] :
310321 obj = self .context .get ("related_object" )
311322 permission = self .context .get ("permission" )
312323 ct = self .context .get ("content_type" )
@@ -325,26 +336,26 @@ def get_url(self, obj) -> str:
325336class UserAccessListMixin (AccessListMixin , serializers .ModelSerializer ):
326337 "controller uses auth.User model so this needs to be as compatible as possible, thus ModelSerializer"
327338
328- object_role_assignments = serializers .SerializerMethodField ()
339+ object_role_assignments : list [ AssignmentSummary ] = serializers .SerializerMethodField ()
329340 url = serializers .SerializerMethodField ()
330341 related = serializers .SerializerMethodField ('_get_related' )
331342 _expected_fields = ['id' , 'url' , 'related' , 'username' , 'is_superuser' , 'first_name' , 'last_name' , 'object_role_assignments' ]
332343
333344
334345class TeamAccessListMixin (AccessListMixin , AbstractCommonModelSerializer ):
335- object_role_assignments = serializers .SerializerMethodField ()
346+ object_role_assignments : list [ AssignmentSummary ] = serializers .SerializerMethodField ()
336347 url = serializers .SerializerMethodField ()
337348 related = serializers .SerializerMethodField ('_get_related' )
338349 _expected_fields = ['id' , 'url' , 'related' , 'name' , 'organization' , 'object_role_assignments' ]
339350
340351
341352class UserAccessAssignmentSerializer (RoleUserAssignmentSerializer ):
342- intermediary_roles = serializers .SerializerMethodField ()
353+ intermediary_roles : list [ AssignmentSummary ] = serializers .SerializerMethodField ()
343354
344355 class Meta (RoleUserAssignmentSerializer .Meta ):
345356 fields = RoleUserAssignmentSerializer .Meta .fields + ['intermediary_roles' ]
346357
347- def get_intermediary_roles (self , assignment ) :
358+ def get_intermediary_roles (self , assignment : RoleUserAssignment ) -> list [ AssignmentSummary ] :
348359 team_ct = DABContentType .objects .get_for_model (get_team_model ())
349360
350361 permission = self .context .get ("permission" )
0 commit comments