diff options
author | Christian Tismer <tismer@stackless.com> | 2022-11-02 15:35:53 +0100 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2022-11-07 16:58:32 +0100 |
commit | f6ed29c7ae8c93c4600226ebd0c2b69f6adabafc (patch) | |
tree | 5faca807a2e5bf624d160f8ece9074c12ee0c6c2 | |
parent | 0cb568acc65e31a050db9121ba9d9e908d5a8855 (diff) |
signals: Generate signals into pyi files as attributes
This patch adds signals as normal attributes to pyi files.
It may be replaced by a better version, later:
It is also possible to create them as functions which document
the signature of the creating signal call. This only makes sense
when the signature support in C++ is extended for signals.
Change-Id: Id25cc93e905ea697c23b27ec078e0ff997814624
Fixes: PYSIDE-1603
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py | 25 | ||||
-rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py | 10 |
2 files changed, 29 insertions, 6 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 5bb678e3e..947537a0f 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 @@ -38,6 +38,10 @@ if hasattr(sys, "pypy_version_info"): _normal_functions += (type(get_sig),) +def signal_check(thing): + return thing and type(thing) in (Signal, SignalInstance) + + class ExactEnumerator(object): """ ExactEnumerator enumerates all signatures in a module as they are. @@ -48,13 +52,13 @@ class ExactEnumerator(object): """ def __init__(self, formatter, result_type=dict): - global EnumMeta + global EnumMeta, Signal, SignalInstance try: # Lazy import - from PySide6.QtCore import Qt + from PySide6.QtCore import Qt, Signal, SignalInstance EnumMeta = type(Qt.Key) except ImportError: - EnumMeta = None + EnumMeta = Signal = SignalInstance = None self.fmt = formatter self.result_type = result_type @@ -120,9 +124,12 @@ class ExactEnumerator(object): functions = [] enums = [] properties = [] + signals = [] for thing_name, thing in class_members: - if inspect.isclass(thing): + if signal_check(thing): + signals.append((thing_name, thing)) + elif inspect.isclass(thing): subclass_name = ".".join((class_name, thing_name)) subclasses.append((subclass_name, thing)) elif inspect.isroutine(thing): @@ -161,6 +168,16 @@ class ExactEnumerator(object): with self.fmt.enum(enum_class_name, enum_name, value.value if new_enum else value): pass + if hasattr(self.fmt, "signal"): + # this is an optional feature + if len(signals): + self.section() + for signal_name, signal in signals: + sig_class = type(signal) + sig_class_name = f"{sig_class.__qualname__}" + sig_str = str(signal) + with self.fmt.signal(sig_class_name, signal_name, sig_str): + 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 292b83fae..bbca35fbd 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 @@ -151,6 +151,12 @@ class Formatter(Writer): self.print(f"{spaces}{enum_name:25}: {class_name} = ... # {hexval}") 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}") + yield + def find_imports(text): return [imp for imp in PySide6.__all__ if f"PySide6.{imp}." in text] @@ -160,8 +166,8 @@ FROM_IMPORTS = [ (None, ["builtins"]), (None, ["os"]), (None, ["enum"] if sys.pyside63_option_python_enum else []), - ("typing", typing.__all__), - ("PySide6.QtCore", ["PyClassProperty"]), + ("typing", sorted(typing.__all__)), + ("PySide6.QtCore", ["PyClassProperty", "Signal", "SignalInstance"]), ("shiboken6", ["Shiboken"]), ] |