Commit 94eceeb8 authored by briancurtin's avatar briancurtin

Fix #11491. When dbm.open was called with a file which already exists and

the "flag" argument is "n", dbm.error was being raised. As documented,
dbm.open(...,flag='n') will now "Always create a new, empty database,
open for reading and writing", regardless of a previous file existing.
parent 25032495
...@@ -68,10 +68,10 @@ def open(file, flag = 'r', mode = 0o666): ...@@ -68,10 +68,10 @@ def open(file, flag = 'r', mode = 0o666):
if not _defaultmod: if not _defaultmod:
raise ImportError("no dbm clone found; tried %s" % _names) raise ImportError("no dbm clone found; tried %s" % _names)
# guess the type of an existing database # guess the type of an existing database, if not creating a new one
result = whichdb(file) result = whichdb(file) if 'n' not in flag else None
if result is None: if result is None:
# db doesn't exist # db doesn't exist or 'n' flag was specified to create a new db
if 'c' in flag or 'n' in flag: if 'c' in flag or 'n' in flag:
# file doesn't exist and the new flag was used so use default type # file doesn't exist and the new flag was used so use default type
mod = _defaultmod mod = _defaultmod
......
...@@ -70,6 +70,14 @@ class AnyDBMTestCase(unittest.TestCase): ...@@ -70,6 +70,14 @@ class AnyDBMTestCase(unittest.TestCase):
self.read_helper(f) self.read_helper(f)
f.close() f.close()
def test_anydbm_creation_n_file_exists_with_invalid_contents(self):
with open(_fname, "w") as w:
pass # create an empty file
f = dbm.open(_fname, 'n')
self.addCleanup(f.close)
self.assertEqual(len(f), 0)
def test_anydbm_modification(self): def test_anydbm_modification(self):
self.init_db() self.init_db()
f = dbm.open(_fname, 'c') f = dbm.open(_fname, 'c')
......
...@@ -154,6 +154,7 @@ Terrence Cole ...@@ -154,6 +154,7 @@ Terrence Cole
Benjamin Collar Benjamin Collar
Jeffery Collins Jeffery Collins
Paul Colomiets Paul Colomiets
Denver Coneybeare
Matt Conway Matt Conway
David M. Cooke David M. Cooke
Greg Copeland Greg Copeland
......
...@@ -40,6 +40,10 @@ Core and Builtins ...@@ -40,6 +40,10 @@ Core and Builtins
Library Library
------- -------
- Issue #11491: dbm.error is no longer raised when dbm.open is called with
the "n" as the flag argument and the file exists. The behavior matches
the documentation and general logic.
- Issue #11131: Fix sign of zero in decimal.Decimal plus and minus - Issue #11131: Fix sign of zero in decimal.Decimal plus and minus
operations when the rounding mode is ROUND_FLOOR. operations when the rounding mode is ROUND_FLOOR.
......
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