[pypy-commit] pypy default: fix test_shelve

fijal noreply at buildbot.pypy.org
Thu May 15 17:33:36 CEST 2014


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: 
Changeset: r71530:e0db2ffd444e
Date: 2014-05-15 17:32 +0200
http://bitbucket.org/pypy/pypy/changeset/e0db2ffd444e/

Log:	fix test_shelve

diff --git a/lib_pypy/gdbm.py b/lib_pypy/gdbm.py
--- a/lib_pypy/gdbm.py
+++ b/lib_pypy/gdbm.py
@@ -53,6 +53,7 @@
 
     def __init__(self, filename, iflags, mode):
         res = lib.gdbm_open(filename, 0, iflags, mode, ffi.NULL)
+        self.size = -1
         if not res:
             self._raise_from_errno()
         self.ll_dbm = res
@@ -67,8 +68,14 @@
             raise error(os.strerror(ffi.errno))
         raise error(lib.gdbm_strerror(lib.gdbm_errno))
 
+    def __len__(self):
+        if self.size < 0:
+            self.size = len(self.keys())
+        return self.size
+
     def __setitem__(self, key, value):
         self._check_closed()
+        self._size = -1
         r = lib.gdbm_store(self.ll_dbm, _fromstr(key), _fromstr(value),
                            lib.GDBM_REPLACE)
         if r < 0:


More information about the pypy-commit mailing list