diff options
author | Alexandre Vassalotti <alexandre@peadrop.com> | 2013-12-01 00:21:20 (GMT) |
---|---|---|
committer | Alexandre Vassalotti <alexandre@peadrop.com> | 2013-12-01 00:21:20 (GMT) |
commit | 3c23e7a5dcbc1972bd9e26dc26e61d856abb51f1 (patch) | |
tree | 600903588902508759b5ad8e3cbeb9d4b8329c1c /Lib | |
parent | 9204af42cc271690f57a4bc0d2af53201a796b51 (diff) | |
parent | 19b6fa6ebb887e498437b4ae87d6e70b92b4742b (diff) | |
download | cpython-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.py | 11 | ||||
-rw-r--r-- | Lib/test/pickletester.py | 9 |
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): |