@@ -39,7 +39,7 @@ def __init__(self, id, name, email, roles, groups):
3939 self .name = name
4040 self .email = email
4141 self .roles = roles
42- self .groups = groups if groups else []
42+ self .groups = groups
4343
4444
4545HTTP_PATCH_HEADERS = {
@@ -64,6 +64,7 @@ def __init__(self, config=MSConfig):
6464 self .config = config
6565 self .client = self .get_msal_client ()
6666 self .access_token = self .get_token ()
67+ self .groups_and_users = None
6768
6869 def get_msal_client (self ):
6970 client = msal .ConfidentialClientApplication (
@@ -116,13 +117,7 @@ def to_azure_user(self, item) -> AzureUser:
116117 for (field_name , field_value ) in ROLE_FIELD_VALUES .values ()
117118 if field_name in item
118119 ]
119-
120- groups_and_users = self .get_groups_and_users ()
121- groups = [
122- item ['group_name' ]
123- for item in groups_and_users
124- if id in item ['user_ids' ]
125- ]
120+ groups = self .get_groups_by_user_id (id )
126121 return AzureUser (id , name , email , roles , groups )
127122
128123 def update_role (self , user_id , role_id , is_grant ):
@@ -189,21 +184,26 @@ def get_group_id_by_group_name(self, group_name):
189184
190185 return response .json ()['value' ][0 ]['objectId' ]
191186
187+ def get_groups_by_user_id (self , user_id ):
188+ if self .groups_and_users is None :
189+ self .groups_and_users = self .get_groups_and_users ()
190+ return [
191+ group_name
192+ for (group_name , user_ids ) in self .groups_and_users
193+ if user_id in user_ids
194+ ]
195+
192196 def get_groups_and_users (self ):
193197 endpoint = "{endpoint}/groups?api-version=1.6&$select=displayName,members&$expand=members" .format (
194198 endpoint = self .config .ENDPOINT
195199 )
196200 response = requests .get (endpoint , auth = BearerAuth (self .access_token ))
197201 assert 200 == response .status_code
198-
199- result = []
200- for item in response .json ()['value' ]:
201- new_item = {}
202- new_item ['group_name' ] = item ['displayName' ]
203- user_ids = [member ['objectId' ] for member in item ['members' ]]
204- new_item ['user_ids' ] = user_ids
205- result .append (new_item )
206-
202+ parse_item = lambda item : (
203+ item ['displayName' ],
204+ [member ['objectId' ] for member in item ['members' ]],
205+ )
206+ result = list (map (parse_item , response .json ()['value' ]))
207207 return result
208208
209209 def is_user_in_group (self , user_id , data : dict ):
0 commit comments