Skip to content

Commit 2049c50

Browse files
chore(internal): updates to proxy helper (#202)
1 parent 42de23d commit 2049c50

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

src/finch/_utils/_proxy.py

+22-4
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,43 @@ class LazyProxy(Generic[T], ABC):
1818
def __init__(self) -> None:
1919
self.__proxied: T | None = None
2020

21+
# Note: we have to special case proxies that themselves return proxies
22+
# to support using a proxy as a catch-all for any random access, e.g. `proxy.foo.bar.baz`
23+
2124
def __getattr__(self, attr: str) -> object:
22-
return getattr(self.__get_proxied__(), attr)
25+
proxied = self.__get_proxied__()
26+
if isinstance(proxied, LazyProxy):
27+
return proxied # pyright: ignore
28+
return getattr(proxied, attr)
2329

2430
@override
2531
def __repr__(self) -> str:
32+
proxied = self.__get_proxied__()
33+
if isinstance(proxied, LazyProxy):
34+
return proxied.__class__.__name__
2635
return repr(self.__get_proxied__())
2736

2837
@override
2938
def __str__(self) -> str:
30-
return str(self.__get_proxied__())
39+
proxied = self.__get_proxied__()
40+
if isinstance(proxied, LazyProxy):
41+
return proxied.__class__.__name__
42+
return str(proxied)
3143

3244
@override
3345
def __dir__(self) -> Iterable[str]:
34-
return self.__get_proxied__().__dir__()
46+
proxied = self.__get_proxied__()
47+
if isinstance(proxied, LazyProxy):
48+
return []
49+
return proxied.__dir__()
3550

3651
@property # type: ignore
3752
@override
3853
def __class__(self) -> type:
39-
return self.__get_proxied__().__class__
54+
proxied = self.__get_proxied__()
55+
if issubclass(type(proxied), LazyProxy):
56+
return type(proxied)
57+
return proxied.__class__
4058

4159
def __get_proxied__(self) -> T:
4260
if not self.should_cache:

0 commit comments

Comments
 (0)