From 0205dfdd34f171ebb20e0d662a0c6313736b6c70 Mon Sep 17 00:00:00 2001 From: Pierre Glaser Date: Wed, 12 Jun 2019 16:49:53 +0200 Subject: [PATCH 1/4] FIX pickle getset_descriptor --- cloudpickle/cloudpickle.py | 5 +++++ tests/cloudpickle_test.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/cloudpickle/cloudpickle.py b/cloudpickle/cloudpickle.py index ad0f5bb58..c92b2eac4 100644 --- a/cloudpickle/cloudpickle.py +++ b/cloudpickle/cloudpickle.py @@ -848,6 +848,11 @@ def save_builtin_function_or_method(self, obj): method_descriptor = type(str.upper) dispatch[method_descriptor] = save_builtin_function_or_method + def save_getset_descriptor(self, obj): + return self.save_reduce(getattr, (obj.__objclass__, obj.__name__)) + + dispatch[types.GetSetDescriptorType] = save_getset_descriptor + def save_global(self, obj, name=None, pack=struct.pack): """ Save a "global". diff --git a/tests/cloudpickle_test.py b/tests/cloudpickle_test.py index 75287f6e6..ec1d089bb 100644 --- a/tests/cloudpickle_test.py +++ b/tests/cloudpickle_test.py @@ -984,6 +984,11 @@ def test_logger(self): # logging.Logger object self.check_logger('cloudpickle.dummy_test_logger') + def test_getset_descriptor(self): + assert isinstance(float.real, types.GetSetDescriptorType) + depickled_descriptor = pickle_depickle(float.real) + self.assertIs(depickled_descriptor, float.real) + def test_abc(self): @abc.abstractmethod From 204cca5a346e2383113adfd903a9068e4780eb49 Mon Sep 17 00:00:00 2001 From: Pierre Glaser Date: Thu, 13 Jun 2019 16:38:13 +0200 Subject: [PATCH 2/4] MNT changelog --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 199326091..b98d485fc 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,9 @@ - Fix a bug affecting bound classmethod saving on Python 2. ([issue #288](https://github.com/cloudpipe/cloudpickle/issues/288)) +- Add support for pickling exotic builtin property types. + ([issue #290](https://github.com/cloudpipe/cloudpickle/pull/290)) + 1.2.1 ===== From 8236a9c42c67696e9c2eae41c5582e058fb8c119 Mon Sep 17 00:00:00 2001 From: Pierre Glaser Date: Thu, 13 Jun 2019 17:04:46 +0200 Subject: [PATCH 3/4] FIX add similar reducer in cloudpickle_fast --- cloudpickle/cloudpickle_fast.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cloudpickle/cloudpickle_fast.py b/cloudpickle/cloudpickle_fast.py index 54421edb8..dfe554d62 100644 --- a/cloudpickle/cloudpickle_fast.py +++ b/cloudpickle/cloudpickle_fast.py @@ -260,6 +260,10 @@ def _file_reduce(obj): return _file_reconstructor, (retval,) +def _getset_descriptor_reduce(obj): + return getattr, (obj.__objclass__, obj.__name__) + + def _mappingproxy_reduce(obj): return types.MappingProxyType, (dict(obj),) @@ -405,6 +409,7 @@ class CloudPickler(Pickler): dispatch[staticmethod] = _classmethod_reduce dispatch[types.CellType] = _cell_reduce dispatch[types.CodeType] = _code_reduce + dispatch[types.GetSetDescriptorType] = _getset_descriptor_reduce dispatch[types.ModuleType] = _module_reduce dispatch[types.MethodType] = _method_reduce dispatch[types.MappingProxyType] = _mappingproxy_reduce From b51ff9b7aab35c28dd1b08687ab95fb0386358aa Mon Sep 17 00:00:00 2001 From: Pierre Glaser Date: Mon, 17 Jun 2019 10:55:13 +0200 Subject: [PATCH 4/4] update changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index b98d485fc..65f61d451 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,7 +4,7 @@ - Fix a bug affecting bound classmethod saving on Python 2. ([issue #288](https://github.com/cloudpipe/cloudpickle/issues/288)) -- Add support for pickling exotic builtin property types. +- Add support for pickling "getset" descriptors ([issue #290](https://github.com/cloudpipe/cloudpickle/pull/290)) 1.2.1