summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael W. Hudson <mwh@python.net>2002-03-06 17:11:18 (GMT)
committerMichael W. Hudson <mwh@python.net>2002-03-06 17:11:18 (GMT)
commit0e02530a798807db572968ba914ae3694d71eb91 (patch)
tree9e7fad6916145181df1cc9ee59eba394eb753989
parentce358e3015bc8cafdf949dee624b01f4a38bfad2 (diff)
downloadcpython-0e02530a798807db572968ba914ae3694d71eb91.zip
cpython-0e02530a798807db572968ba914ae3694d71eb91.tar.gz
cpython-0e02530a798807db572968ba914ae3694d71eb91.tar.bz2
Special support for pickling os.stat and os.stat_vfs results portably
(the types come from different modules on different platforms). Added tests for pickling these types. May be a bugfix candidate.
-rw-r--r--Lib/os.py20
-rw-r--r--Lib/test/pickletester.py11
2 files changed, 31 insertions, 0 deletions
diff --git a/Lib/os.py b/Lib/os.py
index 42812aa..f411f1f 100644
--- 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)
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index e2d2580..e16428f 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -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):