Kaydet (Commit) 4fc79421 authored tarafından Serhiy Storchaka's avatar Serhiy Storchaka

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).
üst 43153e4d
......@@ -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:
......
......@@ -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,
......
......@@ -166,7 +166,9 @@ Library
-------
- Issue #28847: dbm.dumb now supports reading read-only files and no longer
writes the index file when it is not changed.
writes the index file when it is not changed. 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).
- Issue #27030: Unknown escapes consisting of ``'\'`` and an ASCII letter in
re.sub() replacement templates regular expressions now are errors.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment