From 8181a943cef4e1d904d4aca752bff5e61240863b Mon Sep 17 00:00:00 2001 From: "Michael C. Grant" Date: Sat, 5 Oct 2024 11:54:47 -0500 Subject: [PATCH] eliminate unnecessary api calls for impersonation --- ae5_tools/api.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ae5_tools/api.py b/ae5_tools/api.py index 456184e..7fcb8d3 100644 --- a/ae5_tools/api.py +++ b/ae5_tools/api.py @@ -2127,7 +2127,7 @@ def _post_user(self, users, include_login=False): urec.setdefault("lastLogin", 0) return users - def user_list(self, filter: str | None = None, format: str | None = None, include_login=True): + def user_list(self, filter: str | None = None, format: str | None = None, include_login=True, fast=False): """ Provides User details. @@ -2139,6 +2139,8 @@ def user_list(self, filter: str | None = None, format: str | None = None, includ CLI output type. If none is provided, `text` is the default. include_login: bool = True Used for `_post_user` post-processing of records. + fast: bool = False + Used for impersonation. Skips the group and role queries Returns ------- @@ -2149,6 +2151,11 @@ def user_list(self, filter: str | None = None, format: str | None = None, includ # Get user list users = self._get_paginated("users") + # Fast exit mode + if fast: + users = self._fix_records("user", users, filter) + return self._format_response(users, format=format) + # Get realm roles user map role_maps: dict[str, list] = self._build_realm_role_user_map() @@ -2395,12 +2402,12 @@ def _merge_users_with_realm_groups(self, users: list[dict], group_maps: dict[str user["realm_groups"] = self._get_user_realm_groups(user=user, group_maps=group_maps) return users - def user_info(self, ident, format=None, quiet=False, include_login=True): - response = self._ident_record("user", ident, quiet=False, include_login=include_login) + def user_info(self, ident, format=None, quiet=False, include_login=True, fast=False): + response = self._ident_record("user", ident, quiet=False, include_login=include_login, fast=fast) return self._format_response(response, format) def impersonate(self, user_or_id): - record = self.user_info(user_or_id, include_login=False) + record = self.user_info(user_or_id, fast=True) old_headers = self.session.headers.copy() try: self._post(f'users/{record["id"]}/impersonation')