# Handle the creation
self._create(flag)
- self._update()
+ self._update(flag)
def _create(self, flag):
if flag == 'n':
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:
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,
-------
- 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.