summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-12-07 09:11:12 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-12-07 09:11:12 (GMT)
commit4fc7942118f017c214534d29b18f2f844e68c8cf (patch)
tree96d01af875793a86f0c33cd3d08ff04d9e9586af
parent43153e4d49100b46a603afa8deeca415eb18d180 (diff)
downloadcpython-4fc7942118f017c214534d29b18f2f844e68c8cf.zip
cpython-4fc7942118f017c214534d29b18f2f844e68c8cf.tar.gz
cpython-4fc7942118f017c214534d29b18f2f844e68c8cf.tar.bz2
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).
-rw-r--r--Lib/dbm/dumb.py9
-rw-r--r--Lib/test/test_dbm_dumb.py14
-rw-r--r--Misc/NEWS4
3 files changed, 24 insertions, 3 deletions
diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py
index 2296dbf..c3c4a66 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 df531d6..c2703d7 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,
diff --git a/Misc/NEWS b/Misc/NEWS
index d45f035..d076091 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.