diff --git a/src/wrapt/proxies.py b/src/wrapt/proxies.py index 21716403..ba6cc7e9 100644 --- a/src/wrapt/proxies.py +++ b/src/wrapt/proxies.py @@ -70,7 +70,7 @@ def __wrapper_await__(self): return (yield from self.__wrapped__.__await__()) -def __wrapper_get__(self, instance, owner): +def __wrapper_get__(self, instance, owner=None): return self.__wrapped__.__get__(instance, owner) diff --git a/tests/core/test_auto_object_proxy.py b/tests/core/test_auto_object_proxy.py index 1b1c10bf..19f21345 100644 --- a/tests/core/test_auto_object_proxy.py +++ b/tests/core/test_auto_object_proxy.py @@ -169,6 +169,24 @@ def test_fspath_not_pathlike(self): self.assertRaises(TypeError, os.fspath, proxy) self.assertFalse(isinstance(proxy, os.PathLike)) + def test_descriptor_optional_owner(self): + def method(instance): + return instance + + instance = object() + + for descriptor in (method, property(method)): + with self.subTest(descriptor=descriptor): + proxy = wrapt.AutoObjectProxy(descriptor) + + self.assertEqual(proxy.__get__(instance), descriptor.__get__(instance)) + self.assertEqual( + proxy.__get__(instance, None), descriptor.__get__(instance, None) + ) + self.assertEqual( + proxy.__get__(None, object), descriptor.__get__(None, object) + ) + def test_descriptor(self): class Descriptor: def __init__(self, value): diff --git a/tests/core/test_lazy_object_proxy.py b/tests/core/test_lazy_object_proxy.py index 742f1c6e..4f1d08d6 100644 --- a/tests/core/test_lazy_object_proxy.py +++ b/tests/core/test_lazy_object_proxy.py @@ -22,6 +22,26 @@ def factory(): self.assertEqual(int(proxy), 42) self.assertEqual(status["created"], 1) + def test_descriptor_optional_owner(self): + def method(instance): + return instance + + instance = object() + + for descriptor in (method, property(method)): + with self.subTest(descriptor=descriptor): + proxy = wrapt.LazyObjectProxy( + lambda: descriptor, interface=type(descriptor) + ) + + self.assertEqual(proxy.__get__(instance), descriptor.__get__(instance)) + self.assertEqual( + proxy.__get__(instance, None), descriptor.__get__(instance, None) + ) + self.assertEqual( + proxy.__get__(None, object), descriptor.__get__(None, object) + ) + def test_lazy_import(self): if "sched" in sys.modules: del sys.modules["sched"]