aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside2/PySide2/support/signature/mapping.py
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2018-07-14 15:10:56 +0200
committerChristian Tismer <tismer@stackless.com>2018-11-24 10:31:02 +0000
commitb92fb6e81be252a2ffae26768434028c5029ddc7 (patch)
tree88338bea02faff38ac986ba9d39c24d17670f795 /sources/pyside2/PySide2/support/signature/mapping.py
parent4413f505ebcc39882ab7052488b37e38300b5219 (diff)
Split The Signature Module After The Project Split
The PySide project has been split into three pieces, including Shiboken. This had far-reaching consequences for the signature project. Shiboken can be run together with PySide or alone, with tests or without. In every configuration, the signature module has to work correctly. During tests, the shiboken binary also hides the shiboken module, and we had to use extra efforts to always guarantee the accessibility of all signature modules. This commit is the preparation for typeerrors implemented with the signature module. It has been split off because the splitting is not directly related, besides these unawaited consequences. I re-added and corrected voidptr_test and simplified the calls. Remark.. We should rename shiboken to Shiboken in all imports. I also simplified initialization. After "from PySide2 import QtCore", now a simple access like "type.__signature__" triggers initialization. Further, I removed all traces of "signature_loader" and allowed loading everything from PySide2.support.signature, again. The loader is now needed internally, only. Also, moved the type patching into FinishSignatureInitialization to support modules with no classes at all. The "testbinding" problem was finally identified as a name clash when the same function is also a signal. A further investigation showed that there exists also a regular PySide method with that problem. The test was extended to all methods, and it maps now all these cases to "{name}.overload". Updated the included typing27.py from https://pypi.org/project/typing/ from version 3.6.2 to version 3.6.6 . Task-number: PYSIDE-749 Change-Id: Ie33b8c6b0df5640212f8991539088593a041a05c Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside2/PySide2/support/signature/mapping.py')
-rw-r--r--sources/pyside2/PySide2/support/signature/mapping.py125
1 files changed, 7 insertions, 118 deletions
diff --git a/sources/pyside2/PySide2/support/signature/mapping.py b/sources/pyside2/PySide2/support/signature/mapping.py
index 23ba6a7f1..15727cb6a 100644
--- a/sources/pyside2/PySide2/support/signature/mapping.py
+++ b/sources/pyside2/PySide2/support/signature/mapping.py
@@ -47,115 +47,23 @@ to the Python representation.
The PySide modules are not loaded in advance, but only after they appear
in sys.modules. This minimizes the loading overhead.
-In principle, we need to re-load the module, when the imports change.
-But it is much easier to do it on demand, when we get an exception.
-See _resolve_value() in singature.py
"""
-import sys
-import struct
import PySide2
-try:
- import sample
-except ImportError:
- pass
-
-try:
- from . import typing
-except ImportError:
- import typing
-
-ellipsis = "..."
-Char = typing.Union[str, int] # how do I model the limitation to 1 char?
-StringList = typing.List[str]
-IntList = typing.List[int]
-IntMatrix = typing.List[IntList]
-Variant = typing.Any
-ModelIndexList = typing.List[int]
-QImageCleanupFunction = typing.Callable
-FloatList = typing.List[float]
-FloatMatrix = typing.List[FloatList]
-# Pair could be more specific, but we loose the info in the generator.
-Pair = typing.Tuple[typing.Any, typing.Any]
-MultiMap = typing.DefaultDict[str, typing.List[str]]
-
-# ulong_max is only 32 bit on windows.
-ulong_max = 2*sys.maxsize+1 if len(struct.pack("L", 1)) != 4 else 0xffffffff
-ushort_max = 0xffff
-
-GL_COLOR_BUFFER_BIT = 0x00004000
-GL_NEAREST = 0x2600
-
-WId = int
-# from 5.9
-GL_TEXTURE_2D = 0x0DE1
-GL_RGBA = 0x1908
-
-class _NotCalled(str):
- """
- Wrap some text with semantics
-
- This class is wrapped around text in order to avoid calling it.
- There are three reasons for this:
-
- - some instances cannot be created since they are abstract,
- - some can only be created after qApp was created,
- - some have an ugly __repr__ with angle brackets in it.
-
- By using derived classes, good looking instances can be created
- which can be used to generate source code or .pyi files. When the
- real object is needed, the wrapper can simply be called.
- """
- def __repr__(self):
- suppress = "PySide2.support.signature.typing."
- text = self[len(suppress):] if self.startswith(suppress) else self
- return "{}({})".format(type(self).__name__, text)
-
- def __call__(self):
- from .mapping import __dict__ as namespace
- text = self if self.endswith(")") else self + "()"
- return eval(text, namespace)
-
-# Some types are abstract. They just show their name.
-class Virtual(_NotCalled):
- pass
-
-# Other types I simply could not find.
-class Missing(_NotCalled):
- pass
-
-class Invalid(_NotCalled):
- pass
+from signature_loader.sbk_mapping import *
-# Helper types
-class Default(_NotCalled):
- pass
+Sbk_Reloader = Reloader
-class Instance(_NotCalled):
- pass
-
-
-class Reloader(object):
- def __init__(self):
- self.sys_module_count = 0
- self.uninitialized = PySide2.__all__[:] + ["sample"]
+class Reloader(Sbk_Reloader):
+ _uninitialized = Sbk_Reloader._uninitialized + PySide2.__all__
+ _prefixes = Sbk_Reloader._prefixes + ["PySide2."]
def update(self):
- if self.sys_module_count == len(sys.modules):
- return
- self.sys_module_count = len(sys.modules)
- g = globals()
- for mod_name in self.uninitialized[:]:
- if "PySide2." + mod_name in sys.modules or mod_name == "sample":
- self.uninitialized.remove(mod_name)
- proc_name = "init_" + mod_name
- if proc_name in g:
- g.update(g[proc_name]())
-
+ Sbk_Reloader.update(self, globals())
update_mapping = Reloader().update
-type_map = {}
+
def init_QtCore():
import PySide2.QtCore
@@ -490,23 +398,4 @@ def init_QtWinExtras():
})
return locals()
-def init_sample():
- type_map.update({
- "sample.int": int,
- "Complex": complex,
- "sample.OddBool": bool,
- "sample.bool": bool,
- "sample.PStr": str,
- "double[]": FloatList,
- "OddBool": bool,
- "PStr": str,
- "sample.char": Char,
- "double[][]": FloatMatrix,
- "int[]": IntList,
- "int[][]": IntMatrix,
- })
- return locals()
-
-# Here was testbinding, actually the source of all evil.
-
# end of file