From 3082853a0214bf4782e30bc740f1694d5a012542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=C3=A1n=20Maureira-Fredes?= Date: Mon, 26 Feb 2024 08:26:18 +0100 Subject: pyi: support class attributes Pick-to: 6.5 6.2 Fixes: PYSIDE-2263 Change-Id: Ie5e8625d1f711b77c0e14b10a2d1b530dff1b660 Reviewed-by: Friedemann Kleint Reviewed-by: Shyamnath Premnadh (cherry picked from commit 8b5b0458efdbaa933c6513cd666d62962beb0edb) Reviewed-by: Qt Cherry-pick Bot --- .../files.dir/shibokensupport/signature/lib/enum_sig.py | 15 +++++++++++++++ .../shibokensupport/signature/lib/pyi_generator.py | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py index d07beb881..8c9b0eeba 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py @@ -125,6 +125,7 @@ class ExactEnumerator(object): enums = [] properties = [] signals = [] + attributes = {} for thing_name, thing in class_members: if signal_check(thing): @@ -147,6 +148,13 @@ class ExactEnumerator(object): enums.append((thing_name, type(thing).__qualname__, thing)) elif isinstance(thing, property): properties.append((thing_name, thing)) + # Support attributes that have PySide types as values, + # but we skip the 'staticMetaObject' that needs + # to be defined at a QObject level. + elif "PySide" in str(type(thing)) and "QMetaObject" not in str(type(thing)): + if class_name not in attributes: + attributes[class_name] = {} + attributes[class_name][thing_name] = thing if thing_name in self.collision_candidates: self.collision_track.add(thing_name) @@ -183,6 +191,13 @@ class ExactEnumerator(object): sig_str = str(signal) with self.fmt.signal(sig_class_name, signal_name, sig_str): pass + if hasattr(self.fmt, "attribute"): + if len(attributes): + self.section() + for class_name, attrs in attributes.items(): + for attr_name, attr_value in attrs.items(): + with self.fmt.attribute(attr_name, attr_value): + pass if len(subclasses): self.section() for subclass_name, subclass in subclasses: diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py index c44346687..29e773d7a 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py @@ -156,6 +156,12 @@ class Formatter(Writer): self.print(f"{spaces}{enum_name:25}: {class_name} = ... # {hexval}") yield + @contextmanager + def attribute(self, attr_name, attr_value): + spaces = indent * self.level + self.print(f"{spaces}{attr_name:25}: ... # type: {type(attr_value).__qualname__}") + yield + @contextmanager def signal(self, class_name, sig_name, sig_str): spaces = indent * self.level -- cgit v1.2.3