Skip to content

Commit 6395a5f

Browse files
authored
fix: resolve ty no-matching-overload on Sandbox.kill() (#1119)
## Summary - Fixes `ty` type checker reporting `error[no-matching-overload]` when calling `Sandbox.kill()` (and all other methods using the `class_method_variant` pattern) - Single 2-line change: make `class_method_variant` inherit from `Generic[T]` instead of `object` ## Problem The `class_method_variant` descriptor uses `cast(T, self)` to tell type checkers that the decorator preserves the original function's type. Without `Generic[T]`, `T` is only a method-level TypeVar — `ty` doesn't trust the cast and fails to resolve overloads at call sites. `mypy` and `pyright` are more lenient and accept it either way. Affected methods (both `Sandbox` and `AsyncSandbox`): `kill`, `connect`, `set_timeout`, `get_info`, `get_metrics`, `beta_pause`. ## Fix Adding `Generic[T]` makes `T` a class-level type parameter, so `ty` can track the type binding through the descriptor (`class_method_variant[(self, **opts) -> bool]`). The cast then makes sense to all three type checkers. ## Verification Tested with a consumer repro (`sandbox.kill()`) against: | Type Checker | Before | After | |---|---|---| | ty 0.0.15 | `error[no-matching-overload]` | All checks passed | | mypy 1.19.1 | All checks passed | All checks passed | | pyright 1.1.408 | All checks passed | All checks passed | ## Test plan - [x] Verified `ty check` passes on consumer-side repro - [x] Verified `mypy` and `pyright` still pass (no regressions) - [x] Verified Python syntax is valid - [x] No runtime behavior change (`Generic[T]` only affects type-level metadata)
1 parent 575d5bc commit 6395a5f

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

.changeset/sparkly-comics-sin.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@e2b/python-sdk': patch
3+
---
4+
5+
Fix type checker compatibility for class_method_variant descriptor

packages/python-sdk/e2b/sandbox/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
from typing import TypeVar, Any, cast, Optional, Type
1+
from typing import TypeVar, Any, Generic, cast, Optional, Type
22
import functools
33

44
T = TypeVar("T")
55

66

7-
class class_method_variant(object):
7+
class class_method_variant(Generic[T]):
88
def __init__(self, class_method_name):
99
self.class_method_name = class_method_name
1010

0 commit comments

Comments
 (0)