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?
This commit is contained in:
lojack5
2023-10-17 18:15:19 -06:00
parent 2c6100cead
commit 7aad3d4c70

View File

@@ -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):