Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 659e7f4

Browse files
committed
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.
1 parent ddacf96 commit 659e7f4

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

Lib/bsddb/dbshelve.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ class DBShelf(DictMixin):
8686
"""
8787
def __init__(self, dbenv=None):
8888
self.db = db.DB(dbenv)
89+
self._closed = True
8990
self.binary = 1
9091

9192

@@ -128,6 +129,23 @@ def keys(self, txn=None):
128129
return self.db.keys()
129130

130131

132+
def open(self, *args, **kwargs):
133+
self.db.open(*args, **kwargs)
134+
self._closed = False
135+
136+
137+
def close(self, *args, **kwargs):
138+
self.db.close(*args, **kwargs)
139+
self._closed = True
140+
141+
142+
def __repr__(self):
143+
if self._closed:
144+
return '<DBShelf @ 0x%x - closed>' % (id(self))
145+
else:
146+
return repr(dict(self.iteritems()))
147+
148+
131149
def items(self, txn=None):
132150
if txn != None:
133151
items = self.db.items(txn)
@@ -156,8 +174,7 @@ def __append(self, value, txn=None):
156174

157175
def append(self, value, txn=None):
158176
if self.get_type() == db.DB_RECNO:
159-
self.append = self.__append
160-
return self.append(value, txn=txn)
177+
return self.__append(value, txn=txn)
161178
raise DBShelveError("append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO")
162179

163180

0 commit comments

Comments
 (0)