diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-07 09:00:06 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-12-07 09:00:06 (GMT) |
commit | 520348e5c0284668738e0ba98b86e7d1a5fd8600 (patch) | |
tree | b8dc13658241ddcedc656f37e39b220b9125cf4d /Lib/dbm | |
parent | 3ca43ed956d0806523751a6ec3858b3065fa96cb (diff) | |
parent | 028ace1ccbabd40f6491b0337054a341be47a39d (diff) | |
download | cpython-520348e5c0284668738e0ba98b86e7d1a5fd8600.zip cpython-520348e5c0284668738e0ba98b86e7d1a5fd8600.tar.gz cpython-520348e5c0284668738e0ba98b86e7d1a5fd8600.tar.bz2 |
Issue #28847: dbm.dumb now supports reading read-only files and no longer
writes the index file when it is not changed.
Diffstat (limited to 'Lib/dbm')
-rw-r--r-- | Lib/dbm/dumb.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py index e7c6440..2296dbf 100644 --- a/Lib/dbm/dumb.py +++ b/Lib/dbm/dumb.py @@ -97,8 +97,9 @@ class _Database(collections.MutableMapping): try: f = _io.open(self._dirfile, 'r', encoding="Latin-1") except OSError: - pass + self._modified = not self._readonly else: + self._modified = False with f: for line in f: line = line.rstrip() @@ -113,7 +114,7 @@ class _Database(collections.MutableMapping): # CAUTION: It's vital that _commit() succeed, and _commit() can # be called from __del__(). Therefore we must never reference a # global in this routine. - if self._index is None: + if self._index is None or not self._modified: return # nothing to do try: @@ -197,6 +198,7 @@ class _Database(collections.MutableMapping): elif not isinstance(val, (bytes, bytearray)): raise TypeError("values must be bytes or strings") self._verify_open() + self._modified = True if key not in self._index: self._addkey(key, self._addval(val)) else: @@ -229,6 +231,7 @@ class _Database(collections.MutableMapping): if isinstance(key, str): key = key.encode('utf-8') self._verify_open() + self._modified = True # The blocks used by the associated value are lost. del self._index[key] # XXX It's unclear why we do a _commit() here (the code always |