]> granicus.if.org Git - python/commitdiff
Restore performance of some dumb database methods (regression introduced by #19385).
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 28 May 2014 15:49:52 +0000 (18:49 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 28 May 2014 15:49:52 +0000 (18:49 +0300)
Lib/dbm/dumb.py

index 15dad9cee607218bb41cc1d7e2bd504c7be1eab0..17854ee8f4d15c8c5ceb71486733515e4214b03c 100644 (file)
@@ -216,8 +216,10 @@ class _Database(collections.MutableMapping):
         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 @@ class _Database(collections.MutableMapping):
     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()