Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37728788
en ru br
Репозитории ALT

Группа :: Development/Python3
Пакет: python3-module-PySide2

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: py3.10-prep-Finally-support-Python-3.10.patch
Скачать


From: Christian Tismer <tismer@stackless.com>
Date: Sat, 8 May 2021 16:06:23 +0200
Subject: py3.10-prep: Finally support Python 3.10
After the major problems are solved in
    py3.10-prep: re-implement zip import
    py3.10-prep: reset the type cache after feature switching
    py3.10-prep: Fix parser.py for changed typing module
, there are only some minor changes left to do. One thing
is still not clear:
* Unsolved: In time_test.py, the last two tests work but
crash at shutdown.
It is not yet clear if this is a PySide or Python error.
This will crash Python 3.10 if not solved until the release.
(cherry picked from commit 81e9cff884d6b03cdf64a5dd6ec6564d99177e0c)
---
 build_scripts/config.py                                     |  1 +
 sources/pyside2/tests/QtWidgets/signature_test.py           |  5 +++--
 sources/shiboken2/libshiboken/pep384impl.cpp                | 13 ++++++-------
 sources/shiboken2/libshiboken/pep384impl.h                  |  7 ++++++-
 sources/shiboken2/libshiboken/sbkstring.cpp                 |  2 +-
 .../files.dir/shibokensupport/signature/mapping.py          |  1 +
 6 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/build_scripts/config.py b/build_scripts/config.py
index b1b3206..7ff155c 100644
--- a/build_scripts/config.py
+++ b/build_scripts/config.py
@@ -93,6 +93,7 @@ class Config(object):
             'Programming Language :: Python :: 3.7',
             'Programming Language :: Python :: 3.8',
             'Programming Language :: Python :: 3.9',
+            'Programming Language :: Python :: 3.10',
         ]
 
         self.setup_script_dir = None
diff --git a/sources/pyside2/tests/QtWidgets/signature_test.py b/sources/pyside2/tests/QtWidgets/signature_test.py
index 57fcf38..cacb576 100644
--- a/sources/pyside2/tests/QtWidgets/signature_test.py
+++ b/sources/pyside2/tests/QtWidgets/signature_test.py
@@ -65,8 +65,9 @@ class PySideSignatureTest(unittest.TestCase):
         for thing in obj.__signature__:
             self.assertEqual(type(thing), inspect.Signature)
         sm = PySide2.QtWidgets.QApplication.__dict__["palette"]
-        self.assertFalse(callable(sm))
-        self.assertEqual(sm.__func__, obj)
+        # PYSIDE-1436: staticmethod is a callable since Python 3.10
+        # Instead of checking callable(sm), we check the type:
+        self.assertEqual(type(sm), staticmethod)
         self.assertTrue(hasattr(sm, "__signature__") and
                         sm.__signature__ is not None)
 
diff --git a/sources/shiboken2/libshiboken/pep384impl.cpp b/sources/shiboken2/libshiboken/pep384impl.cpp
index cb80425..633d9dc 100644
--- a/sources/shiboken2/libshiboken/pep384impl.cpp
+++ b/sources/shiboken2/libshiboken/pep384impl.cpp
@@ -751,14 +751,14 @@ _Pep_PrivateMangle(PyObject *self, PyObject *name)
 #endif // IS_PY2
     Shiboken::AutoDecRef privateobj(PyObject_GetAttr(
         reinterpret_cast<PyObject *>(Py_TYPE(self)), Shiboken::PyMagicName::name()));
-#ifndef Py_LIMITED_API
-    return _Py_Mangle(privateobj, name);
-#else
-    // For some reason, _Py_Mangle is not in the Limited API. Why?
-    size_t plen = PyUnicode_GET_LENGTH(privateobj);
+
+    // PYSIDE-1436: _Py_Mangle is no longer exposed; implement it always.
+    // The rest of this function is our own implementation of _Py_Mangle.
+    // Please compare the original function in compile.c .
+    size_t plen = PyUnicode_GET_LENGTH(privateobj.object());
     /* Strip leading underscores from class name */
     size_t ipriv = 0;
-    while (PyUnicode_READ_CHAR(privateobj, ipriv) == '_')
+    while (PyUnicode_READ_CHAR(privateobj.object(), ipriv) == '_')
         ipriv++;
     if (ipriv == plen) {
         Py_INCREF(name);
@@ -787,7 +787,6 @@ _Pep_PrivateMangle(PyObject *self, PyObject *name)
     if (amount > big_stack)
         free(resbuf);
     return result;
-#endif // else Py_LIMITED_API
 }
 
 /*****************************************************************************
diff --git a/sources/shiboken2/libshiboken/pep384impl.h b/sources/shiboken2/libshiboken/pep384impl.h
index 7a6f57f..eb65596 100644
--- a/sources/shiboken2/libshiboken/pep384impl.h
+++ b/sources/shiboken2/libshiboken/pep384impl.h
@@ -40,6 +40,11 @@
 #ifndef PEP384IMPL_H
 #define PEP384IMPL_H
 
+// PYSIDE-1436: Adapt to Python 3.10
+#if PY_VERSION_HEX < 0x030900A4
+#  define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0)
+#endif
+
 extern "C"
 {
 
@@ -327,7 +332,7 @@ LIBSHIBOKEN_API PyObject *PyRun_String(const char *, int, PyObject *, PyObject *
 // But this is no problem as we check it's validity for every version.
 
 #define PYTHON_BUFFER_VERSION_COMPATIBLE    (PY_VERSION_HEX >= 0x03030000 && \
-                                             PY_VERSION_HEX <  0x0309FFFF)
+                                             PY_VERSION_HEX <  0x030AFFFF)
 #if !PYTHON_BUFFER_VERSION_COMPATIBLE
 # error Please check the buffer compatibility for this python version!
 #endif
diff --git a/sources/shiboken2/libshiboken/sbkstring.cpp b/sources/shiboken2/libshiboken/sbkstring.cpp
index 918aae7..077fb53 100644
--- a/sources/shiboken2/libshiboken/sbkstring.cpp
+++ b/sources/shiboken2/libshiboken/sbkstring.cpp
@@ -247,7 +247,7 @@ static void finalizeStaticStrings()
 {
     auto &set = staticStrings();
     for (PyObject *ob : set) {
-        Py_REFCNT(ob) = 1;
+        Py_SET_REFCNT(ob, 1);
         Py_DECREF(ob);
     }
     set.clear();
diff --git a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py
index 6fadd19..f701d83 100644
--- a/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py
+++ b/sources/shiboken2/shibokenmodule/files.dir/shibokensupport/signature/mapping.py
@@ -300,6 +300,7 @@ type_map.update({
     "zero(object)": None,
     "zero(str)": "",
     "zero(typing.Any)": None,
+    "zero(Any)": None,
     })
 
 type_map.update({
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin