@@ -110,6 +110,19 @@ def get_identity(self):
110110 self .username = username
111111 return self ._identity
112112
113+ async def _has_role (self , role , collab_name , client ):
114+ roles_url = f"{ settings .EBRAINS_IDM_API_URL } /teams/{ collab_name } /{ role } /users"
115+ headers = {"Authorization" : f"Bearer { self .token .credentials } " }
116+ res = await client .get (roles_url , headers = headers ,
117+ timeout = settings .AUTHENTICATION_TIMEOUT )
118+ res .raise_for_status () # do we want to raise an exception, or just log an error?
119+ # for robustness, perhaps just log
120+ for user in res .json ():
121+ if self .username == user ["username" ]:
122+ print (collab_name )
123+ return True
124+ return False
125+
113126 async def get_teams (self ):
114127 if self ._teams is None :
115128 identity = self .get_identity ()
@@ -129,20 +142,14 @@ async def get_teams(self):
129142 )
130143 )
131144 for role in ("administrator" , "editor" ):
132- for collab_name in collab_names .copy ():
133- roles_url = f"{ settings .EBRAINS_IDM_API_URL } /teams/{ collab_name } /{ role } /users"
134145 # todo: get groups as well and check for group membership
135146 async with AsyncClient () as client :
136- res2 = await client .get (roles_url , headers = headers ,
137- timeout = settings .AUTHENTICATION_TIMEOUT )
138- res2 .raise_for_status () # do we want to raise an exception, or just log an error?
139- # for robustness, perhaps just log
140- for user in res2 .json ():
141- if self .username == user ["username" ]:
147+ found = await asyncio .gather (* [self ._has_role (role , collab_name , client ) for collab_name in collab_names ])
148+ for include , collab_name in zip (found , collab_names .copy ()):
149+ if include :
142150 self ._teams .append (f"collab-{ collab_name } -{ role } " )
143151 collab_names .discard (collab_name )
144- print (collab_name )
145- break
152+
146153 # we assume user must have viewer permissions for any collab still in collab_names
147154 for collab_name in collab_names :
148155 self ._teams .append (f"collab-{ collab_name } -viewer" )
0 commit comments