[Python-3000-checkins] r58452 - python/branches/py3k/Lib/bsddb/dbshelve.py

gregory.p.smith python-3000-checkins at python.org
Sun Oct 14 01:23:58 CEST 2007


Author: gregory.p.smith
Date: Sun Oct 14 01:23:58 2007
New Revision: 58452

Modified:
   python/branches/py3k/Lib/bsddb/dbshelve.py
Log:
Merge 58450: fix uncollectable reference caused by bsddb.db.DBShelf.append 
Adds a DBShelf __repr__ method to not raise an exception when the DB is closed.


Modified: python/branches/py3k/Lib/bsddb/dbshelve.py
==============================================================================
--- python/branches/py3k/Lib/bsddb/dbshelve.py	(original)
+++ python/branches/py3k/Lib/bsddb/dbshelve.py	Sun Oct 14 01:23:58 2007
@@ -86,6 +86,7 @@
     """
     def __init__(self, dbenv=None):
         self.db = db.DB(dbenv)
+        self._closed = True
         self.binary = 1
 
 
@@ -128,6 +129,23 @@
             return self.db.keys()
 
 
+    def open(self, *args, **kwargs):
+        self.db.open(*args, **kwargs)
+        self._closed = False
+
+
+    def close(self, *args, **kwargs):
+        self.db.close(*args, **kwargs)
+        self._closed = True
+
+
+    def __repr__(self):
+        if self._closed:
+            return '<DBShelf @ 0x%x - closed>' % (id(self))
+        else:
+            return repr(dict(self.iteritems()))
+
+
     def items(self, txn=None):
         if txn != None:
             items = self.db.items(txn)
@@ -156,8 +174,7 @@
 
     def append(self, value, txn=None):
         if self.get_type() == db.DB_RECNO:
-            self.append = self.__append
-            return self.append(value, txn=txn)
+            return self.__append(value, txn=txn)
         raise DBShelveError("append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO")
 
 


More information about the Python-3000-checkins mailing list