Ensure ordered set is pickleable

Since the existing set and frozen sets
are pickleable so should this type so
that it functions and matches how the
the existing types work.

Change-Id: I6994b868ecbf0428ab4bc8ab5c2f4486ad53fb49
This commit is contained in:
Joshua Harlow
2015-03-04 16:37:37 -08:00
parent 847d87db6a
commit 0e2a567b90
2 changed files with 16 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ import time
import networkx as nx
import six
from six.moves import cPickle as pickle
from taskflow import exceptions as excp
from taskflow import test
@@ -498,6 +499,15 @@ class FSMTest(test.TestCase):
class OrderedSetTest(test.TestCase):
def test_pickleable(self):
items = [10, 9, 8, 7]
s = sets.OrderedSet(items)
self.assertEqual(items, list(s))
s_bin = pickle.dumps(s)
s2 = pickle.loads(s_bin)
self.assertEqual(s, s2)
self.assertEqual(items, list(s2))
def test_retain_ordering(self):
items = [10, 9, 8, 7]
s = sets.OrderedSet(iter(items))

View File

@@ -66,6 +66,12 @@ class OrderedSet(collections.Set, collections.Hashable):
for value in six.iterkeys(self._data):
yield value
def __setstate__(self, items):
self.__init__(iterable=iter(items))
def __getstate__(self):
return tuple(self)
def __repr__(self):
return "%s(%s)" % (type(self).__name__, list(self))