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.
This commit is contained in:
Gregory P. Smith 2007-10-13 23:23:58 +00:00
parent ddacf96868
commit 659e7f44e2
1 changed files with 19 additions and 2 deletions

View File

@ -86,6 +86,7 @@ class DBShelf(DictMixin):
""" """
def __init__(self, dbenv=None): def __init__(self, dbenv=None):
self.db = db.DB(dbenv) self.db = db.DB(dbenv)
self._closed = True
self.binary = 1 self.binary = 1
@ -128,6 +129,23 @@ class DBShelf(DictMixin):
return self.db.keys() 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): def items(self, txn=None):
if txn != None: if txn != None:
items = self.db.items(txn) items = self.db.items(txn)
@ -156,8 +174,7 @@ class DBShelf(DictMixin):
def append(self, value, txn=None): def append(self, value, txn=None):
if self.get_type() == db.DB_RECNO: 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") raise DBShelveError("append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO")