Skip to content

Commit 59633d4

Browse files
committed
feat: TT-156 cache groups_and_users response for perfomance
1 parent ae854de commit 59633d4

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

utils/azure_users.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4545
HTTP_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

Comments
 (0)