14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport shelve 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport glob 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotest_support.import_module('anydbm', deprecated=True) 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestCase(unittest.TestCase): 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fn = "shelftemp" + os.extsep + "db" 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_close(self): 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d1 = {} 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.Shelf(d1, protocol=2, writeback=False) 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = [1,2,3,4] 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], [1,2,3,4]) 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(s), 1) 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, len, s) 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ValueError: 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail('Closed shelf should not find a key') 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_ascii_file_shelf(self): 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.open(self.fn, protocol=0) 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = (1,2,3,4) 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], (1,2,3,4)) 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in glob.glob(self.fn+"*"): 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.unlink(f) 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_binary_file_shelf(self): 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.open(self.fn, protocol=1) 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = (1,2,3,4) 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], (1,2,3,4)) 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in glob.glob(self.fn+"*"): 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.unlink(f) 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_proto2_file_shelf(self): 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.open(self.fn, protocol=2) 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = (1,2,3,4) 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], (1,2,3,4)) 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in glob.glob(self.fn+"*"): 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.unlink(f) 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_in_memory_shelf(self): 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d1 = {} 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.Shelf(d1, protocol=0) 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = (1,2,3,4) 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], (1,2,3,4)) 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d2 = {} 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.Shelf(d2, protocol=1) 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = (1,2,3,4) 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], (1,2,3,4)) 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(d1), 1) 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(d1, d2) 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_mutable_entry(self): 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d1 = {} 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.Shelf(d1, protocol=2, writeback=False) 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = [1,2,3,4] 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], [1,2,3,4]) 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'].append(5) 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], [1,2,3,4]) 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d2 = {} 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.Shelf(d2, protocol=2, writeback=True) 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'] = [1,2,3,4] 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], [1,2,3,4]) 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key1'].append(5) 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s['key1'], [1,2,3,4,5]) 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(d1), 1) 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(d2), 1) 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_writeback_also_writes_immediately(self): 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Issue 5754 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao d = {} 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = shelve.Shelf(d, writeback=True) 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key'] = [1] 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao p1 = d['key'] # Will give a KeyError if backing store not updated 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s['key'].append(2) 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.close() 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao p2 = d['key'] 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(p1, p2) # Write creates new object in store 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import mapping_tests 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestShelveBase(mapping_tests.BasicTestMappingProtocol): 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fn = "shelftemp.db" 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao counter = 0 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, *args, **kw): 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._db = [] 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao mapping_tests.BasicTestMappingProtocol.__init__(self, *args, **kw) 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao type2test = shelve.Shelf 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _reference(self): 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return {"key1":"value1", "key2":2, "key3":(1,2,3)} 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def _empty_mapping(self): 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if self._in_mem: 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x= shelve.Shelf({}, **self._args) 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.counter+=1 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao x= shelve.open(self.fn+str(self.counter), **self._args) 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._db.append(x) 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return x 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def tearDown(self): 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for db in self._db: 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao db.close() 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self._db = [] 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not self._in_mem: 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for f in glob.glob(self.fn+"*"): 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.unlink(f) 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestAsciiFileShelve(TestShelveBase): 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _args={'protocol':0} 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _in_mem = False 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestBinaryFileShelve(TestShelveBase): 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _args={'protocol':1} 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _in_mem = False 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestProto2FileShelve(TestShelveBase): 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _args={'protocol':2} 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _in_mem = False 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestAsciiMemShelve(TestShelveBase): 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _args={'protocol':0} 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _in_mem = True 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestBinaryMemShelve(TestShelveBase): 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _args={'protocol':1} 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _in_mem = True 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass TestProto2MemShelve(TestShelveBase): 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _args={'protocol':2} 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao _in_mem = True 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest( 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestAsciiFileShelve, 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestBinaryFileShelve, 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestProto2FileShelve, 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestAsciiMemShelve, 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestBinaryMemShelve, 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestProto2MemShelve, 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TestCase 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__": 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 164