diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-07 11:11:12 +0200 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-07 11:11:12 +0200 |
commit | 4fc7942118f017c214534d29b18f2f844e68c8cf (patch) | |
tree | 96d01af875793a86f0c33cd3d08ff04d9e9586af /Lib | |
parent | 43153e4d49100b46a603afa8deeca415eb18d180 (diff) | |
download | cpython-git-4fc7942118f017c214534d29b18f2f844e68c8cf.tar.gz |
Issue #28847: A deprecation warning is now emitted if the index file is missed
and recreated in the 'r' and 'w' modes (will be an error in future Python
releases).
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/dbm/dumb.py | 9 | ||||
-rw-r--r-- | Lib/test/test_dbm_dumb.py | 14 |
2 files changed, 21 insertions, 2 deletions
diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py index 2296dbfd54..c3c4a66601 100644 --- a/Lib/dbm/dumb.py +++ b/Lib/dbm/dumb.py @@ -68,7 +68,7 @@ class _Database(collections.MutableMapping): # Handle the creation self._create(flag) - self._update() + self._update(flag) def _create(self, flag): if flag == 'n': @@ -92,12 +92,17 @@ class _Database(collections.MutableMapping): f.close() # Read directory file into the in-memory index dict. - def _update(self): + def _update(self, flag): self._index = {} try: f = _io.open(self._dirfile, 'r', encoding="Latin-1") except OSError: self._modified = not self._readonly + if flag not in ('c', 'n'): + import warnings + warnings.warn("The index file is missing, the " + "semantics of the 'c' flag will be used.", + DeprecationWarning, stacklevel=4) else: self._modified = False with f: diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py index df531d64e4..c2703d7e0b 100644 --- a/Lib/test/test_dbm_dumb.py +++ b/Lib/test/test_dbm_dumb.py @@ -252,6 +252,20 @@ class DumbDBMTestCase(unittest.TestCase): f = dumbdbm.open(_fname, value) f.close() + def test_missing_index(self): + with dumbdbm.open(_fname, 'n') as f: + pass + os.unlink(_fname + '.dir') + for value in ('r', 'w'): + with self.assertWarnsRegex(DeprecationWarning, + "The index file is missing, the " + "semantics of the 'c' flag will " + "be used."): + f = dumbdbm.open(_fname, value) + f.close() + self.assertEqual(os.path.exists(_fname + '.dir'), value == 'w') + self.assertFalse(os.path.exists(_fname + '.bak')) + def test_invalid_flag(self): for flag in ('x', 'rf', None): with self.assertWarnsRegex(DeprecationWarning, |