summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAndrew M. Kuchling <amk@amk.ca>2006-12-22 15:04:45 (GMT)
committerAndrew M. Kuchling <amk@amk.ca>2006-12-22 15:04:45 (GMT)
commitdc26758ffeb33f6d59cb30b0019da9252e0cea1c (patch)
treef844652e4abd60408be98492015b995f1bee553f /Lib
parentb29069d6b64e119f97ca860433e74d8dc2eb3707 (diff)
downloadcpython-dc26758ffeb33f6d59cb30b0019da9252e0cea1c.zip
cpython-dc26758ffeb33f6d59cb30b0019da9252e0cea1c.tar.gz
cpython-dc26758ffeb33f6d59cb30b0019da9252e0cea1c.tar.bz2
[Bug #802128] Make the mode argument of dumbdbm actually work the way it's
described, and add a test for it. 2.5 bugfix candidate, maybe; arguably this patch changes the API of dumbdbm and shouldn't be added in a point-release.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/dumbdbm.py12
-rw-r--r--Lib/test/test_dumbdbm.py14
2 files changed, 23 insertions, 3 deletions
diff --git a/Lib/dumbdbm.py b/Lib/dumbdbm.py
index 84a7665..9e9ffcc 100644
--- a/Lib/dumbdbm.py
+++ b/Lib/dumbdbm.py
@@ -68,7 +68,8 @@ class _Database(UserDict.DictMixin):
try:
f = _open(self._datfile, 'r')
except IOError:
- f = _open(self._datfile, 'w', self._mode)
+ f = _open(self._datfile, 'w')
+ self._chmod(self._datfile)
f.close()
self._update()
@@ -106,7 +107,8 @@ class _Database(UserDict.DictMixin):
except self._os.error:
pass
- f = self._open(self._dirfile, 'w', self._mode)
+ f = self._open(self._dirfile, 'w')
+ self._chmod(self._dirfile)
for key, pos_and_siz_pair in self._index.iteritems():
f.write("%r, %r\n" % (key, pos_and_siz_pair))
f.close()
@@ -152,7 +154,8 @@ class _Database(UserDict.DictMixin):
# the in-memory index dict, and append one to the directory file.
def _addkey(self, key, pos_and_siz_pair):
self._index[key] = pos_and_siz_pair
- f = _open(self._dirfile, 'a', self._mode)
+ f = _open(self._dirfile, 'a')
+ self._chmod(self._dirfile)
f.write("%r, %r\n" % (key, pos_and_siz_pair))
f.close()
@@ -214,6 +217,9 @@ class _Database(UserDict.DictMixin):
__del__ = close
+ def _chmod (self, file):
+ if hasattr(self._os, 'chmod'):
+ self._os.chmod(file, self._mode)
def open(file, flag=None, mode=0666):
diff --git a/Lib/test/test_dumbdbm.py b/Lib/test/test_dumbdbm.py
index 63b14b0..a1e34da 100644
--- a/Lib/test/test_dumbdbm.py
+++ b/Lib/test/test_dumbdbm.py
@@ -38,6 +38,20 @@ class DumbDBMTestCase(unittest.TestCase):
self.read_helper(f)
f.close()
+ def test_dumbdbm_creation_mode(self):
+ # On platforms without chmod, don't do anything.
+ if not hasattr(os, 'chmod'):
+ return
+
+ f = dumbdbm.open(_fname, 'c', 0632)
+ f.close()
+
+ import stat
+ st = os.stat(_fname + '.dat')
+ self.assertEqual(stat.S_IMODE(st.st_mode), 0632)
+ st = os.stat(_fname + '.dir')
+ self.assertEqual(stat.S_IMODE(st.st_mode), 0632)
+
def test_close_twice(self):
f = dumbdbm.open(_fname)
f['a'] = 'b'