mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
Issue 1592: Better error reporting for operations on closed shelves.
This commit is contained in:
parent
4982d5d04a
commit
8c664e8628
3 changed files with 29 additions and 1 deletions
|
@ -73,6 +73,16 @@ import warnings
|
|||
|
||||
__all__ = ["Shelf","BsdDbShelf","DbfilenameShelf","open"]
|
||||
|
||||
class _ClosedDict(UserDict.DictMixin):
|
||||
'Marker for a closed dict. Access attempts raise a ValueError.'
|
||||
|
||||
def closed(self, *args):
|
||||
raise ValueError('invalid operation on closed shelf')
|
||||
__getitem__ = __setitem__ = __delitem__ = keys = closed
|
||||
|
||||
def __repr__(self):
|
||||
return '<Closed Dictionary>'
|
||||
|
||||
class Shelf(UserDict.DictMixin):
|
||||
"""Base class for shelf implementations.
|
||||
|
||||
|
@ -136,7 +146,7 @@ class Shelf(UserDict.DictMixin):
|
|||
self.dict.close()
|
||||
except AttributeError:
|
||||
pass
|
||||
self.dict = 0
|
||||
self.dict = _ClosedDict()
|
||||
|
||||
def __del__(self):
|
||||
if not hasattr(self, 'writeback'):
|
||||
|
|
|
@ -8,6 +8,21 @@ class TestCase(unittest.TestCase):
|
|||
|
||||
fn = "shelftemp" + os.extsep + "db"
|
||||
|
||||
def test_close(self):
|
||||
d1 = {}
|
||||
s = shelve.Shelf(d1, protocol=2, writeback=False)
|
||||
s['key1'] = [1,2,3,4]
|
||||
self.assertEqual(s['key1'], [1,2,3,4])
|
||||
self.assertEqual(len(s), 1)
|
||||
s.close()
|
||||
self.assertRaises(ValueError, len, s)
|
||||
try:
|
||||
s['key1']
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
self.fail('Closed shelf should not find a key')
|
||||
|
||||
def test_ascii_file_shelf(self):
|
||||
try:
|
||||
s = shelve.open(self.fn, protocol=0)
|
||||
|
|
|
@ -26,6 +26,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue 1592: Improve error reporting when operations are attempted
|
||||
on a closed shelf.
|
||||
|
||||
- Deprecate the "ast" parser function aliases.
|
||||
|
||||
- Issue #3120: On 64-bit Windows the subprocess module was truncating handles.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue