From 346fceebb7e91df7d52a422d049444f8407ec6f4 Mon Sep 17 00:00:00 2001 From: Matt Wala <wala1@illinois.edu> Date: Fri, 17 Feb 2017 17:05:04 -0600 Subject: [PATCH] Apparently, __getstate__() results are coerced to bool in Python 2 and __setstate__() doesn't run if the state is False. Ensure that we always return a non-false state (another version bump here). --- loopy/tools.py | 7 ++----- loopy/version.py | 2 +- test/test_misc.py | 10 +++++++++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/loopy/tools.py b/loopy/tools.py index 524d2cf72..56b673b59 100644 --- a/loopy/tools.py +++ b/loopy/tools.py @@ -396,12 +396,9 @@ class LazilyUnpicklingDictionary(collections.MutableMapping): return iter(self._map) def __getstate__(self): - return dict( + return {"_map": dict( (key, _PickledObjectWrapper.from_object(val)) - for key, val in six.iteritems(self._map)) - - def __setstate__(self, state): - self._map = state + for key, val in six.iteritems(self._map))} # }}} diff --git a/loopy/version.py b/loopy/version.py index 35a86a995..2c15cc2da 100644 --- a/loopy/version.py +++ b/loopy/version.py @@ -32,4 +32,4 @@ except ImportError: else: _islpy_version = islpy.version.VERSION_TEXT -DATA_MODEL_VERSION = "v57-islpy%s" % _islpy_version +DATA_MODEL_VERSION = "v58-islpy%s" % _islpy_version diff --git a/test/test_misc.py b/test/test_misc.py index 139c337e1..a22e42463 100644 --- a/test/test_misc.py +++ b/test/test_misc.py @@ -97,7 +97,7 @@ class PicklableItem(object): flags = {"unpickled": False} def __getstate__(self): - return () + return True def __setstate__(self, state): PicklableItem.flags["unpickled"] = True @@ -135,6 +135,14 @@ def test_LazilyUnpicklingDictionary(): # }}} + # {{{ test empty map + + mapping = LazilyUnpicklingDictionary({}) + mapping = loads(dumps(mapping)) + assert len(mapping) == 0 + + # }}} + if __name__ == "__main__": if len(sys.argv) > 1: -- GitLab