From 95dd17ed330cd1018a9089618159ab60b54ed503 Mon Sep 17 00:00:00 2001 From: lthievenaz-keeper Date: Wed, 3 Jun 2026 16:42:35 +0100 Subject: [PATCH 1/2] Fix circular KSM import Moved KSM, gateway_helper and router_helper into their respective functions to avoid an issue with circular imports when importing commands, eg: `from keepercommander.commands.utils import WhoamiCommand` `from keepercommander.commands.discoveryrotation import PAMGatewayListCommand` --- keepercommander/commands/record.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keepercommander/commands/record.py b/keepercommander/commands/record.py index a507c0bd6..3acab4581 100644 --- a/keepercommander/commands/record.py +++ b/keepercommander/commands/record.py @@ -27,9 +27,6 @@ from . import record_edit, base, record_totp, record_file_report from .base import Command, GroupCommand, RecordMixin, FolderMixin, fields_to_titles -from .ksm import KSMCommand -from .pam import gateway_helper -from .pam.router_helper import router_get_connected_gateways from .. import api, display, crypto, utils, vault, vault_extensions, subfolder, record_types from ..breachwatch import BreachWatch from ..display import bcolors @@ -1302,6 +1299,8 @@ def display_rotation_info(self, params, r): def _resolve_gateways_by_pattern(params, pattern): + from .pam import gateway_helper + from .pam.router_helper import router_get_connected_gateways """Resolve a `--device` pattern to a list of Gateway controller objects. Matches both: exact controllerUid AND case-insensitive substring on @@ -1372,6 +1371,7 @@ def _find_pam_configs_for_gateway(params, gateway_uid_str): def _build_gateway_info(c, connected_instances, params, is_router_down, is_verbose): + from .ksm import KSMCommand """Build a dict describing one Gateway, suitable for table or JSON rendering.""" gateway_uid_str = utils.base64_url_encode(c.controllerUid) ksm_app_uid_str = utils.base64_url_encode(c.applicationUid) From 87dafa71e5b6517570c95d5764c2ae00beb49d13 Mon Sep 17 00:00:00 2001 From: lthievenaz-keeper Date: Wed, 3 Jun 2026 16:48:55 +0100 Subject: [PATCH 2/2] Changed KSM import in pam.gateway_helper KSMCommand import in pam.gateway_helper doesn't point to the core file where KSMCommand is defined. While this doesn't appear to cause an issue, fixed to avoid any future circular import problems. --- keepercommander/commands/pam/gateway_helper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keepercommander/commands/pam/gateway_helper.py b/keepercommander/commands/pam/gateway_helper.py index ec87111e9..aafed1c6e 100644 --- a/keepercommander/commands/pam/gateway_helper.py +++ b/keepercommander/commands/pam/gateway_helper.py @@ -5,7 +5,7 @@ from keeper_secrets_manager_core.utils import url_safe_str_to_bytes from ... import api, utils -from ...commands.utils import KSMCommand +from ...commands.ksm import KSMCommand from ...loginv3 import CommonHelperMethods from ...params import KeeperParams from ...proto import pam_pb2, enterprise_pb2 @@ -119,4 +119,4 @@ def edit_gateway(params, gateway_uid, gateway_name, node_id): rq.controllerName = gateway_name rq.nodeId = node_id api.communicate_rest(params, rq, 'pam/modify_controller') - \ No newline at end of file +