From 68a2b53d612edd9907a4353cc51607dbc16cc0fe Mon Sep 17 00:00:00 2001 From: mesutoezdil Date: Sat, 23 May 2026 18:33:17 +0300 Subject: [PATCH 1/2] fix(python): raise SandboxError instead of FileNotFoundError or KeyError --- python/openshell/sandbox.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/python/openshell/sandbox.py b/python/openshell/sandbox.py index 11cdbd98b..252d568ff 100644 --- a/python/openshell/sandbox.py +++ b/python/openshell/sandbox.py @@ -153,7 +153,12 @@ def from_active_cluster( / cluster_name / "metadata.json" ) - metadata = json.loads(metadata_path.read_text()) + try: + metadata = json.loads(metadata_path.read_text()) + except FileNotFoundError: + raise SandboxError(f"gateway '{cluster_name}' not found") + if "gateway_endpoint" not in metadata: + raise SandboxError(f"gateway '{cluster_name}' metadata missing endpoint") parsed = urlparse(metadata["gateway_endpoint"]) host = parsed.hostname or "127.0.0.1" port = parsed.port or (443 if parsed.scheme == "https" else 80) @@ -613,7 +618,10 @@ def _resolve_active_cluster() -> str: if env_gateway: return env_gateway active_file = _xdg_config_home() / "openshell" / "active_gateway" - value = active_file.read_text().strip() + try: + value = active_file.read_text().strip() + except FileNotFoundError: + raise SandboxError("no active gateway configured") if value == "": raise SandboxError("no active gateway configured") return value From 9cb15f0a69ec9346a728e6e9c02b6abe0208a50e Mon Sep 17 00:00:00 2001 From: mesutoezdil Date: Sat, 23 May 2026 19:29:15 +0300 Subject: [PATCH 2/2] fix(python): suppress exception chaining in SandboxError raises Add `from None` to both `raise SandboxError(...)` calls inside `except FileNotFoundError` blocks to satisfy ruff B904. --- python/openshell/sandbox.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/openshell/sandbox.py b/python/openshell/sandbox.py index 252d568ff..45d9d9be6 100644 --- a/python/openshell/sandbox.py +++ b/python/openshell/sandbox.py @@ -156,7 +156,7 @@ def from_active_cluster( try: metadata = json.loads(metadata_path.read_text()) except FileNotFoundError: - raise SandboxError(f"gateway '{cluster_name}' not found") + raise SandboxError(f"gateway '{cluster_name}' not found") from None if "gateway_endpoint" not in metadata: raise SandboxError(f"gateway '{cluster_name}' metadata missing endpoint") parsed = urlparse(metadata["gateway_endpoint"]) @@ -621,7 +621,7 @@ def _resolve_active_cluster() -> str: try: value = active_file.read_text().strip() except FileNotFoundError: - raise SandboxError("no active gateway configured") + raise SandboxError("no active gateway configured") from None if value == "": raise SandboxError("no active gateway configured") return value