mirror of https://github.com/python/cpython
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:
parent
ddacf96868
commit
659e7f44e2
|
@ -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")
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue