]> granicus.if.org Git - python/commitdiff
Special support for pickling os.stat and os.stat_vfs results portably
authorMichael W. Hudson <mwh@python.net>
Wed, 6 Mar 2002 17:11:18 +0000 (17:11 +0000)
committerMichael W. Hudson <mwh@python.net>
Wed, 6 Mar 2002 17:11:18 +0000 (17:11 +0000)
(the types come from different modules on different platforms).

Added tests for pickling these types.

May be a bugfix candidate.

Lib/os.py
Lib/test/pickletester.py

index 42812aa55fc08df82720a1312f027908a114e0ee..f411f1fe09c6a9e511bc6aa6ddfdb754581ec6d6 100644 (file)
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -602,3 +602,23 @@ if _exists("fork"):
             stdout, stdin = popen2.popen4(cmd, bufsize)
             return stdin, stdout
         __all__.append("popen4")
+
+import copy_reg as _copy_reg
+
+def _make_stat_result(tup, dict):
+    return stat_result(tup, dict)
+
+def _pickle_stat_result(sr):
+    (type, args) = sr.__reduce__()
+    return (_make_stat_result, args)
+
+_copy_reg.pickle(stat_result, _pickle_stat_result,_make_stat_result)
+
+def _make_statvfs_result(tup, dict):
+    return statvfs_result(tup, dict)
+
+def _pickle_statvfs_result(sr):
+    (type, args) = sr.__reduce__()
+    return (_make_statvfs_result, args)
+
+_copy_reg.pickle(statvfs_result, _pickle_statvfs_result,_make_statvfs_result)
index e2d2580b8e5d0257fdd56b77629f503bab26b288..e16428fa33a7a62f941535e536ed99fda5c3b33e 100644 (file)
@@ -254,6 +254,17 @@ class AbstractPickleTests(unittest.TestCase):
         s = self.dumps(t)
         u = self.loads(s)
         self.assertEqual(t, u)        
+        import os
+        if hasattr(os, "stat"):
+            t = os.stat(os.curdir)
+            s = self.dumps(t)
+            u = self.loads(s)
+            self.assertEqual(t, u)
+        if hasattr(os, "statvfs"):
+            t = os.statvfs(os.curdir)
+            s = self.dumps(t)
+            u = self.loads(s)
+            self.assertEqual(t, u)
 
 class AbstractPickleModuleTests(unittest.TestCase):