From 4b6071048dbccb5dad26f8d2a8f20438ce78c02e Mon Sep 17 00:00:00 2001 From: Paresh-0007 Date: Thu, 14 Aug 2025 01:10:35 +0530 Subject: [PATCH 1/4] Fix type annotation errors in virtual_authenticator.py and errorhandler.py (partially addresses #15697) --- py/selenium/webdriver/common/virtual_authenticator.py | 4 +++- py/selenium/webdriver/remote/errorhandler.py | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/py/selenium/webdriver/common/virtual_authenticator.py b/py/selenium/webdriver/common/virtual_authenticator.py index b567a72a35b5c..c9e7eb04a29b8 100644 --- a/py/selenium/webdriver/common/virtual_authenticator.py +++ b/py/selenium/webdriver/common/virtual_authenticator.py @@ -180,7 +180,9 @@ def to_dict(self) -> dict[str, Any]: def from_dict(cls, data: dict[str, Any]) -> "Credential": _id = urlsafe_b64decode(f"{data['credentialId']}==") is_resident_credential = bool(data["isResidentCredential"]) - rp_id = data.get("rpId", None) + if "rpId" not in data: + raise KeyError("Missing required field 'rpId' in credential data.") + rp_id = data["rpId"] private_key = urlsafe_b64decode(f"{data['privateKey']}==") sign_count = int(data["signCount"]) user_handle = urlsafe_b64decode(f"{data['userHandle']}==") if data.get("userHandle", None) else None diff --git a/py/selenium/webdriver/remote/errorhandler.py b/py/selenium/webdriver/remote/errorhandler.py index 9a100e20543f5..e755962c55646 100644 --- a/py/selenium/webdriver/remote/errorhandler.py +++ b/py/selenium/webdriver/remote/errorhandler.py @@ -173,7 +173,10 @@ def check_response(self, response: dict[str, Any]) -> None: message = value.get("value") or value.get("message") if not isinstance(message, str): value = message - message = message.get("message") + if isinstance(message, dict): + message = message.get("message") + else: + message = None else: message = value.get("message", None) except ValueError: @@ -202,7 +205,9 @@ def check_response(self, response: dict[str, Any]) -> None: screen = value["screen"] stacktrace = None - st_value = value.get("stackTrace") or value.get("stacktrace") + st_value = None + if isinstance(value, dict): + st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") From fbe7d2ab9237a40ff50bb1cae9e218c2a228854e Mon Sep 17 00:00:00 2001 From: Paresh-0007 Date: Tue, 19 Aug 2025 00:26:37 +0530 Subject: [PATCH 2/4] [py] Implemented the feedback: simplify rpId handling and message extraction logic --- py/selenium/webdriver/common/virtual_authenticator.py | 2 -- py/selenium/webdriver/remote/errorhandler.py | 8 ++------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/py/selenium/webdriver/common/virtual_authenticator.py b/py/selenium/webdriver/common/virtual_authenticator.py index c9e7eb04a29b8..f6b0f4e926ac0 100644 --- a/py/selenium/webdriver/common/virtual_authenticator.py +++ b/py/selenium/webdriver/common/virtual_authenticator.py @@ -180,8 +180,6 @@ def to_dict(self) -> dict[str, Any]: def from_dict(cls, data: dict[str, Any]) -> "Credential": _id = urlsafe_b64decode(f"{data['credentialId']}==") is_resident_credential = bool(data["isResidentCredential"]) - if "rpId" not in data: - raise KeyError("Missing required field 'rpId' in credential data.") rp_id = data["rpId"] private_key = urlsafe_b64decode(f"{data['privateKey']}==") sign_count = int(data["signCount"]) diff --git a/py/selenium/webdriver/remote/errorhandler.py b/py/selenium/webdriver/remote/errorhandler.py index e755962c55646..fd74631675a12 100644 --- a/py/selenium/webdriver/remote/errorhandler.py +++ b/py/selenium/webdriver/remote/errorhandler.py @@ -173,10 +173,7 @@ def check_response(self, response: dict[str, Any]) -> None: message = value.get("value") or value.get("message") if not isinstance(message, str): value = message - if isinstance(message, dict): - message = message.get("message") - else: - message = None + message = message.get("message") if isinstance(message, dict) else None else: message = value.get("message", None) except ValueError: @@ -206,8 +203,7 @@ def check_response(self, response: dict[str, Any]) -> None: stacktrace = None st_value = None - if isinstance(value, dict): - st_value = value.get("stackTrace") or value.get("stacktrace") + st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str): stacktrace = st_value.split("\n") From cafdc25bde795477cfb4161f4953b58a5ceeb6d8 Mon Sep 17 00:00:00 2001 From: Paresh-0007 Date: Tue, 19 Aug 2025 14:04:51 +0530 Subject: [PATCH 3/4] [py] Apply ruff formatting cause check pass was failing --- py/selenium/webdriver/remote/errorhandler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/selenium/webdriver/remote/errorhandler.py b/py/selenium/webdriver/remote/errorhandler.py index fd74631675a12..b79b927cb083c 100644 --- a/py/selenium/webdriver/remote/errorhandler.py +++ b/py/selenium/webdriver/remote/errorhandler.py @@ -173,7 +173,7 @@ def check_response(self, response: dict[str, Any]) -> None: message = value.get("value") or value.get("message") if not isinstance(message, str): value = message - message = message.get("message") if isinstance(message, dict) else None + message = message.get("message") if isinstance(message, dict) else None else: message = value.get("message", None) except ValueError: From 464cc9f97351e1cf4592f409df09e66a0a9801da Mon Sep 17 00:00:00 2001 From: Paresh-0007 Date: Tue, 19 Aug 2025 19:57:34 +0530 Subject: [PATCH 4/4] [py] Incorporated the changes --- py/selenium/webdriver/remote/errorhandler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/py/selenium/webdriver/remote/errorhandler.py b/py/selenium/webdriver/remote/errorhandler.py index b79b927cb083c..5a2b8f038f9b7 100644 --- a/py/selenium/webdriver/remote/errorhandler.py +++ b/py/selenium/webdriver/remote/errorhandler.py @@ -202,7 +202,6 @@ def check_response(self, response: dict[str, Any]) -> None: screen = value["screen"] stacktrace = None - st_value = None st_value = value.get("stackTrace") or value.get("stacktrace") if st_value: if isinstance(st_value, str):