From 2f37eed0dbbdc512f24f697d4618b1aaf6a29575 Mon Sep 17 00:00:00 2001 From: Alex Tavarez Date: Mon, 5 Jan 2026 10:26:17 -0500 Subject: [PATCH] fix: changed the algorithm/approach of the SSH key path removal method for 'RemoteNode' --- anodes.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/anodes.py b/anodes.py index 79e4e41..ef8c771 100644 --- a/anodes.py +++ b/anodes.py @@ -176,7 +176,7 @@ class RemoteNode: self.__keys_selected = False self.__finalized_keys = False self.model: dict | None = None - self.__accumulator = None + self.__key_accumulator: tuple | list | None = [] def set_region(self, name: Literal["us-east"] = "us-east") -> None: self.region = name @@ -359,9 +359,55 @@ class RemoteNode: self.__finalized_keys = self.__keys_selected and self.__authkeys_selected and self.__usedkeys_selected return result - # @TODO rewrite below method - def remove_keys(self, source: Literal["authorized", "used", "available", "selected"] = "available", *selections: int | ExecutedPath | str) -> list[ExecutedPath] | Never: - raise NotImplementedError + # @TODO continue writing below method + def remove_keys(self, target: Literal["authorized", "used", "available", "selected"] = "available", *selections: int | str | ExecutedPath): + keyfiles = self.ssh.keys[target] + + key_accumulator_populated = (slf.__key_accumulator is not None and isinstance(slf.__key_accumulator, (tuple, list)) and len(slf.__key_accumulator) > 0) + for s in selections: + if isinstance(s, int): + if target == "available": + self.__key_accumulator.append(list(keyfiles).pop(s)) + else: + self.__key_accumulator.append(keyfiles.pop(s)) + elif isinstance(s, (str, ExecutedPath)): + if isinstance(s, str): + removed_keyfiles = list(filter(lambda p: str(p) == s, keyfiles)) + else: + removed_keyfiles = list(filter(lambda p: p == s, keyfiles)) + keyfiles = filter(lambda p: str(p) != s, keyfiles) + + self.__key_accumulator += removed_keyfiles + + self.ssh.keys[target] = keyfiles + if target == "available": + selected_diff = list(set(self.ssh.keys["selected"]) - set(self.__key_accumulator)) + self.ssh.keys["selected"] = selected_diff if len(selected_diff) >= 2 else [0, 1] + auth_diff = list(set(self.ssh.keys["authorized"]) - set(self.__key_accumulator)) + self.ssh.keys["authorized"] = auth_diff + used_diff = list(set(self.ssh.keys["used"]) - set(self.__key_accumulator)) + self.ssh.keys["used"] = used_diff + elif target == "selected": + available_diff = list(set(self.ssh.keys["available"]) - set(self.__key_accumulator)) + self.ssh.keys["available"] = available_diff if len(available_diff) >= 2 else [0, 1] + auth_diff = list(set(self.ssh.keys["authorized"]) - set(self.__key_accumulator)) + self.ssh.keys["authorized"] = auth_diff + used_diff = list(set(self.ssh.keys["used"]) - set(self.__key_accumulator)) + self.ssh.keys["used"] = used_diff + elif target == "authorized": + available_diff = list(set(self.ssh.keys["available"]) - set(self.__key_accumulator)) + self.ssh.keys["available"] = available_diff if len(available_diff) >= 2 else [0, 1] + selected_diff = list(set(self.ssh.keys["selected"]) - set(self.__key_accumulator)) + self.ssh.keys["selected"] = selected_diff + used_diff = list(set(self.ssh.keys["used"]) - set(self.__key_accumulator)) + self.ssh.keys["used"] = used_diff + elif target == "used": + available_diff = list(set(self.ssh.keys["available"]) - set(self.__key_accumulator)) + self.ssh.keys["available"] = available_diff if len(available_diff) >= 2 else [0, 1] + selected_diff = list(set(self.ssh.keys["selected"]) - set(self.__key_accumulator)) + self.ssh.keys["selected"] = selected_diff + auth_diff = list(set(self.ssh.keys["used"]) - set(self.__key_accumulator)) + self.ssh.keys["authorized"] = auth_diff def itemize(self): model: dict | vpsSchema = dict()