From 29a125b448d5080e580118298d2fe63ae101a293 Mon Sep 17 00:00:00 2001 From: epolon Date: Thu, 29 Aug 2024 07:48:48 +0300 Subject: [PATCH 1/2] mid work --- .../@jsii/python-runtime/src/jsii/_runtime.py | 2 +- .../@jsii/python-runtime/tests/test_python.py | 31 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/@jsii/python-runtime/src/jsii/_runtime.py b/packages/@jsii/python-runtime/src/jsii/_runtime.py index 35c3385300..35e698edc1 100644 --- a/packages/@jsii/python-runtime/src/jsii/_runtime.py +++ b/packages/@jsii/python-runtime/src/jsii/_runtime.py @@ -168,7 +168,7 @@ def implements(*interfaces: Type[Any]) -> Callable[[T], T]: def deco(cls): cls.__jsii_type__ = getattr(cls, "__jsii_type__", None) cls.__jsii_ifaces__ = getattr(cls, "__jsii_ifaces__", []) + list(interfaces) - cls.__jsii_proxy_class__ = lambda: getattr(cls, "__jsii_proxy_class__", None) + cls.__jsii_proxy_class__ = getattr(cls, "__jsii_proxy_class__", lambda : None) # https://github.com/agronholm/typeguard/issues/479 cls.__protocol_attrs__ = getattr(cls, "__protocol_attrs__", []) diff --git a/packages/@jsii/python-runtime/tests/test_python.py b/packages/@jsii/python-runtime/tests/test_python.py index 1aaa087ae6..365bf3ee1b 100644 --- a/packages/@jsii/python-runtime/tests/test_python.py +++ b/packages/@jsii/python-runtime/tests/test_python.py @@ -27,6 +27,36 @@ def test_inheritance_maintained(self): assert base_names == ["DerivedStruct", "MyFirstStruct"] +class TestImplementsInterface: + + def test_jsii_proxy_class_defaults_to_none(self) -> None: + @jsii.implements(IBaz) + class MyBaz(): + pass + + klass = getattr(MyBaz, "__jsii_proxy_class__")() + assert klass == None + + def test_jsii_proxy_class_preserves_user_defined_attribute(self) -> None: + + class _MyBazProxy(): + def baz_method(self) -> str: + return "_MyBazProxy" + + @jsii.implements(IBaz) + class MyBaz(): + + @staticmethod + def __jsii_proxy_class__(): + return _MyBazProxy + + def baz_method(self) -> str: + return "MyBaz" + + klass = getattr(MyBaz, "__jsii_proxy_class__")() + instance = klass() + assert instance.baz_method() == "_MyBazProxy" + def test_implements_interface(self) -> None: """Checks that jsii-generated classes correctly implement the relevant jsii-generated interfaces.""" @@ -42,7 +72,6 @@ def baz_interface_func(b: IBaz) -> None: baz = Baz() baz_interface_func(baz) - def test_overrides_method_with_kwargs() -> None: class Overridden(OverrideMe): def implement_me( From 5200d06a289b144733015cb1e1580c213b16b245 Mon Sep 17 00:00:00 2001 From: epolon Date: Thu, 29 Aug 2024 08:43:30 +0300 Subject: [PATCH 2/2] mid work --- packages/@jsii/python-runtime/src/jsii/_runtime.py | 2 +- packages/@jsii/python-runtime/tests/test_python.py | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/@jsii/python-runtime/src/jsii/_runtime.py b/packages/@jsii/python-runtime/src/jsii/_runtime.py index 35e698edc1..7d7cb1b469 100644 --- a/packages/@jsii/python-runtime/src/jsii/_runtime.py +++ b/packages/@jsii/python-runtime/src/jsii/_runtime.py @@ -168,7 +168,7 @@ def implements(*interfaces: Type[Any]) -> Callable[[T], T]: def deco(cls): cls.__jsii_type__ = getattr(cls, "__jsii_type__", None) cls.__jsii_ifaces__ = getattr(cls, "__jsii_ifaces__", []) + list(interfaces) - cls.__jsii_proxy_class__ = getattr(cls, "__jsii_proxy_class__", lambda : None) + cls.__jsii_proxy_class__ = getattr(cls, "__jsii_proxy_class__", lambda: None) # https://github.com/agronholm/typeguard/issues/479 cls.__protocol_attrs__ = getattr(cls, "__protocol_attrs__", []) diff --git a/packages/@jsii/python-runtime/tests/test_python.py b/packages/@jsii/python-runtime/tests/test_python.py index 365bf3ee1b..991185f2d0 100644 --- a/packages/@jsii/python-runtime/tests/test_python.py +++ b/packages/@jsii/python-runtime/tests/test_python.py @@ -27,11 +27,12 @@ def test_inheritance_maintained(self): assert base_names == ["DerivedStruct", "MyFirstStruct"] + class TestImplementsInterface: def test_jsii_proxy_class_defaults_to_none(self) -> None: @jsii.implements(IBaz) - class MyBaz(): + class MyBaz: pass klass = getattr(MyBaz, "__jsii_proxy_class__")() @@ -39,12 +40,12 @@ class MyBaz(): def test_jsii_proxy_class_preserves_user_defined_attribute(self) -> None: - class _MyBazProxy(): + class _MyBazProxy: def baz_method(self) -> str: return "_MyBazProxy" - + @jsii.implements(IBaz) - class MyBaz(): + class MyBaz: @staticmethod def __jsii_proxy_class__(): @@ -52,7 +53,7 @@ def __jsii_proxy_class__(): def baz_method(self) -> str: return "MyBaz" - + klass = getattr(MyBaz, "__jsii_proxy_class__")() instance = klass() assert instance.baz_method() == "_MyBazProxy" @@ -72,6 +73,7 @@ def baz_interface_func(b: IBaz) -> None: baz = Baz() baz_interface_func(baz) + def test_overrides_method_with_kwargs() -> None: class Overridden(OverrideMe): def implement_me(