From 7aad3d4c70e917b94de2594f2338f3de08c24ee7 Mon Sep 17 00:00:00 2001 From: lojack5 <1458329+lojack5@users.noreply.github.com> Date: Tue, 17 Oct 2023 18:15:19 -0600 Subject: [PATCH] Better generated properties By directly referencing their setter and getter methods, and due to the typing work already done for methods, we now have type information attached to properties. There are a few edge cases of setters/getters not having the proper number of arguments for a getter(0) or setter(1), but most cases are handled. The incorrect number of arguments may be missing default arguments from what the extraction code figures out from the C++ code? --- etgtools/pi_generator.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/etgtools/pi_generator.py b/etgtools/pi_generator.py index 66e4c7bd..c0936f46 100644 --- a/etgtools/pi_generator.py +++ b/etgtools/pi_generator.py @@ -509,16 +509,22 @@ class PiWrapperGenerator(generators.WrapperGeneratorBase, FixWxPrefix): def generateProperty(self, prop, stream, indent): assert isinstance(prop, extractors.PropertyDef) - if prop.ignored or piIgnored(prop): - return - stream.write('%s%s = property(None, None)\n' % (indent, prop.name)) + self._generateProperty(prop, stream, indent) def generatePyProperty(self, prop, stream, indent): assert isinstance(prop, extractors.PyPropertyDef) + self._generateProperty(prop, stream, indent) + + def _generateProperty(self, prop: extractors.PyPropertyDef | extractors.PropertyDef, stream, indent: str): if prop.ignored or piIgnored(prop): return - stream.write('%s%s = property(None, None)\n' % (indent, prop.name)) + if prop.setter and prop.getter: + stream.write(f'{indent}{prop.name} = property({prop.getter}, {prop.setter})\n') + elif prop.getter: + stream.write(f'{indent}{prop.name} = property({prop.getter})\n') + elif prop.setter: + stream.write(f'{indent}{prop.name} = property(fset={prop.setter})\n') def generateMethod(self, method, stream, indent, name=None, docstring=None, is_overload=False):