aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature')
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/PSF-3.7.0.txt43
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/__init__.py42
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/errorhandler.py148
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/importhandler.py103
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/layout.py282
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/__init__.py40
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py219
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/tool.py154
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/loader.py221
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py645
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/parser.py458
-rw-r--r--sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/qt_attribution.json13
12 files changed, 0 insertions, 2368 deletions
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/PSF-3.7.0.txt b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/PSF-3.7.0.txt
deleted file mode 100644
index be42010dd..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/PSF-3.7.0.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-PSF LICENSE AGREEMENT FOR PYTHON 3.7.0
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and
- the Individual or Organization ("Licensee") accessing and otherwise using Python
- 3.7.0 software in source or binary form and its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, PSF hereby
- grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
- analyze, test, perform and/or display publicly, prepare derivative works,
- distribute, and otherwise use Python 3.7.0 alone or in any derivative
- version, provided, however, that PSF's License Agreement and PSF's notice of
- copyright, i.e., "Copyright © 2001-2018 Python Software Foundation; All Rights
- Reserved" are retained in Python 3.7.0 alone or in any derivative version
- prepared by Licensee.
-
-3. In the event Licensee prepares a derivative work that is based on or
- incorporates Python 3.7.0 or any part thereof, and wants to make the
- derivative work available to others as provided herein, then Licensee hereby
- agrees to include in any such work a brief summary of the changes made to Python
- 3.7.0.
-
-4. PSF is making Python 3.7.0 available to Licensee on an "AS IS" basis.
- PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF
- EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
- WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
- USE OF PYTHON 3.7.0 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 3.7.0
- FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
- MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 3.7.0, OR ANY DERIVATIVE
- THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material breach of
- its terms and conditions.
-
-7. Nothing in this License Agreement shall be deemed to create any relationship
- of agency, partnership, or joint venture between PSF and Licensee. This License
- Agreement does not grant permission to use PSF trademarks or trade name in a
- trademark sense to endorse or promote products or services of Licensee, or any
- third party.
-
-8. By copying, installing or otherwise using Python 3.7.0, Licensee agrees
- to be bound by the terms and conditions of this License Agreement.
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/__init__.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/__init__.py
deleted file mode 100644
index ee541d0ea..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/__init__.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-__all__ = "get_signature layout mapping lib".split()
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/errorhandler.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/errorhandler.py
deleted file mode 100644
index 4dbed077d..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/errorhandler.py
+++ /dev/null
@@ -1,148 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-errorhandler.py
-
-This module handles the TypeError messages which were previously
-produced by the generated C code.
-
-This version is at least consistent with the signatures, which
-are created by the same module.
-
-Experimentally, we are trying to guess those errors which are
-just the wrong number of elements in an iterator.
-At the moment, it is unclear whether the information given is
-enough to produce a useful ValueError.
-
-This matter will be improved in a later version.
-"""
-
-import sys
-
-from shibokensupport.signature import inspect
-from shibokensupport.signature import get_signature
-from shibokensupport.signature.mapping import update_mapping, namespace
-from textwrap import dedent
-
-
-def qt_isinstance(inst, the_type):
- if the_type == float:
- return isinstance(inst, int) or isinstance(int, float)
- try:
- return isinstance(inst, the_type)
- except TypeError as e:
- print("FIXME", e)
- return False
-
-
-def matched_type(args, sigs):
- for sig in sigs:
- params = list(sig.parameters.values())
- if len(args) > len(params):
- continue
- if len(args) < len(params):
- k = len(args)
- if params[k].default is params[k].empty:
- # this is a necessary parameter, so it fails.
- continue
- ok = True
- for arg, param in zip(args, params):
- ann = param.annotation
- if qt_isinstance(arg, ann):
- continue
- ok = False
- if ok:
- return sig
- return None
-
-
-def seterror_argument(args, func_name):
- update_mapping()
- func = eval(func_name, namespace)
- sigs = get_signature(func, "typeerror")
- if type(sigs) != list:
- sigs = [sigs]
- if type(args) != tuple:
- args = (args,)
- # temp!
- found = matched_type(args, sigs)
- if found:
- msg = dedent("""
- '{func_name}' called with wrong argument values:
- {func_name}{args}
- Found signature:
- {func_name}{found}
- """.format(**locals())).strip()
- return ValueError, msg
- type_str = ", ".join(type(arg).__name__ for arg in args)
- msg = dedent("""
- '{func_name}' called with wrong argument types:
- {func_name}({type_str})
- Supported signatures:
- """.format(**locals())).strip()
- for sig in sigs:
- msg += "\n {func_name}{sig}".format(**locals())
- # We don't raise the error here, to avoid the loader in the traceback.
- return TypeError, msg
-
-def check_string_type(s):
- if sys.version_info[0] == 3:
- return isinstance(s, str)
- else:
- return isinstance(s, (str, unicode))
-
-def make_helptext(func):
- existing_doc = func.__doc__
- sigs = get_signature(func)
- if not sigs:
- return existing_doc
- if type(sigs) != list:
- sigs = [sigs]
- try:
- func_name = func.__name__
- except AttribureError:
- func_name = func.__func__.__name__
- sigtext = "\n".join(func_name + str(sig) for sig in sigs)
- msg = sigtext + "\n\n" + existing_doc if check_string_type(existing_doc) else sigtext
- return msg
-
-# end of file
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/importhandler.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/importhandler.py
deleted file mode 100644
index 7af43bea0..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/importhandler.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-importhandler.py
-
-This module handles special actions after the import of PySide modules.
-The reason for this was the wish to replace some deprecated functions
-by a Python implementation that gives a warning.
-
-It provides a framework to safely call functions outside of files.dir,
-because the implementation of deprecated functions should be visible
-to the users (in the hope they don't use it any longer <wink>).
-
-As a first approach, the function finish_import redirects to
-PySide2/support/deprecated.py . There can come other extensions as well.
-"""
-
-try:
- from PySide2.support import deprecated
- have_deprecated = True
-except ImportError:
- have_deprecated = False
-
-
-# called by loader.py from signature.cpp
-def finish_import(module):
- if have_deprecated and module.__name__.startswith("PySide2."):
- try:
- name = "fix_for_" + module.__name__.split(".")[1]
- func = getattr(deprecated, name, None)
- if func:
- func(module)
- except Exception as e:
- name = e.__class__.__qualname__
- print(72 * "*")
- print("Error in deprecated.py, ignored:")
- print(" {name}: {e}".format(**locals()))
-
-"""
-A note for people who might think this could be written in pure Python:
-
-Sure, by an explicit import of the modules to patch, this is no problem.
-But in the general case, a module should only be imported on user
-request and not because we want to patch it. So I started over.
-
-I then tried to do it on demand by redirection of the __import__ function.
-Things worked quite nicely as it seemed, but at second view this solution
-was much less appealing.
-
-Reason:
-If someone executes as the first PySide statement
-
- from PySide2 import QtGui
-
-then this import is already running. We can see the other imports like the
-diverse initializations and QtCore, because it is triggered by import of
-QtGui. But the QtGui import can not be seen at all!
-
-With a lot of effort, sys.setprofile() and stack inspection with the inspect
-module, it is *perhaps* possible to solve that. I tried for a day and then
-gave up, since the solution is anyway not too nice when __import__ must
-be overridden.
-"""
-#eof
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/layout.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/layout.py
deleted file mode 100644
index 384273d92..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/layout.py
+++ /dev/null
@@ -1,282 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-layout.py
-
-The signature module now has the capability to configure
-differently formatted versions of signatures. The default
-layout is known from the "__signature__" attribute.
-
-The function "get_signature(ob, modifier=None)" produces the same
-signatures by default. By passing different modifiers, you
-can select different layouts.
-
-This module configures the different layouts which can be used.
-It also implements them in this file. The configurations are
-used literally as strings like "signature", "existence", etc.
-"""
-
-from textwrap import dedent
-from shibokensupport.signature import inspect, typing
-from shibokensupport.signature.mapping import ellipsis
-from shibokensupport.signature.lib.tool import SimpleNamespace
-
-
-class SignatureLayout(SimpleNamespace):
- """
- Configure a signature.
-
- The layout of signatures can have different layouts which are
- controlled by keyword arguments:
-
- definition=True Determines if self will generated.
- defaults=True
- ellipsis=False Replaces defaults by "...".
- return_annotation=True
- parameter_names=True False removes names before ":".
- """
- allowed_keys = SimpleNamespace(definition=True,
- defaults=True,
- ellipsis=False,
- return_annotation=True,
- parameter_names=True)
- allowed_values = True, False
-
- def __init__(self, **kwds):
- args = SimpleNamespace(**self.allowed_keys.__dict__)
- args.__dict__.update(kwds)
- self.__dict__.update(args.__dict__)
- err_keys = list(set(self.__dict__) - set(self.allowed_keys.__dict__))
- if err_keys:
- self._attributeerror(err_keys)
- err_values = list(set(self.__dict__.values()) - set(self.allowed_values))
- if err_values:
- self._valueerror(err_values)
-
- def __setattr__(self, key, value):
- if key not in self.allowed_keys.__dict__:
- self._attributeerror([key])
- if value not in self.allowed_values:
- self._valueerror([value])
- self.__dict__[key] = value
-
- def _attributeerror(self, err_keys):
- err_keys = ", ".join(err_keys)
- allowed_keys = ", ".join(self.allowed_keys.__dict__.keys())
- raise AttributeError(dedent("""\
- Not allowed: '{err_keys}'.
- The only allowed keywords are '{allowed_keys}'.
- """.format(**locals())))
-
- def _valueerror(self, err_values):
- err_values = ", ".join(map(str, err_values))
- allowed_values = ", ".join(map(str, self.allowed_values))
- raise ValueError(dedent("""\
- Not allowed: '{err_values}'.
- The only allowed values are '{allowed_values}'.
- """.format(**locals())))
-
-# The following names are used literally in this module.
-# This way, we avoid the dict hashing problem.
-signature = SignatureLayout()
-
-existence = SignatureLayout(definition=False,
- defaults=False,
- return_annotation=False,
- parameter_names=False)
-
-hintingstub = SignatureLayout(ellipsis=True)
-
-typeerror = SignatureLayout(definition=False,
- return_annotation=False,
- parameter_names=False)
-
-
-def define_nameless_parameter():
- """
- Create Nameless Parameters
-
- A nameless parameter has a reduced string representation.
- This is done by cloning the parameter type and overwriting its
- __str__ method. The inner structure is still a valid parameter.
- """
- def __str__(self):
- # for Python 2, we must change self to be an instance of P
- klass = self.__class__
- self.__class__ = P
- txt = P.__str__(self)
- self.__class__ = klass
- txt = txt[txt.index(":") + 1:].strip() if ":" in txt else txt
- return txt
-
- P = inspect.Parameter
- newname = "NamelessParameter"
- bases = P.__bases__
- body = dict(P.__dict__) # get rid of mappingproxy
- if "__slots__" in body:
- # __slots__ would create duplicates
- for name in body["__slots__"]:
- del body[name]
- body["__str__"] = __str__
- return type(newname, bases, body)
-
-
-NamelessParameter = define_nameless_parameter()
-
-"""
-Note on the "Optional" feature:
-
-When an annotation has a default value that is None, then the
-type has to be wrapped into "typing.Optional".
-
-Note that only the None value creates an Optional expression,
-because the None leaves the domain of the variable.
-Defaults like integer values are ignored: They stay in the domain.
-
-That information would be lost when we use the "..." convention.
-
-Note that the typing module has the remarkable expansion
-
- Optional[T] is Variant[T, NoneType]
-
-We want to avoid that when generating the .pyi file.
-This is done by a regex in generate_pyi.py .
-The following would work in Python 3, but this is a version-dependent
-hack that also won't work in Python 2 and would be _very_ complex.
-"""
-# import sys
-# if sys.version_info[0] == 3:
-# class hugo(list):pass
-# typing._normalize_alias["hugo"] = "Optional"
-# Optional = typing._alias(hugo, typing.T, inst=False)
-# else:
-# Optional = typing.Optional
-
-
-def make_signature_nameless(signature):
- """
- Make a Signature Nameless
-
- We use an existing signature and change the type of its parameters.
- The signature looks different, but is totally intact.
- """
- for key in signature.parameters.keys():
- signature.parameters[key].__class__ = NamelessParameter
-
-
-_POSITIONAL_ONLY = inspect._POSITIONAL_ONLY
-_POSITIONAL_OR_KEYWORD = inspect._POSITIONAL_OR_KEYWORD
-_VAR_POSITIONAL = inspect._VAR_POSITIONAL
-_KEYWORD_ONLY = inspect._KEYWORD_ONLY
-_VAR_KEYWORD = inspect._VAR_KEYWORD
-_empty = inspect._empty
-
-def create_signature(props, key):
- if not props:
- # empty signatures string
- return
- if isinstance(props["multi"], list):
- # multi sig: call recursively
- return list(create_signature(elem, key)
- for elem in props["multi"])
- if type(key) is tuple:
- sig_kind, modifier = key
- else:
- sig_kind, modifier = key, "signature"
-
- layout = globals()[modifier] # lookup of the modifier in this module
- if not isinstance(layout, SignatureLayout):
- raise SystemError("Modifiers must be names of a SignatureLayout "
- "instance")
-
- # this is the basic layout of a signature
- varnames = props["varnames"]
- if layout.definition:
- if sig_kind == "function":
- pass
- elif sig_kind == "method":
- varnames = ("self",) + varnames
- elif sig_kind == "staticmethod":
- pass
- elif sig_kind == "classmethod":
- varnames = ("klass",) + varnames
- else:
- raise SystemError("Methods must be function, method, staticmethod"
- " or classmethod")
- # calculate the modifications
- defaults = props["defaults"][:]
- if not layout.defaults:
- defaults = ()
- annotations = props["annotations"].copy()
- if not layout.return_annotation and "return" in annotations:
- del annotations["return"]
-
- # Build a signature.
- kind = inspect._POSITIONAL_OR_KEYWORD
- params = []
- for idx, name in enumerate(varnames):
- if name.startswith("**"):
- kind = _VAR_KEYWORD
- elif name.startswith("*"):
- kind = _VAR_POSITIONAL
- ann = annotations.get(name, _empty)
- name = name.lstrip("*")
- defpos = idx - len(varnames) + len(defaults)
- default = defaults[defpos] if defpos >= 0 else _empty
- if default is None:
- ann = typing.Optional[ann]
- if default is not _empty and layout.ellipsis:
- default = ellipsis
- param = inspect.Parameter(name, kind, annotation=ann, default=default)
- params.append(param)
- if kind == _VAR_POSITIONAL:
- kind = _KEYWORD_ONLY
- sig = inspect.Signature(params,
- return_annotation=annotations.get('return', _empty),
- __validate_parameters__=False)
-
- # the special case of nameless parameters
- if not layout.parameter_names:
- make_signature_nameless(sig)
- return sig
-
-# end of file
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/__init__.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/__init__.py
deleted file mode 100644
index 2d640cb89..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/__init__.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2018 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-# this file intentionally left blank
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py
deleted file mode 100644
index fa4d5e77c..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/enum_sig.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-enum_sig.py
-
-Enumerate all signatures of a class.
-
-This module separates the enumeration process from the formatting.
-It is not easy to adhere to this protocol, but in the end, it paid off
-by producing a lot of clarity.
-"""
-
-import sys
-from shibokensupport.signature import inspect
-from shibokensupport.signature import get_signature
-
-
-class ExactEnumerator(object):
- """
- ExactEnumerator enumerates all signatures in a module as they are.
-
- This class is used for generating complete listings of all signatures.
- An appropriate formatter should be supplied, if printable output
- is desired.
- """
-
- def __init__(self, formatter, result_type=dict):
- global EnumType
- try:
- # Lazy import
- from PySide2.QtCore import Qt
- EnumType = type(Qt.Key)
- except ImportError:
- EnumType = None
-
- self.fmt = formatter
- self.result_type = result_type
- self.fmt.level = 0
- self.fmt.after_enum = self.after_enum
- self._after_enum = False
-
- def after_enum(self):
- ret = self._after_enum
- self._after_enum = False
-
- def module(self, mod_name):
- __import__(mod_name)
- self.fmt.mod_name = mod_name
- with self.fmt.module(mod_name):
- module = sys.modules[mod_name]
- members = inspect.getmembers(module, inspect.isclass)
- functions = inspect.getmembers(module, inspect.isroutine)
- ret = self.result_type()
- self.fmt.class_name = None
- for class_name, klass in members:
- ret.update(self.klass(class_name, klass))
- if isinstance(klass, EnumType):
- raise SystemError("implement enum instances at module level")
- for func_name, func in functions:
- ret.update(self.function(func_name, func))
- return ret
-
- def klass(self, class_name, klass):
- ret = self.result_type()
- if "<" in class_name:
- # This is happening in QtQuick for some reason:
- ## class QSharedPointer<QQuickItemGrabResult >:
- # We simply skip over this class.
- return ret
- bases_list = []
- for base in klass.__bases__:
- name = base.__name__
- if name not in ("object", "type"):
- name = base.__module__ + "." + name
- bases_list.append(name)
- class_str = "{}({})".format(class_name, ", ".join(bases_list))
- # class_members = inspect.getmembers(klass)
- # gives us also the inherited things.
- class_members = sorted(list(klass.__dict__.items()))
- subclasses = []
- functions = []
- enums = []
-
- for thing_name, thing in class_members:
- if inspect.isclass(thing):
- subclass_name = ".".join((class_name, thing_name))
- subclasses.append((subclass_name, thing))
- elif inspect.isroutine(thing):
- func_name = thing_name.split(".")[0] # remove ".overload"
- signature = getattr(thing, "__signature__", None)
- if signature is not None:
- functions.append((func_name, thing))
- elif type(type(thing)) is EnumType:
- enums.append((thing_name, thing))
- init_signature = getattr(klass, "__signature__", None)
- enums.sort(key=lambda tup: tup[1]) # sort by enum value
- self.fmt.have_body = bool(subclasses or functions or enums or init_signature)
-
- with self.fmt.klass(class_name, class_str):
- self.fmt.level += 1
- self.fmt.class_name = class_name
- if hasattr(self.fmt, "enum"):
- # this is an optional feature
- for enum_name, value in enums:
- with self.fmt.enum(class_name, enum_name, int(value)):
- pass
- for subclass_name, subclass in subclasses:
- if klass == subclass:
- # this is a side effect of the typing module for Python 2.7
- # via the "._gorg" property, which we can safely ignore.
- print("Warning: {class_name} points to itself via {subclass_name}, skipped!"
- .format(**locals()))
- continue
- ret.update(self.klass(subclass_name, subclass))
- self.fmt.class_name = class_name
- ret.update(self.function("__init__", klass))
- for func_name, func in functions:
- func_kind = get_signature(func, "__func_kind__")
- modifier = func_kind if func_kind in (
- "staticmethod", "classmethod") else None
- ret.update(self.function(func_name, func, modifier))
- self.fmt.level -= 1
- return ret
-
- def function(self, func_name, func, modifier=None):
- self.fmt.level += 1
- ret = self.result_type()
- signature = func.__signature__
- if signature is not None:
- with self.fmt.function(func_name, signature, modifier) as key:
- ret[key] = signature
- self.fmt.level -= 1
- return ret
-
-
-def stringify(signature):
- if isinstance(signature, list):
- # remove duplicates which still sometimes occour:
- ret = set(stringify(sig) for sig in signature)
- return sorted(ret) if len(ret) > 1 else list(ret)[0]
- return tuple(str(pv) for pv in signature.parameters.values())
-
-
-class SimplifyingEnumerator(ExactEnumerator):
- """
- SimplifyingEnumerator enumerates all signatures in a module filtered.
-
- There are no default values, no variable
- names and no self parameter. Only types are present after simplification.
- The functions 'next' resp. '__next__' are removed
- to make the output identical for Python 2 and 3.
- An appropriate formatter should be supplied, if printable output
- is desired.
- """
-
- def function(self, func_name, func, modifier=None):
- ret = self.result_type()
- signature = get_signature(func, 'existence')
- sig = stringify(signature) if signature is not None else None
- if sig is not None and func_name not in ("next", "__next__", "__div__"):
- with self.fmt.function(func_name, sig) as key:
- ret[key] = sig
- return ret
-
-class HintingEnumerator(ExactEnumerator):
- """
- HintingEnumerator enumerates all signatures in a module slightly changed.
-
- This class is used for generating complete listings of all signatures for
- hinting stubs. Only default values are replaced by "...".
- """
-
- def function(self, func_name, func, modifier=None):
- ret = self.result_type()
- signature = get_signature(func, 'hintingstub')
- if signature is not None:
- with self.fmt.function(func_name, signature, modifier) as key:
- ret[key] = signature
- return ret
-
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/tool.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/tool.py
deleted file mode 100644
index 24e75e42c..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/lib/tool.py
+++ /dev/null
@@ -1,154 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-tool.py
-
-Some useful stuff, see below.
-On the function with_metaclass see the answer from Martijn Pieters on
-https://stackoverflow.com/questions/18513821/python-metaclass-understanding-the-with-metaclass
-"""
-
-from textwrap import dedent
-
-
-class SimpleNamespace(object):
- # From types.rst, because the builtin is implemented in Python 3, only.
- def __init__(self, **kwargs):
- self.__dict__.update(kwargs)
-
- def __repr__(self):
- keys = sorted(self.__dict__)
- items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
- return "{}({})".format(type(self).__name__, ", ".join(items))
-
- def __eq__(self, other):
- return self.__dict__ == other.__dict__
-
-try:
- from types import SimpleNamespace
-except ImportError:
- pass
-
-
-def build_brace_pattern(level, separators=""):
- """
- Build a brace pattern upto a given depth
-
- The brace pattern parses any pattern with round, square, curly, or angle
- brackets. Inside those brackets, any characters are allowed.
-
- The structure is quite simple and is recursively repeated as needed.
- When separators are given, the match stops at that separator.
-
- Reason to use this instead of some Python function:
- The resulting regex is _very_ fast!
-
- A faster replacement would be written in C, but this solution is
- sufficient when the nesting level is not too large.
-
- Because of the recursive nature of the pattern, the size grows by a factor
- of 4 at every level, as does the creation time. Up to a level of 6, this
- is below 10 ms.
-
- There are other regex engines available which allow recursive patterns,
- avoiding this problem completely. It might be considered to switch to
- such an engine if the external module is not a problem.
- """
- def escape(str):
- return "".join("\\" + c for c in str)
-
- ro, rc = round = "()"
- so, sc = square = "[]"
- co, cc = curly = "CD" # we insert "{}", later...
- ao, ac = angle = "<>"
- qu, bs = '"', "\\"
- all = round + square + curly + angle
- __ = " "
- ro, rc, so, sc, co, cc, ao, ac, separators, qu, bs, all = map(
- escape, (ro, rc, so, sc, co, cc, ao, ac, separators, qu, bs, all))
-
- no_brace_sep_q = r"[^{all}{separators}{qu}{bs}]".format(**locals())
- no_quote = r"(?: [^{qu}{bs}] | {bs}. )*".format(**locals())
- pattern = dedent(r"""
- (
- (?: {__} {no_brace_sep_q}
- | {qu} {no_quote} {qu}
- | {ro} {replacer} {rc}
- | {so} {replacer} {sc}
- | {co} {replacer} {cc}
- | {ao} {replacer} {ac}
- )+
- )
- """)
- no_braces_q = "[^{all}{qu}{bs}]*".format(**locals())
- repeated = dedent(r"""
- {indent} (?: {__} {no_braces_q}
- {indent} | {qu} {no_quote} {qu}
- {indent} | {ro} {replacer} {rc}
- {indent} | {so} {replacer} {sc}
- {indent} | {co} {replacer} {cc}
- {indent} | {ao} {replacer} {ac}
- {indent} )*
- """)
- for idx in range(level):
- pattern = pattern.format(replacer = repeated if idx < level-1 else no_braces_q,
- indent = idx * " ", **locals())
- return pattern.replace("C", "{").replace("D", "}")
-
-
-# Copied from the six module:
-def with_metaclass(meta, *bases):
- """Create a base class with a metaclass."""
- # This requires a bit of explanation: the basic idea is to make a dummy
- # metaclass for one level of class instantiation that replaces itself with
- # the actual metaclass.
- class metaclass(type):
-
- def __new__(cls, name, this_bases, d):
- return meta(name, bases, d)
-
- @classmethod
- def __prepare__(cls, name, this_bases):
- return meta.__prepare__(name, bases)
- return type.__new__(metaclass, 'temporary_class', (), {})
-
-# eof
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/loader.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/loader.py
deleted file mode 100644
index 1efc6fde5..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/loader.py
+++ /dev/null
@@ -1,221 +0,0 @@
-# This Python file uses the following encoding: utf-8
-# It has been edited by fix-complaints.py .
-
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-loader.py
-
-The loader has to load the signature module completely at startup,
-to make sure that the functions are available when needed.
-This is meanwhile necessary to make the '__doc__' attribute work correctly.
-
-It does not mean that everything is initialized in advance. Only the modules
-are loaded completely after 'import PySide2'.
-
-This version uses both a normal directory, but has also an embedded ZIP file
-as a fallback solution. The ZIP file is generated by 'embedding_generator.py'
-and embedded into 'signature.cpp' as "embed/signature.inc".
-
-Meanwhile, the ZIP file grew so much, that MSVC had problems
-with it's 64k string limit, so we had to break the string up.
-See 'zipped_string_sequence' in signature.cpp.
-"""
-
-import sys
-import os
-import traceback
-import types
-
-# On Python 2, we only have ImportError, which is way too coarse.
-# When problems occour, please use Python 3, because it has the finer
-# ModuleNotFoundError.
-
-try:
- ModuleNotFoundError
-except NameError:
- ModuleNotFoundError = ImportError
-
-def _qualname(x):
- return getattr(x, "__qualname__", x.__name__)
-
-# patching inspect's formatting to keep the word "typing":
-def formatannotation(annotation, base_module=None):
- # if getattr(annotation, '__module__', None) == 'typing':
- # return repr(annotation).replace('typing.', '')
- if isinstance(annotation, type):
- name = _qualname(annotation)
- if annotation.__module__ in ('builtins', base_module):
- return name
- return annotation.__module__ + '.' + name
- return repr(annotation)
-
-# Note also that during the tests we have a different encoding that would
-# break the Python license decorated files without an encoding line.
-
-# name used in signature.cpp
-def pyside_type_init(type_key, sig_strings):
- return parser.pyside_type_init(type_key, sig_strings)
-
-# name used in signature.cpp
-def create_signature(props, key):
- return layout.create_signature(props, key)
-
-# name used in signature.cpp
-def seterror_argument(args, func_name):
- return errorhandler.seterror_argument(args, func_name)
-
-# name used in signature.cpp
-def make_helptext(func):
- return errorhandler.make_helptext(func)
-
-# name used in signature.cpp
-def finish_import(module):
- return importhandler.finish_import(module)
-
-
-import signature_bootstrap
-from shibokensupport import signature
-signature.get_signature = signature_bootstrap.get_signature
-del signature_bootstrap
-
-def _get_modname(mod):
- return mod.__spec__.name if getattr(mod, "__spec__", None) else mod.__name__
-
-def _set_modname(mod, name):
- if getattr(mod, "__spec__", None):
- mod.__spec__.name = name
- else:
- mod.__name__ = name
-
-
-def put_into_package(package, module, override=None):
- # take the last component of the module name
- name = (override if override else _get_modname(module)).rsplit(".", 1)[-1]
- # allow access as {package}.typing
- if package:
- setattr(package, name, module)
- # put into sys.modules as a package to allow all import options
- fullname = "{}.{}".format(_get_modname(package), name) if package else name
- _set_modname(module, fullname)
- # publish new dotted name in sys.modules
- sys.modules[fullname] = module
-
-
-# Debug: used to inspect what each step loads
-def list_modules(message):
- ext_modules = {key:value for (key, value) in sys.modules.items()
- if hasattr(value, "__file__")}
- print("SYS.MODULES", message, len(sys.modules), len(ext_modules))
- for (name, module) in sorted(ext_modules.items()):
- print(" {:23}".format(name), repr(module)[:70])
-
-
-orig_typing = True
-if sys.version_info >= (3,):
- import typing
- import inspect
- inspect.formatannotation = formatannotation
-else:
- tp_name = "typing"
- if tp_name not in sys.modules:
- orig_typing = False
- from shibokensupport import typing27 as typing
- sys.modules[tp_name] = typing
- typing.__name__ = tp_name
- else:
- import typing
- import inspect
- namespace = inspect.__dict__
- from shibokensupport import backport_inspect as inspect
- _doc = inspect.__doc__
- inspect.__dict__.update(namespace)
- inspect.__doc__ += _doc
- # force inspect to find all attributes. See "heuristic" in pydoc.py!
- inspect.__all__ = list(x for x in dir(inspect) if not x.startswith("_"))
-
-# Fix the module names in typing if possible. This is important since
-# the typing names should be I/O compatible, so that typing.Dict
-# shows itself as "typing.Dict".
-for name, obj in typing.__dict__.items():
- if hasattr(obj, "__module__"):
- try:
- obj.__module__ = "typing"
- except (TypeError, AttributeError):
- pass
-
-import shibokensupport
-put_into_package(shibokensupport.signature, typing, "typing")
-put_into_package(shibokensupport.signature, inspect, "inspect")
-
-
-def move_into_pyside_package():
- import PySide2
- try:
- import PySide2.support
- except ModuleNotFoundError:
- PySide2.support = types.ModuleType("PySide2.support")
- put_into_package(PySide2.support, signature)
- put_into_package(PySide2.support.signature, mapping)
- put_into_package(PySide2.support.signature, errorhandler)
- put_into_package(PySide2.support.signature, layout)
- put_into_package(PySide2.support.signature, lib)
- put_into_package(PySide2.support.signature, parser)
- put_into_package(PySide2.support.signature, importhandler)
- put_into_package(PySide2.support.signature.lib, enum_sig)
-
- put_into_package(None if orig_typing else PySide2.support.signature, typing)
- put_into_package(PySide2.support.signature, inspect)
-
-from shibokensupport.signature import mapping
-from shibokensupport.signature import errorhandler
-from shibokensupport.signature import layout
-from shibokensupport.signature import lib
-from shibokensupport.signature import parser
-from shibokensupport.signature import importhandler
-from shibokensupport.signature.lib import enum_sig
-
-if "PySide2" in sys.modules:
- # We publish everything under "PySide2.support.signature", again.
- move_into_pyside_package()
-
-# end of file
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py
deleted file mode 100644
index 0571b11bd..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py
+++ /dev/null
@@ -1,645 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-"""
-mapping.py
-
-This module has the mapping from the pyside C-modules view of signatures
-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.
-"""
-
-import sys
-import struct
-import os
-
-from shibokensupport.signature import typing
-from shibokensupport.signature.typing import TypeVar, Generic
-from shibokensupport.signature.lib.tool import with_metaclass
-
-class ellipsis(object):
- def __repr__(self):
- return "..."
-
-ellipsis = ellipsis()
-Point = typing.Tuple[float, float]
-Variant = typing.Any
-ModelIndexList = typing.List[int]
-QImageCleanupFunction = typing.Callable
-
-# unfortunately, typing.Optional[t] expands to typing.Union[t, NoneType]
-# Until we can force it to create Optional[t] again, we use this.
-NoneType = type(None)
-
-_S = TypeVar("_S")
-
-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):
- return "{}({})".format(type(self).__name__, self)
-
- def __call__(self):
- from shibokensupport.signature.mapping import __dict__ as namespace
- text = self if self.endswith(")") else self + "()"
- return eval(text, namespace)
-
-USE_PEP563 = False
-# Note: we cannot know if this feature has been imported.
-# Otherwise it would be "sys.version_info[:2] >= (3, 7)".
-# We *can* eventually inspect sys.modules and look if
-# the calling module has this future statement set,
-# but should we do that?
-
-
-# Some types are abstract. They just show their name.
-class Virtual(_NotCalled):
- pass
-
-# Other types I simply could not find.
-class Missing(_NotCalled):
- # The string must be quoted, because the object does not exist.
- def __repr__(self):
- if USE_PEP563:
- return _NotCalled.__repr__(self)
- return '{}("{}")'.format(type(self).__name__, self)
-
-
-class Invalid(_NotCalled):
- pass
-
-# Helper types
-class Default(_NotCalled):
- pass
-
-
-class Instance(_NotCalled):
- pass
-
-# Parameterized primitive variables
-class _Parameterized(object):
- def __init__(self, type):
- self.type = type
- self.__name__ = self.__class__.__name__
-
- def __repr__(self):
- return "{}({})".format(
- type(self).__name__, self.type.__name__)
-
-# Mark the primitive variables to be moved into the result.
-class ResultVariable(_Parameterized):
- pass
-
-# Mark the primitive variables to become Sequence, Iterable or List
-# (decided in the parser).
-class ArrayLikeVariable(_Parameterized):
- pass
-
-StringList = ArrayLikeVariable(str)
-
-
-class Reloader(object):
- """
- Reloder class
-
- This is a singleton class which provides the update function for the
- shiboken and PySide classes.
- """
- def __init__(self):
- self.sys_module_count = 0
-
- @staticmethod
- def module_valid(mod):
- if getattr(mod, "__file__", None) and not os.path.isdir(mod.__file__):
- ending = os.path.splitext(mod.__file__)[-1]
- return ending not in (".py", ".pyc", ".pyo", ".pyi")
- return False
-
- def update(self):
- """
- 'update' imports all binary modules which are already in sys.modules.
- The reason is to follow all user imports without introducing new ones.
- This function is called by pyside_type_init to adapt imports
- when the number of imported modules has changed.
- """
- if self.sys_module_count == len(sys.modules):
- return
- self.sys_module_count = len(sys.modules)
- g = globals()
- # PYSIDE-1009: Try to recognize unknown modules in errorhandler.py
- candidates = list(mod_name for mod_name in sys.modules.copy()
- if self.module_valid(sys.modules[mod_name]))
- for mod_name in candidates:
- # 'top' is PySide2 when we do 'import PySide.QtCore'
- # or Shiboken if we do 'import Shiboken'.
- # Convince yourself that these two lines below have the same
- # global effect as "import Shiboken" or "import PySide2.QtCore".
- top = __import__(mod_name)
- g[top.__name__] = top
- proc_name = "init_" + mod_name.replace(".", "_")
- if proc_name in g:
- # Modules are in place, we can update the type_map.
- g.update(g.pop(proc_name)())
-
-
-def check_module(mod):
- # During a build, there exist the modules already as directories,
- # although the '*.so' was not yet created. This causes a problem
- # in Python 3, because it accepts folders as namespace modules
- # without enforcing an '__init__.py'.
- if not Reloader.module_valid(mod):
- mod_name = mod.__name__
- raise ImportError("Module '{mod_name}' is not a binary module!"
- .format(**locals()))
-
-update_mapping = Reloader().update
-type_map = {}
-namespace = globals() # our module's __dict__
-
-type_map.update({
- "...": ellipsis,
- "bool": bool,
- "char": int,
- "char*": str,
- "char*const": str,
- "double": float,
- "float": float,
- "int": int,
- "List": ArrayLikeVariable,
- "long": int,
- "PyCallable": typing.Callable,
- "PyObject": object,
- "PySequence": typing.Iterable, # important for numpy
- "PyTypeObject": type,
- "QChar": str,
- "QHash": typing.Dict,
- "qint16": int,
- "qint32": int,
- "qint64": int,
- "qint8": int,
- "qintptr": int,
- "QList": ArrayLikeVariable,
- "qlonglong": int,
- "QMap": typing.Dict,
- "QPair": typing.Tuple,
- "qptrdiff": int,
- "qreal": float,
- "QSet": typing.Set,
- "QString": str,
- "QStringList": StringList,
- "quint16": int,
- "quint32": int,
- "quint32": int,
- "quint64": int,
- "quint8": int,
- "quintptr": int,
- "qulonglong": int,
- "QVariant": Variant,
- "QVector": typing.List,
- "real": float,
- "short": int,
- "signed char": int,
- "signed long": int,
- "std.list": typing.List,
- "std.map": typing.Dict,
- "std.pair": typing.Tuple,
- "std.vector": typing.List,
- "str": str,
- "true": True,
- "Tuple": typing.Tuple,
- "uchar": int,
- "uchar*": str,
- "uint": int,
- "ulong": int,
- "ULONG_MAX": ulong_max,
- "unsigned char": int, # 5.9
- "unsigned char*": str,
- "unsigned int": int,
- "unsigned long int": int, # 5.6, RHEL 6.6
- "unsigned long long": int,
- "unsigned long": int,
- "unsigned short int": int, # 5.6, RHEL 6.6
- "unsigned short": int,
- "Unspecified": None,
- "ushort": int,
- "void": int, # be more specific?
- "WId": WId,
- "zero(bytes)": b"",
- "zero(Char)": 0,
- "zero(float)": 0,
- "zero(int)": 0,
- "zero(object)": None,
- "zero(str)": "",
- "zero(typing.Any)": None,
- })
-
-type_map.update({
- # Handling variables declared as array:
- "array double*" : ArrayLikeVariable(float),
- "array float*" : ArrayLikeVariable(float),
- "array GLint*" : ArrayLikeVariable(int),
- "array GLuint*" : ArrayLikeVariable(int),
- "array int*" : ArrayLikeVariable(int),
- "array long long*" : ArrayLikeVariable(int),
- "array long*" : ArrayLikeVariable(int),
- "array short*" : ArrayLikeVariable(int),
- "array signed char*" : bytes,
- "array unsigned char*" : bytes,
- "array unsigned int*" : ArrayLikeVariable(int),
- "array unsigned short*" : ArrayLikeVariable(int),
- })
-
-type_map.update({
- # Special cases:
- "char*" : bytes,
- "QChar*" : bytes,
- "quint32*" : int, # only for QRandomGenerator
- "quint8*" : bytearray, # only for QCborStreamReader and QCborValue
- "uchar*" : bytes,
- "unsigned char*": bytes,
- })
-
-type_map.update({
- # Handling variables that are returned, eventually as Tuples:
- "bool*" : ResultVariable(bool),
- "float*" : ResultVariable(float),
- "int*" : ResultVariable(int),
- "long long*" : ResultVariable(int),
- "long*" : ResultVariable(int),
- "PStr*" : ResultVariable(str), # module sample
- "qint32*" : ResultVariable(int),
- "qint64*" : ResultVariable(int),
- "qreal*" : ResultVariable(float),
- "QString*" : ResultVariable(str),
- "quint16*" : ResultVariable(int),
- "uint*" : ResultVariable(int),
- "unsigned int*" : ResultVariable(int),
- "QStringList*" : ResultVariable(StringList),
- })
-
-
-# The Shiboken Part
-def init_Shiboken():
- type_map.update({
- "PyType": type,
- "shiboken2.bool": bool,
- "size_t": int,
- })
- return locals()
-
-
-def init_minimal():
- type_map.update({
- "MinBool": bool,
- })
- return locals()
-
-
-def init_sample():
- import datetime
- type_map.update({
- "char": int,
- "char**": typing.List[str],
- "Complex": complex,
- "double": float,
- "Foo.HANDLE": int,
- "HANDLE": int,
- "Null": None,
- "nullptr": None,
- "ObjectType.Identifier": Missing("sample.ObjectType.Identifier"),
- "OddBool": bool,
- "PStr": str,
- "PyDate": datetime.date,
- "sample.bool": bool,
- "sample.char": int,
- "sample.double": float,
- "sample.int": int,
- "sample.ObjectType": object,
- "sample.OddBool": bool,
- "sample.Photon.TemplateBase[Photon.DuplicatorType]": sample.Photon.ValueDuplicator,
- "sample.Photon.TemplateBase[Photon.IdentityType]": sample.Photon.ValueIdentity,
- "sample.Point": Point,
- "sample.PStr": str,
- "sample.unsigned char": int,
- "std.size_t": int,
- "std.string": str,
- "ZeroIn": 0,
- 'Str("<unk")': "<unk",
- 'Str("<unknown>")': "<unknown>",
- 'Str("nown>")': "nown>",
- })
- return locals()
-
-
-def init_other():
- import numbers
- type_map.update({
- "other.ExtendsNoImplicitConversion": Missing("other.ExtendsNoImplicitConversion"),
- "other.Number": numbers.Number,
- })
- return locals()
-
-
-def init_smart():
- # This missing type should be defined in module smart. We cannot set it to Missing()
- # because it is a container type. Therefore, we supply a surrogate:
- global SharedPtr
- class SharedPtr(Generic[_S]):
- __module__ = "smart"
- smart.SharedPtr = SharedPtr
- type_map.update({
- "smart.Smart.Integer2": int,
- })
- return locals()
-
-
-# The PySide Part
-def init_PySide2_QtCore():
- from PySide2.QtCore import Qt, QUrl, QDir
- from PySide2.QtCore import QRect, QSize, QPoint, QLocale, QByteArray
- from PySide2.QtCore import QMarginsF # 5.9
- try:
- # seems to be not generated by 5.9 ATM.
- from PySide2.QtCore import Connection
- except ImportError:
- pass
- type_map.update({
- "' '": " ",
- "'%'": "%",
- "'g'": "g",
- "4294967295UL": 4294967295, # 5.6, RHEL 6.6
- "CheckIndexOption.NoOption": Instance(
- "PySide2.QtCore.QAbstractItemModel.CheckIndexOptions.NoOption"), # 5.11
- "false": False,
- "list of QAbstractAnimation": typing.List[PySide2.QtCore.QAbstractAnimation],
- "list of QAbstractState": typing.List[PySide2.QtCore.QAbstractState],
- "long long": int,
- "NULL": None, # 5.6, MSVC
- "nullptr": None, # 5.9
- "PyByteArray": bytearray,
- "PyBytes": bytes,
- "PySide2.QtCore.QCborStreamReader.StringResult[PySide2.QtCore.QByteArray]":
- PySide2.QtCore.QCborStringResultByteArray,
- "PySide2.QtCore.QCborStreamReader.StringResult[QString]":
- PySide2.QtCore.QCborStringResultString,
- "PySide2.QtCore.QCborStreamReader.QCborStringResultByteArray":
- PySide2.QtCore.QCborStringResultByteArray, # 5.14, why?
- "PySide2.QtCore.QCborStreamReader.QCborStringResultString":
- PySide2.QtCore.QCborStringResultString, # 5.14, why?
- "PySide2.QtCore.QUrl.ComponentFormattingOptions":
- PySide2.QtCore.QUrl.ComponentFormattingOption, # mismatch option/enum, why???
- "PyUnicode": typing.Text,
- "Q_NULLPTR": None,
- "QDir.Filters(AllEntries | NoDotAndDotDot)": Instance(
- "QDir.Filters(QDir.AllEntries | QDir.NoDotAndDotDot)"),
- "QDir.SortFlags(Name | IgnoreCase)": Instance(
- "QDir.SortFlags(QDir.Name | QDir.IgnoreCase)"),
- "QGenericArgument((0))": ellipsis, # 5.6, RHEL 6.6. Is that ok?
- "QGenericArgument()": ellipsis,
- "QGenericArgument(0)": ellipsis,
- "QGenericArgument(NULL)": ellipsis, # 5.6, MSVC
- "QGenericArgument(nullptr)": ellipsis, # 5.10
- "QGenericArgument(Q_NULLPTR)": ellipsis,
- "QJsonObject": typing.Dict[str, PySide2.QtCore.QJsonValue],
- "QModelIndex()": Invalid("PySide2.QtCore.QModelIndex"), # repr is btw. very wrong, fix it?!
- "QModelIndexList": ModelIndexList,
- "QModelIndexList": ModelIndexList,
- "QString()": "",
- "QStringList()": [],
- "QStringRef": str,
- "QStringRef": str,
- "Qt.HANDLE": int, # be more explicit with some constants?
- "QUrl.FormattingOptions(PrettyDecoded)": Instance(
- "QUrl.FormattingOptions(QUrl.PrettyDecoded)"),
- "QVariant()": Invalid(Variant),
- "QVariant.Type": type, # not so sure here...
- "QVariantMap": typing.Dict[str, Variant],
- "QVariantMap": typing.Dict[str, Variant],
- })
- try:
- type_map.update({
- "PySide2.QtCore.QMetaObject.Connection": PySide2.QtCore.Connection, # wrong!
- })
- except AttributeError:
- # this does not exist on 5.9 ATM.
- pass
- return locals()
-
-
-def init_PySide2_QtGui():
- from PySide2.QtGui import QPageLayout, QPageSize # 5.12 macOS
- type_map.update({
- "0.0f": 0.0,
- "1.0f": 1.0,
- "GL_COLOR_BUFFER_BIT": GL_COLOR_BUFFER_BIT,
- "GL_NEAREST": GL_NEAREST,
- "int32_t": int,
- "QPixmap()": Default("PySide2.QtGui.QPixmap"), # can't create without qApp
- "QPlatformSurface*": int, # a handle
- "QVector< QTextLayout.FormatRange >()": [], # do we need more structure?
- "uint32_t": int,
- "uint8_t": int,
- "USHRT_MAX": ushort_max,
- })
- return locals()
-
-
-def init_PySide2_QtWidgets():
- from PySide2.QtWidgets import QWidget, QMessageBox, QStyleOption, QStyleHintReturn, QStyleOptionComplex
- from PySide2.QtWidgets import QGraphicsItem, QStyleOptionGraphicsItem # 5.9
- type_map.update({
- "QMessageBox.StandardButtons(Yes | No)": Instance(
- "QMessageBox.StandardButtons(QMessageBox.Yes | QMessageBox.No)"),
- "QWidget.RenderFlags(DrawWindowBackground | DrawChildren)": Instance(
- "QWidget.RenderFlags(QWidget.DrawWindowBackground | QWidget.DrawChildren)"),
- "SH_Default": QStyleHintReturn.SH_Default,
- "SO_Complex": QStyleOptionComplex.SO_Complex,
- "SO_Default": QStyleOption.SO_Default,
- "static_cast<Qt.MatchFlags>(Qt.MatchExactly|Qt.MatchCaseSensitive)": Instance(
- "Qt.MatchFlags(Qt.MatchExactly | Qt.MatchCaseSensitive)"),
- "Type": PySide2.QtWidgets.QListWidgetItem.Type,
- })
- return locals()
-
-
-def init_PySide2_QtSql():
- from PySide2.QtSql import QSqlDatabase
- type_map.update({
- "QLatin1String(defaultConnection)": QSqlDatabase.defaultConnection,
- "QVariant.Invalid": Invalid("Variant"), # not sure what I should create, here...
- })
- return locals()
-
-
-def init_PySide2_QtNetwork():
- best_structure = typing.OrderedDict if getattr(typing, "OrderedDict", None) else typing.Dict
- type_map.update({
- "QMultiMap[PySide2.QtNetwork.QSsl.AlternativeNameEntryType, QString]":
- best_structure[PySide2.QtNetwork.QSsl.AlternativeNameEntryType, typing.List[str]],
- })
- del best_structure
- return locals()
-
-
-def init_PySide2_QtXmlPatterns():
- from PySide2.QtXmlPatterns import QXmlName
- type_map.update({
- "QXmlName.NamespaceCode": Missing("PySide2.QtXmlPatterns.QXmlName.NamespaceCode"),
- "QXmlName.PrefixCode": Missing("PySide2.QtXmlPatterns.QXmlName.PrefixCode"),
- })
- return locals()
-
-
-def init_PySide2_QtMultimedia():
- import PySide2.QtMultimediaWidgets
- # Check if foreign import is valid. See mapping.py in shiboken2.
- check_module(PySide2.QtMultimediaWidgets)
- type_map.update({
- "QGraphicsVideoItem": PySide2.QtMultimediaWidgets.QGraphicsVideoItem,
- "qint64": int,
- "QVideoWidget": PySide2.QtMultimediaWidgets.QVideoWidget,
- })
- return locals()
-
-
-def init_PySide2_QtOpenGL():
- type_map.update({
- "GLbitfield": int,
- "GLenum": int,
- "GLfloat": float, # 5.6, MSVC 15
- "GLint": int,
- "GLuint": int,
- })
- return locals()
-
-
-def init_PySide2_QtQml():
- type_map.update({
- "QJSValueList()": [],
- "QVariantHash()": typing.Dict[str, Variant], # from 5.9
- })
- return locals()
-
-
-def init_PySide2_QtQuick():
- type_map.update({
- "PySide2.QtQuick.QSharedPointer[PySide2.QtQuick.QQuickItemGrabResult]":
- PySide2.QtQuick.QQuickItemGrabResult,
- "UnsignedShortType": int,
- })
- return locals()
-
-
-def init_PySide2_QtScript():
- type_map.update({
- "QScriptValueList()": [],
- })
- return locals()
-
-
-def init_PySide2_QtTest():
- type_map.update({
- "PySide2.QtTest.QTest.PySideQTouchEventSequence": PySide2.QtTest.QTest.QTouchEventSequence,
- "PySide2.QtTest.QTouchEventSequence": PySide2.QtTest.QTest.QTouchEventSequence,
- })
- return locals()
-
-# from 5.6, MSVC
-def init_PySide2_QtWinExtras():
- type_map.update({
- "QList< QWinJumpListItem* >()": [],
- })
- return locals()
-
-# from 5.12, macOS
-def init_PySide2_QtDataVisualization():
- from PySide2.QtDataVisualization import QtDataVisualization
- QtDataVisualization.QBarDataRow = typing.List[QtDataVisualization.QBarDataItem]
- QtDataVisualization.QBarDataArray = typing.List[QtDataVisualization.QBarDataRow]
- QtDataVisualization.QSurfaceDataRow = typing.List[QtDataVisualization.QSurfaceDataItem]
- QtDataVisualization.QSurfaceDataArray = typing.List[QtDataVisualization.QSurfaceDataRow]
- type_map.update({
- "100.0f": 100.0,
- "QtDataVisualization.QBarDataArray": QtDataVisualization.QBarDataArray,
- "QtDataVisualization.QBarDataArray*": QtDataVisualization.QBarDataArray,
- "QtDataVisualization.QSurfaceDataArray": QtDataVisualization.QSurfaceDataArray,
- "QtDataVisualization.QSurfaceDataArray*": QtDataVisualization.QSurfaceDataArray,
- })
- return locals()
-
-
-def init_testbinding():
- type_map.update({
- "testbinding.PySideCPP2.TestObjectWithoutNamespace": testbinding.TestObjectWithoutNamespace,
- })
- return locals()
-
-# end of file
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/parser.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/parser.py
deleted file mode 100644
index 2053c3e9d..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/parser.py
+++ /dev/null
@@ -1,458 +0,0 @@
-#############################################################################
-##
-## Copyright (C) 2019 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of Qt for Python.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 3 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL3 included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 3 requirements
-## will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 2.0 or (at your option) the GNU General
-## Public license version 3 or any later version approved by the KDE Free
-## Qt Foundation. The licenses are as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-2.0.html and
-## https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-from __future__ import print_function, absolute_import
-
-import sys
-import re
-import warnings
-import types
-import keyword
-import functools
-from shibokensupport.signature.mapping import (type_map, update_mapping,
- namespace, typing, _NotCalled, ResultVariable, ArrayLikeVariable)
-from shibokensupport.signature.lib.tool import (SimpleNamespace,
- build_brace_pattern)
-
-_DEBUG = False
-LIST_KEYWORDS = False
-
-"""
-parser.py
-
-This module parses the signature text and creates properties for the
-signature objects.
-
-PySide has a new function 'CppGenerator::writeSignatureInfo()'
-that extracts the gathered information about the function arguments
-and defaults as good as it can. But what PySide generates is still
-very C-ish and has many constants that Python doesn't understand.
-
-The function 'try_to_guess()' below understands a lot of PySide's
-peculiar way to assume local context. If it is able to do the guess,
-then the result is inserted into the dict, so the search happens
-not again. For everything that is not covered by these automatic
-guesses, we provide an entry in 'type_map' that resolves it.
-
-In effect, 'type_map' maps text to real Python objects.
-"""
-
-def dprint(*args, **kw):
- if _DEBUG:
- import pprint
- for arg in args:
- pprint.pprint(arg)
- sys.stdout.flush()
-
-
-_cache = {}
-
-def _parse_arglist(argstr):
- # The following is a split re. The string is broken into pieces which are
- # between the recognized strings. Because the re has groups, both the
- # strings and the separators are returned, where the strings are not
- # interesting at all: They are just the commata.
- key = "_parse_arglist"
- if key not in _cache:
- regex = build_brace_pattern(level=3, separators=",")
- _cache[key] = re.compile(regex, flags=re.VERBOSE)
- split = _cache[key].split
- # Note: this list is interspersed with "," and surrounded by ""
- return [x.strip() for x in split(argstr) if x.strip() not in ("", ",")]
-
-
-def _parse_line(line):
- line_re = r"""
- ((?P<multi> ([0-9]+)) : )? # the optional multi-index
- (?P<funcname> \w+(\.\w+)*) # the function name
- \( (?P<arglist> .*?) \) # the argument list
- ( -> (?P<returntype> .*) )? # the optional return type
- $
- """
- ret = SimpleNamespace(**re.match(line_re, line, re.VERBOSE).groupdict())
- # PYSIDE-1095: Handle arbitrary default expressions
- argstr = ret.arglist.replace("->", ".deref.")
- arglist = _parse_arglist(argstr)
- args = []
- for arg in arglist:
- name, ann = arg.split(":")
- if name in keyword.kwlist:
- if LIST_KEYWORDS:
- print("KEYWORD", ret)
- name = name + "_"
- if "=" in ann:
- ann, default = ann.split("=", 1)
- tup = name, ann, default
- else:
- tup = name, ann
- args.append(tup)
- ret.arglist = args
- multi = ret.multi
- if multi is not None:
- ret.multi = int(multi)
- funcname = ret.funcname
- parts = funcname.split(".")
- if parts[-1] in keyword.kwlist:
- ret.funcname = funcname + "_"
- return vars(ret)
-
-
-def make_good_value(thing, valtype):
- try:
- if thing.endswith("()"):
- thing = 'Default("{}")'.format(thing[:-2])
- else:
- ret = eval(thing, namespace)
- if valtype and repr(ret).startswith("<"):
- thing = 'Instance("{}")'.format(thing)
- return eval(thing, namespace)
- except Exception:
- pass
-
-
-def try_to_guess(thing, valtype):
- if "." not in thing and "(" not in thing:
- text = "{}.{}".format(valtype, thing)
- ret = make_good_value(text, valtype)
- if ret is not None:
- return ret
- typewords = valtype.split(".")
- valwords = thing.split(".")
- braceless = valwords[0] # Yes, not -1. Relevant is the overlapped word.
- if "(" in braceless:
- braceless = braceless[:braceless.index("(")]
- for idx, w in enumerate(typewords):
- if w == braceless:
- text = ".".join(typewords[:idx] + valwords)
- ret = make_good_value(text, valtype)
- if ret is not None:
- return ret
- return None
-
-def get_name(thing):
- if isinstance(thing, type):
- return getattr(thing, "__qualname__", thing.__name__)
- else:
- return thing.__name__
-
-def _resolve_value(thing, valtype, line):
- if thing in ("0", "None") and valtype:
- if valtype.startswith("PySide2.") or valtype.startswith("typing."):
- return None
- map = type_map[valtype]
- # typing.Any: '_SpecialForm' object has no attribute '__name__'
- name = get_name(map) if hasattr(map, "__name__") else str(map)
- thing = "zero({})".format(name)
- if thing in type_map:
- return type_map[thing]
- res = make_good_value(thing, valtype)
- if res is not None:
- type_map[thing] = res
- return res
- res = try_to_guess(thing, valtype) if valtype else None
- if res is not None:
- type_map[thing] = res
- return res
- warnings.warn("""pyside_type_init:
-
- UNRECOGNIZED: {!r}
- OFFENDING LINE: {!r}
- """.format(thing, line), RuntimeWarning)
- return thing
-
-
-def _resolve_arraytype(thing, line):
- search = re.search(r"\[(\d*)\]$", thing)
- thing = thing[:search.start()]
- if thing.endswith("]"):
- thing = _resolve_arraytype(thing, line)
- if search.group(1):
- # concrete array, use a tuple
- nelem = int(search.group(1))
- thing = ", ".join([thing] * nelem)
- thing = "Tuple[" + thing + "]"
- else:
- thing = "QList[" + thing + "]"
- return thing
-
-
-def to_string(thing):
- if isinstance(thing, str):
- return thing
- if hasattr(thing, "__name__"):
- dot = "." in str(thing)
- name = get_name(thing)
- return thing.__module__ + "." + name if dot else name
- # Note: This captures things from the typing module:
- return str(thing)
-
-
-matrix_pattern = "PySide2.QtGui.QGenericMatrix"
-
-def handle_matrix(arg):
- n, m, typstr = tuple(map(lambda x:x.strip(), arg.split(",")))
- assert typstr == "float"
- result = "PySide2.QtGui.QMatrix{n}x{m}".format(**locals())
- return eval(result, namespace)
-
-
-debugging_aid = """
-from inspect import currentframe
-
-def lno(level):
- lineno = currentframe().f_back.f_lineno
- spaces = level * " "
- return "{lineno}{spaces}".format(**locals())
-"""
-
-
-def _resolve_type(thing, line, level, var_handler):
- # Capture total replacements, first. Happens in
- # "PySide2.QtCore.QCborStreamReader.StringResult[PySide2.QtCore.QByteArray]"
- if thing in type_map:
- return type_map[thing]
- # Now the nested structures are handled.
- if "[" in thing:
- # handle primitive arrays
- if re.search(r"\[\d*\]$", thing):
- thing = _resolve_arraytype(thing, line)
- # Handle a container return type. (see PYSIDE-921 in cppgenerator.cpp)
- contr, thing = re.match(r"(.*?)\[(.*?)\]$", thing).groups()
- # Special case: Handle the generic matrices.
- if contr == matrix_pattern:
- return handle_matrix(thing)
- contr = var_handler(_resolve_type(contr, line, level+1, var_handler))
- if isinstance(contr, _NotCalled):
- raise SystemError("Container types must exist:", repr(contr))
- contr = to_string(contr)
- pieces = []
- for part in _parse_arglist(thing):
- part = var_handler(_resolve_type(part, line, level+1, var_handler))
- if isinstance(part, _NotCalled):
- # fix the tag (i.e. "Missing") by repr
- part = repr(part)
- pieces.append(to_string(part))
- thing = ", ".join(pieces)
- result = "{contr}[{thing}]".format(**locals())
- return eval(result, namespace)
- return _resolve_value(thing, None, line)
-
-
-def _handle_generic(obj, repl):
- """
- Assign repl if obj is an ArrayLikeVariable
-
- This is a neat trick. Example:
-
- obj repl result
- ---------------------- -------- ---------
- ArrayLikeVariable List List
- ArrayLikeVariable(str) List List[str]
- ArrayLikeVariable Sequence Sequence
- ArrayLikeVariable(str) Sequence Sequence[str]
- """
- if isinstance(obj, ArrayLikeVariable):
- return repl[obj.type]
- if isinstance(obj, type) and issubclass(obj, ArrayLikeVariable):
- # was "if obj is ArrayLikeVariable"
- return repl
- return obj
-
-
-def handle_argvar(obj):
- """
- Decide how array-like variables are resolved in arguments
-
- Currently, the best approximation is types.Sequence.
- We want to change that to types.Iterable in the near future.
- """
- return _handle_generic(obj, typing.Sequence)
-
-
-def handle_retvar(obj):
- """
- Decide how array-like variables are resolved in results
-
- This will probably stay typing.List forever.
- """
- return _handle_generic(obj, typing.List)
-
-
-def calculate_props(line):
- parsed = SimpleNamespace(**_parse_line(line.strip()))
- arglist = parsed.arglist
- annotations = {}
- _defaults = []
- for idx, tup in enumerate(arglist):
- name, ann = tup[:2]
- if ann == "...":
- name = "*args" if name.startswith("arg_") else "*" + name
- # copy the pathed fields back
- ann = 'nullptr' # maps to None
- tup = name, ann
- arglist[idx] = tup
- annotations[name] = _resolve_type(ann, line, 0, handle_argvar)
- if len(tup) == 3:
- default = _resolve_value(tup[2], ann, line)
- _defaults.append(default)
- defaults = tuple(_defaults)
- returntype = parsed.returntype
- if returntype is not None:
- annotations["return"] = _resolve_type(returntype, line, 0, handle_retvar)
- props = SimpleNamespace()
- props.defaults = defaults
- props.kwdefaults = {}
- props.annotations = annotations
- props.varnames = varnames = tuple(tup[0] for tup in arglist)
- funcname = parsed.funcname
- props.fullname = funcname
- shortname = funcname[funcname.rindex(".")+1:]
- props.name = shortname
- props.multi = parsed.multi
- fix_variables(props, line)
- return vars(props)
-
-
-def fix_variables(props, line):
- annos = props.annotations
- if not any(isinstance(ann, (ResultVariable, ArrayLikeVariable))
- for ann in annos.values()):
- return
- retvar = annos.get("return", None)
- if retvar and isinstance(retvar, (ResultVariable, ArrayLikeVariable)):
- # Special case: a ResultVariable which is the result will always be an array!
- annos["return"] = retvar = typing.List[retvar.type]
- fullname = props.fullname
- varnames = list(props.varnames)
- defaults = list(props.defaults)
- diff = len(varnames) - len(defaults)
-
- safe_annos = annos.copy()
- retvars = [retvar] if retvar else []
- deletions = []
- for idx, name in enumerate(varnames):
- ann = safe_annos[name]
- if isinstance(ann, ArrayLikeVariable):
- ann = typing.Sequence[ann.type]
- annos[name] = ann
- if not isinstance(ann, ResultVariable):
- continue
- # We move the variable to the end and remove it.
- retvars.append(ann.type)
- deletions.append(idx)
- del annos[name]
- for idx in reversed(deletions):
- # varnames: 0 1 2 3 4 5 6 7
- # defaults: 0 1 2 3 4
- # diff: 3
- del varnames[idx]
- if idx >= diff:
- del defaults[idx - diff]
- else:
- diff -= 1
- if retvars:
- rvs = []
- retvars = list(handle_retvar(rv) if isinstance(rv, ArrayLikeVariable) else rv
- for rv in retvars)
- if len(retvars) == 1:
- returntype = retvars[0]
- else:
- typestr = "typing.Tuple[{}]".format(", ".join(map(to_string, retvars)))
- returntype = eval(typestr, namespace)
- props.annotations["return"] = returntype
- props.varnames = tuple(varnames)
- props.defaults = tuple(defaults)
-
-
-def fixup_multilines(lines):
- """
- Multilines can collapse when certain distinctions between C++ types
- vanish after mapping to Python.
- This function fixes this by re-computing multiline-ness.
- """
- res = []
- multi_lines = []
- for line in lines:
- multi = re.match(r"([0-9]+):", line)
- if multi:
- idx, rest = int(multi.group(1)), line[multi.end():]
- multi_lines.append(rest)
- if idx > 0:
- continue
- # remove duplicates
- multi_lines = sorted(set(multi_lines))
- # renumber or return a single line
- nmulti = len(multi_lines)
- if nmulti > 1:
- for idx, line in enumerate(multi_lines):
- res.append("{}:{}".format(nmulti-idx-1, line))
- else:
- res.append(multi_lines[0])
- multi_lines = []
- else:
- res.append(line)
- return res
-
-
-def pyside_type_init(type_key, sig_strings):
- dprint()
- dprint("Initialization of type key '{}'".format(type_key))
- update_mapping()
- lines = fixup_multilines(sig_strings)
- ret = {}
- multi_props = []
- for line in lines:
- props = calculate_props(line)
- shortname = props["name"]
- multi = props["multi"]
- if multi is None:
- ret[shortname] = props
- dprint(props)
- else:
- multi_props.append(props)
- if multi > 0:
- continue
- fullname = props.pop("fullname")
- multi_props = {"multi": multi_props, "fullname": fullname}
- ret[shortname] = multi_props
- dprint(multi_props)
- multi_props = []
- return ret
-
-# end of file
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/qt_attribution.json b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/qt_attribution.json
deleted file mode 100644
index fbe4c51ab..000000000
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/qt_attribution.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "Id": "python",
- "Name": "Python",
- "QDocModule": "QtForPython",
- "QtUsage": "Used for Qt for Python in the signature extension.",
- "Description": "Qt for Python is an add-on for Python. The signature packages of PySide uses certain copied and adapted source files (backport_inspect.py, typing27.py). See the folder sources/shiboken2/files.dir/shibokensupport/signature .",
- "Homepage": "http://www.python.org/",
- "Version": "3.7.0",
- "LicenseId": "Python-2.0",
- "License": "Python License 2.0",
- "LicenseFile": "PSF-3.7.0.txt",
- "Copyright": "© Copyright 2001-2018, Python Software Foundation."
-}