[Python-checkins] cpython (merge 3.4 -> default): Restore performance of some dumb database methods (regression introduced by

serhiy.storchaka python-checkins at python.org
Wed May 28 17:51:03 CEST 2014


http://hg.python.org/cpython/rev/2e59e0b579e5
changeset:   90886:2e59e0b579e5
parent:      90884:c112a91ad609
parent:      90885:95207bcd8298
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Wed May 28 18:50:12 2014 +0300
summary:
  Restore performance of some dumb database methods (regression introduced by #19385).

files:
  Lib/dbm/dumb.py |  27 +++++++++++++++++++--------
  1 files changed, 19 insertions(+), 8 deletions(-)


diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py
--- a/Lib/dbm/dumb.py
+++ b/Lib/dbm/dumb.py
@@ -216,8 +216,10 @@
         self._commit()
 
     def keys(self):
-        self._verify_open()
-        return list(self._index.keys())
+        try:
+            return list(self._index)
+        except TypeError:
+            raise error('DBM object has already been closed') from None
 
     def items(self):
         self._verify_open()
@@ -226,17 +228,26 @@
     def __contains__(self, key):
         if isinstance(key, str):
             key = key.encode('utf-8')
-        self._verify_open()
-        return key in self._index
+        try:
+            return key in self._index
+        except TypeError:
+            if self._index is None:
+                raise error('DBM object has already been closed') from None
+            else:
+                raise
 
     def iterkeys(self):
-        self._verify_open()
-        return iter(self._index.keys())
+        try:
+            return iter(self._index)
+        except TypeError:
+            raise error('DBM object has already been closed') from None
     __iter__ = iterkeys
 
     def __len__(self):
-        self._verify_open()
-        return len(self._index)
+        try:
+            return len(self._index)
+        except TypeError:
+            raise error('DBM object has already been closed') from None
 
     def close(self):
         self._commit()

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list