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).
This commit is contained in:
Serhiy Storchaka 2016-12-07 11:11:12 +02:00
parent 43153e4d49
commit 4fc7942118
3 changed files with 24 additions and 3 deletions

View File

@ -68,7 +68,7 @@ class _Database(collections.MutableMapping):
# Handle the creation # Handle the creation
self._create(flag) self._create(flag)
self._update() self._update(flag)
def _create(self, flag): def _create(self, flag):
if flag == 'n': if flag == 'n':
@ -92,12 +92,17 @@ class _Database(collections.MutableMapping):
f.close() f.close()
# Read directory file into the in-memory index dict. # Read directory file into the in-memory index dict.
def _update(self): def _update(self, flag):
self._index = {} self._index = {}
try: try:
f = _io.open(self._dirfile, 'r', encoding="Latin-1") f = _io.open(self._dirfile, 'r', encoding="Latin-1")
except OSError: except OSError:
self._modified = not self._readonly 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: else:
self._modified = False self._modified = False
with f: with f:

View File

@ -252,6 +252,20 @@ class DumbDBMTestCase(unittest.TestCase):
f = dumbdbm.open(_fname, value) f = dumbdbm.open(_fname, value)
f.close() 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): def test_invalid_flag(self):
for flag in ('x', 'rf', None): for flag in ('x', 'rf', None):
with self.assertWarnsRegex(DeprecationWarning, with self.assertWarnsRegex(DeprecationWarning,

View File

@ -166,7 +166,9 @@ Library
------- -------
- Issue #28847: dbm.dumb now supports reading read-only files and no longer - 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 - Issue #27030: Unknown escapes consisting of ``'\'`` and an ASCII letter in
re.sub() replacement templates regular expressions now are errors. re.sub() replacement templates regular expressions now are errors.