diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2006-12-22 15:04:45 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2006-12-22 15:04:45 (GMT) |
commit | dc26758ffeb33f6d59cb30b0019da9252e0cea1c (patch) | |
tree | f844652e4abd60408be98492015b995f1bee553f /Lib | |
parent | b29069d6b64e119f97ca860433e74d8dc2eb3707 (diff) | |
download | cpython-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.py | 12 | ||||
-rw-r--r-- | Lib/test/test_dumbdbm.py | 14 |
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' |