aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2022-11-02 15:35:53 +0100
committerChristian Tismer <tismer@stackless.com>2022-11-07 16:58:32 +0100
commitf6ed29c7ae8c93c4600226ebd0c2b69f6adabafc (patch)
tree5faca807a2e5bf624d160f8ece9074c12ee0c6c2
parent0cb568acc65e31a050db9121ba9d9e908d5a8855 (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.py25
-rw-r--r--sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/lib/pyi_generator.py10
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"]),
]