From ec0d73250d25d4b68c614238b4aefb413ac3e1864540d6cbef633e21a727cbb6 Mon Sep 17 00:00:00 2001 From: Daniel Garcia Date: Fri, 28 Oct 2022 12:07:25 +0000 Subject: [PATCH] - Add Move-builtin-classmethod_descriptor-to-a-different-t.patch to fix the tests with python 3.10.8 gh#cloudpipe/cloudpickle#486 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-cloudpickle?expand=0&rev=41 --- ...ssmethod_descriptor-to-a-different-t.patch | 69 +++++++++++++++++++ python-cloudpickle.changes | 6 ++ python-cloudpickle.spec | 7 +- 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 Move-builtin-classmethod_descriptor-to-a-different-t.patch diff --git a/Move-builtin-classmethod_descriptor-to-a-different-t.patch b/Move-builtin-classmethod_descriptor-to-a-different-t.patch new file mode 100644 index 0000000..decec27 --- /dev/null +++ b/Move-builtin-classmethod_descriptor-to-a-different-t.patch @@ -0,0 +1,69 @@ +From 9b332800fa09bec1f03fd4dd10ca69d1655c809c Mon Sep 17 00:00:00 2001 +From: Daniel Garcia Moreno +Date: Fri, 28 Oct 2022 13:55:45 +0200 +Subject: [PATCH] Move builtin classmethod_descriptor to a different test + +This patch mvoes the builtin classmethod descriptor test to a different +one and mark it to skip for python >= 3.10.8. The classmethod descriptor +serializarion was removed from python in these releases: +https://docs.python.org/3.10/whatsnew/changelog.html#id3 + +More information in the github issue: +https://github.com/python/cpython/issues/95196 + +Fix https://github.com/cloudpipe/cloudpickle/issues/485 +--- + tests/cloudpickle_test.py | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +diff --git a/tests/cloudpickle_test.py b/tests/cloudpickle_test.py +index 7bb0322..2701852 100644 +--- a/tests/cloudpickle_test.py ++++ b/tests/cloudpickle_test.py +@@ -868,21 +868,16 @@ class CloudPickleTest(unittest.TestCase): + assert depickled_unbound_meth is unbound_classicmethod + assert depickled_clsdict_meth is clsdict_classicmethod + +- + def test_builtin_classmethod(self): + obj = 1.5 # float object + + bound_clsmethod = obj.fromhex # builtin_function_or_method + unbound_clsmethod = type(obj).fromhex # builtin_function_or_method +- clsdict_clsmethod = type( +- obj).__dict__['fromhex'] # classmethod_descriptor + + depickled_bound_meth = pickle_depickle( + bound_clsmethod, protocol=self.protocol) + depickled_unbound_meth = pickle_depickle( + unbound_clsmethod, protocol=self.protocol) +- depickled_clsdict_meth = pickle_depickle( +- clsdict_clsmethod, protocol=self.protocol) + + # float.fromhex takes a string as input. + arg = "0x1" +@@ -893,6 +888,21 @@ class CloudPickleTest(unittest.TestCase): + assert depickled_bound_meth(arg) == bound_clsmethod(arg) + assert depickled_unbound_meth(arg) == unbound_clsmethod(arg) + ++ @pytest.mark.skipif( ++ sys.version_info >= (3, 10, 8), ++ reason="Disabled classmethod_descriptor pickle https://github.com/python/cpython/issues/95196" ++ ) ++ def test_builtin_classmethod_descriptor(self): ++ obj = 1.5 # float object ++ ++ clsdict_clsmethod = type( ++ obj).__dict__['fromhex'] # classmethod_descriptor ++ ++ depickled_clsdict_meth = pickle_depickle( ++ clsdict_clsmethod, protocol=self.protocol) ++ ++ # float.fromhex takes a string as input. ++ arg = "0x1" + if platform.python_implementation() == 'CPython': + # Roundtripping a classmethod_descriptor results in a + # builtin_function_or_method (CPython upstream issue). +-- +2.38.0 + diff --git a/python-cloudpickle.changes b/python-cloudpickle.changes index 625816c..91196db 100644 --- a/python-cloudpickle.changes +++ b/python-cloudpickle.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Fri Oct 28 12:04:27 UTC 2022 - Daniel Garcia + +- Add Move-builtin-classmethod_descriptor-to-a-different-t.patch to fix the + tests with python 3.10.8 gh#cloudpipe/cloudpickle#486 + ------------------------------------------------------------------- Sat Oct 1 11:24:59 UTC 2022 - Dirk Müller diff --git a/python-cloudpickle.spec b/python-cloudpickle.spec index 4acb068..8118d28 100644 --- a/python-cloudpickle.spec +++ b/python-cloudpickle.spec @@ -25,6 +25,8 @@ Summary: Extended pickling support for Python objects License: BSD-3-Clause URL: https://github.com/cloudpipe/cloudpickle Source: https://files.pythonhosted.org/packages/source/c/cloudpickle/cloudpickle-%{version}.tar.gz +# PATCH-FIX-UPSTREAM Move-builtin-classmethod_descriptor-to-a-different-t.patch gh#cloudpipe/cloudpickle#486 +Patch0: Move-builtin-classmethod_descriptor-to-a-different-t.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros @@ -53,7 +55,7 @@ Among other things, cloudpickle supports pickling for lambda expressions, functions and classes defined interactively in the __main__ module. %prep -%setup -q -n cloudpickle-%{version} +%autosetup -p1 -n cloudpickle-%{version} %build %python_build @@ -71,6 +73,7 @@ export PYTHONPATH=':./tests/cloudpickle_testpkg' %files %{python_files} %doc README.md %license LICENSE -%{python_sitelib}/* +%{python_sitelib}/cloudpickle +%{python_sitelib}/cloudpickle-%{version}*-info %changelog