summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAlexandre Vassalotti <alexandre@peadrop.com>2013-12-01 00:21:20 (GMT)
committerAlexandre Vassalotti <alexandre@peadrop.com>2013-12-01 00:21:20 (GMT)
commit3c23e7a5dcbc1972bd9e26dc26e61d856abb51f1 (patch)
tree600903588902508759b5ad8e3cbeb9d4b8329c1c /Lib
parent9204af42cc271690f57a4bc0d2af53201a796b51 (diff)
parent19b6fa6ebb887e498437b4ae87d6e70b92b4742b (diff)
downloadcpython-3c23e7a5dcbc1972bd9e26dc26e61d856abb51f1.zip
cpython-3c23e7a5dcbc1972bd9e26dc26e61d856abb51f1.tar.gz
cpython-3c23e7a5dcbc1972bd9e26dc26e61d856abb51f1.tar.bz2
Issue #6477: Merge with 3.3.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/pickle.py11
-rw-r--r--Lib/test/pickletester.py9
2 files changed, 19 insertions, 1 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py
index cf8e2c5..c57149a 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -954,8 +954,17 @@ class _Pickler:
self.memoize(obj)
+ def save_type(self, obj):
+ if obj is type(None):
+ return self.save_reduce(type, (None,), obj=obj)
+ elif obj is type(NotImplemented):
+ return self.save_reduce(type, (NotImplemented,), obj=obj)
+ elif obj is type(...):
+ return self.save_reduce(type, (...,), obj=obj)
+ return self.save_global(obj)
+
dispatch[FunctionType] = save_global
- dispatch[type] = save_global
+ dispatch[type] = save_type
# Unpickling machinery
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 12b6c8f..999eab0 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -804,6 +804,15 @@ class AbstractPickleTests(unittest.TestCase):
u = self.loads(s)
self.assertIs(NotImplemented, u)
+ def test_singleton_types(self):
+ # Issue #6477: Test that types of built-in singletons can be pickled.
+ singletons = [None, ..., NotImplemented]
+ for singleton in singletons:
+ for proto in protocols:
+ s = self.dumps(type(singleton), proto)
+ u = self.loads(s)
+ self.assertIs(type(singleton), u)
+
# Tests for protocol 2
def test_proto(self):