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:
parent
43153e4d49
commit
4fc7942118
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue