diff options
author | Cristián Maureira-Fredes <Cristian.Maureira-Fredes@qt.io> | 2024-02-26 08:26:18 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-02-26 14:08:49 +0000 |
commit | 3082853a0214bf4782e30bc740f1694d5a012542 (patch) | |
tree | 04fbfa5d4f1ba1981343dfa147ca491bde173cbd | |
parent | 6d0c25cbf9f0ce2241f56b3c5a22269db80c60f7 (diff) |
pyi: support class attributes
Pick-to: 6.5 6.2
Fixes: PYSIDE-2263
Change-Id: Ie5e8625d1f711b77c0e14b10a2d1b530dff1b660
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
(cherry picked from commit 8b5b0458efdbaa933c6513cd666d62962beb0edb)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py | 15 | ||||
-rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py | 6 |
2 files changed, 21 insertions, 0 deletions
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 @@ -157,6 +157,12 @@ class Formatter(Writer): 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 self.print(f"{spaces}{sig_name:25}: ClassVar[{class_name}] = ... # {sig_str}") |