| 
									
										
										
										
											2000-09-15 15:14:51 +00:00
										 |  |  | import pickle | 
					
						
							| 
									
										
										
										
											2007-05-08 21:26:54 +00:00
										 |  |  | import io | 
					
						
							| 
									
										
										
										
											2003-01-28 22:34:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-20 21:35:26 +00:00
										 |  |  | from test import support | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-28 22:34:11 +00:00
										 |  |  | from test.pickletester import AbstractPickleTests | 
					
						
							|  |  |  | from test.pickletester import AbstractPickleModuleTests | 
					
						
							|  |  |  | from test.pickletester import AbstractPersistentPicklerTests | 
					
						
							| 
									
										
										
										
											2009-04-16 03:18:06 +00:00
										 |  |  | from test.pickletester import AbstractPicklerUnpicklerObjectTests | 
					
						
							| 
									
										
										
										
											2003-01-28 22:34:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | try: | 
					
						
							|  |  |  |     import _pickle | 
					
						
							|  |  |  |     has_c_implementation = True | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     has_c_implementation = False | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-06 21:34:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | class PickleTests(AbstractPickleModuleTests): | 
					
						
							|  |  |  |     pass | 
					
						
							| 
									
										
										
										
											2003-01-29 17:58:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-18 21:57:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | class PyPicklerTests(AbstractPickleTests): | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |     pickler = pickle._Pickler | 
					
						
							|  |  |  |     unpickler = pickle._Unpickler | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-17 22:56:06 +00:00
										 |  |  |     def dumps(self, arg, proto=None): | 
					
						
							| 
									
										
										
										
											2007-05-08 21:26:54 +00:00
										 |  |  |         f = io.BytesIO() | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |         p = self.pickler(f, proto) | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  |         p.dump(arg) | 
					
						
							|  |  |  |         f.seek(0) | 
					
						
							| 
									
										
										
										
											2007-05-08 21:26:54 +00:00
										 |  |  |         return bytes(f.read()) | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def loads(self, buf): | 
					
						
							| 
									
										
										
										
											2007-05-08 21:26:54 +00:00
										 |  |  |         f = io.BytesIO(buf) | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |         u = self.unpickler(f) | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  |         return u.load() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class PyPersPicklerTests(AbstractPersistentPicklerTests): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pickler = pickle._Pickler | 
					
						
							|  |  |  |     unpickler = pickle._Unpickler | 
					
						
							| 
									
										
										
										
											2002-11-13 22:01:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-17 22:56:06 +00:00
										 |  |  |     def dumps(self, arg, proto=None): | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |         class PersPickler(self.pickler): | 
					
						
							| 
									
										
										
										
											2002-11-13 22:01:27 +00:00
										 |  |  |             def persistent_id(subself, obj): | 
					
						
							|  |  |  |                 return self.persistent_id(obj) | 
					
						
							| 
									
										
										
										
											2007-05-08 21:26:54 +00:00
										 |  |  |         f = io.BytesIO() | 
					
						
							| 
									
										
										
										
											2003-01-28 03:51:53 +00:00
										 |  |  |         p = PersPickler(f, proto) | 
					
						
							| 
									
										
										
										
											2002-11-13 22:01:27 +00:00
										 |  |  |         p.dump(arg) | 
					
						
							|  |  |  |         f.seek(0) | 
					
						
							|  |  |  |         return f.read() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def loads(self, buf): | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |         class PersUnpickler(self.unpickler): | 
					
						
							| 
									
										
										
										
											2002-11-13 22:01:27 +00:00
										 |  |  |             def persistent_load(subself, obj): | 
					
						
							|  |  |  |                 return self.persistent_load(obj) | 
					
						
							| 
									
										
										
										
											2007-05-08 21:26:54 +00:00
										 |  |  |         f = io.BytesIO(buf) | 
					
						
							| 
									
										
										
										
											2002-11-13 22:01:27 +00:00
										 |  |  |         u = PersUnpickler(f) | 
					
						
							|  |  |  |         return u.load() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-16 03:18:06 +00:00
										 |  |  | class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pickler_class = pickle._Pickler | 
					
						
							|  |  |  |     unpickler_class = pickle._Unpickler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | if has_c_implementation: | 
					
						
							|  |  |  |     class CPicklerTests(PyPicklerTests): | 
					
						
							|  |  |  |         pickler = _pickle.Pickler | 
					
						
							|  |  |  |         unpickler = _pickle.Unpickler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class CPersPicklerTests(PyPersPicklerTests): | 
					
						
							|  |  |  |         pickler = _pickle.Pickler | 
					
						
							|  |  |  |         unpickler = _pickle.Unpickler | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-16 03:18:06 +00:00
										 |  |  |     class CDumpPickle_LoadPickle(PyPicklerTests): | 
					
						
							|  |  |  |         pickler = _pickle.Pickler | 
					
						
							|  |  |  |         unpickler = pickle._Unpickler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class DumpPickle_CLoadPickle(PyPicklerTests): | 
					
						
							|  |  |  |         pickler = pickle._Pickler | 
					
						
							|  |  |  |         unpickler = _pickle.Unpickler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class CPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): | 
					
						
							|  |  |  |         pickler_class = _pickle.Pickler | 
					
						
							|  |  |  |         unpickler_class = _pickle.Unpickler | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-19 16:42:15 +00:00
										 |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |     tests = [PickleTests, PyPicklerTests, PyPersPicklerTests] | 
					
						
							|  |  |  |     if has_c_implementation: | 
					
						
							| 
									
										
										
										
											2009-04-16 03:18:06 +00:00
										 |  |  |         tests.extend([CPicklerTests, CPersPicklerTests, | 
					
						
							|  |  |  |                       CDumpPickle_LoadPickle, DumpPickle_CLoadPickle, | 
					
						
							|  |  |  |                       PyPicklerUnpicklerObjectTests, | 
					
						
							|  |  |  |                       CPicklerUnpicklerObjectTests]) | 
					
						
							| 
									
										
										
										
											2008-06-12 18:26:05 +00:00
										 |  |  |     support.run_unittest(*tests) | 
					
						
							| 
									
										
										
										
											2008-05-20 21:35:26 +00:00
										 |  |  |     support.run_doctest(pickle) | 
					
						
							| 
									
										
										
										
											2001-12-19 16:42:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-10-15 21:38:56 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2001-12-19 16:42:15 +00:00
										 |  |  |     test_main() |