@@ -364,7 +364,7 @@ def test_on_suber():
364
364
assert not db .opened
365
365
366
366
367
- def test_B64_suber ():
367
+ def test_b64_suber ():
368
368
"""
369
369
Test B64Suber LMDBer sub database class
370
370
"""
@@ -752,7 +752,7 @@ def test_iodup_suber():
752
752
assert not db .opened
753
753
754
754
755
- def test_B64_iodup_suber ():
755
+ def test_b64_iodup_suber ():
756
756
"""
757
757
Test B64IoDupSuber LMDBer sub database class
758
758
"""
@@ -1306,6 +1306,284 @@ def test_on_iodup_suber():
1306
1306
assert not os .path .exists (db .path )
1307
1307
assert not db .opened
1308
1308
1309
+ def test_b64_oniodup_suber ():
1310
+ """
1311
+ Test B64OnIoDupSuber LMDBer sub database class
1312
+ """
1313
+
1314
+ with dbing .openLMDB () as db :
1315
+ assert isinstance (db , dbing .LMDBer )
1316
+ assert db .name == "test"
1317
+ assert db .opened
1318
+
1319
+ onbuber = subing .B64OnIoDupSuber (db = db , subkey = 'bags.' )
1320
+ assert isinstance (onbuber , subing .B64OnIoDupSuber )
1321
+ assert onbuber .sdb .flags ()["dupsort" ]
1322
+
1323
+ k = "a"
1324
+ j = "b"
1325
+
1326
+ w = ("Blue" , "dog" )
1327
+ x = ("Green" , "tree" )
1328
+ y = "Red"
1329
+ z = ("White" ,)
1330
+
1331
+ # test addOn remOn
1332
+ assert onbuber .addOn (keys = k , on = 0 , val = w )
1333
+ assert onbuber .getOn (keys = k , on = 0 ) == [w ]
1334
+ assert onbuber .addOn (keys = k , on = 0 , val = x )
1335
+ assert onbuber .getOn (keys = k , on = 0 ) == [w , x ]
1336
+ assert onbuber .addOn (keys = k , on = 1 , val = y )
1337
+ assert onbuber .getOn (keys = k , on = 1 ) == [(y ,)]
1338
+ assert onbuber .addOn (keys = k , on = 1 , val = z )
1339
+ assert onbuber .getOn (keys = k , on = 1 ) == [(y ,), z ]
1340
+
1341
+ assert onbuber .cntOn (keys = (k ,)) == 4
1342
+
1343
+ items = [item for item in onbuber .getOnItemIter (keys = k )]
1344
+ assert items == [(('a' ,), 0 , ('Blue' , 'dog' )),
1345
+ (('a' ,), 0 , ('Green' , 'tree' )),
1346
+ (('a' ,), 1 , ('Red' ,)),
1347
+ (('a' ,), 1 , ('White' ,))]
1348
+
1349
+ assert onbuber .remOn (keys = k , on = 0 , val = w )
1350
+ assert onbuber .remOn (keys = k , on = 1 )
1351
+ items = [item for item in onbuber .getOnItemIter (keys = k )]
1352
+ assert items == [(('a' ,), 0 , ('Green' , 'tree' ))]
1353
+
1354
+ assert onbuber .remOn (keys = k , on = 0 , val = x )
1355
+ assert onbuber .cntOn (keys = (k ,)) == 0
1356
+
1357
+ # test append
1358
+ assert 0 == onbuber .appendOn (keys = (j ,), val = w )
1359
+ assert 1 == onbuber .appendOn (keys = (j ,), val = x )
1360
+ assert 2 == onbuber .appendOn (keys = (j ,), val = y )
1361
+ assert 3 == onbuber .appendOn (keys = (j ,), val = z )
1362
+
1363
+ assert onbuber .cntOn (keys = (j ,)) == 4
1364
+ assert onbuber .cntOn (keys = (j ,), on = 2 ) == 2
1365
+ assert onbuber .cntOn (keys = (j ,), on = 4 ) == 0
1366
+
1367
+ items = [(keys , val ) for keys , val in onbuber .getItemIter ()]
1368
+ assert items == [(('b' , '00000000000000000000000000000000' ), ('Blue' , 'dog' )),
1369
+ (('b' , '00000000000000000000000000000001' ), ('Green' , 'tree' )),
1370
+ (('b' , '00000000000000000000000000000002' ), ('Red' ,)),
1371
+ (('b' , '00000000000000000000000000000003' ), ('White' ,))]
1372
+
1373
+
1374
+
1375
+ # test getOnIter
1376
+ vals = [val for val in onbuber .getOnIter (keys = j )]
1377
+ assert vals == [w , x , (y ,), z ]
1378
+
1379
+ vals = [val for val in onbuber .getOnIter (keys = j , on = 2 )]
1380
+ assert vals == [(y ,), z ]
1381
+
1382
+ # test getOnItemIter
1383
+ items = [item for item in onbuber .getOnItemIter (keys = j )]
1384
+ assert items == [(('b' ,), 0 , ('Blue' , 'dog' )),
1385
+ (('b' ,), 1 , ('Green' , 'tree' )),
1386
+ (('b' ,), 2 , ('Red' ,)),
1387
+ (('b' ,), 3 , ('White' ,))]
1388
+
1389
+
1390
+ items = [item for item in onbuber .getOnItemIter (keys = j , on = 2 )]
1391
+ assert items == [(('b' ,), 2 , ('Red' ,)), (('b' ,), 3 , ('White' ,))]
1392
+
1393
+ # test add duplicates
1394
+ assert onbuber .add (keys = dbing .onKey (k , 0 ), val = w )
1395
+ assert onbuber .add (keys = dbing .onKey (k , 1 ), val = x )
1396
+ assert onbuber .add (keys = dbing .onKey ("bc" , 0 ), val = y )
1397
+ assert onbuber .add (keys = dbing .onKey ("ac" , 0 ), val = z )
1398
+
1399
+ assert onbuber .cntOn (keys = (k ,)) == 2
1400
+ assert onbuber .cntOn (keys = ("bc" ,), on = 2 ) == 0
1401
+ assert onbuber .cntOn (keys = "" ) == 8
1402
+
1403
+ items = [(keys , val ) for keys , val in onbuber .getItemIter ()]
1404
+ assert items == [(('a' , '00000000000000000000000000000000' ), ('Blue' , 'dog' )),
1405
+ (('a' , '00000000000000000000000000000001' ), ('Green' , 'tree' )),
1406
+ (('ac' , '00000000000000000000000000000000' ), ('White' ,)),
1407
+ (('b' , '00000000000000000000000000000000' ), ('Blue' , 'dog' )),
1408
+ (('b' , '00000000000000000000000000000001' ), ('Green' , 'tree' )),
1409
+ (('b' , '00000000000000000000000000000002' ), ('Red' ,)),
1410
+ (('b' , '00000000000000000000000000000003' ), ('White' ,)),
1411
+ (('bc' , '00000000000000000000000000000000' ), ('Red' ,))]
1412
+
1413
+ # test getOnItemIter getOnIter
1414
+ items = [item for item in onbuber .getOnItemIter (keys = k )]
1415
+ assert items == [(('a' ,), 0 , ('Blue' , 'dog' )), (('a' ,), 1 , ('Green' , 'tree' ))]
1416
+
1417
+ vals = [val for val in onbuber .getOnIter (keys = k )]
1418
+ assert vals == [('Blue' , 'dog' ), ('Green' , 'tree' )]
1419
+
1420
+ vals = [val for val in onbuber .getOnIter (keys = (k , ))]
1421
+ assert vals == [('Blue' , 'dog' ), ('Green' , 'tree' )]
1422
+
1423
+ items = [item for item in onbuber .getOnItemIter (keys = (k , ))]
1424
+ assert items == [(('a' ,), 0 , ('Blue' , 'dog' )),
1425
+ (('a' ,), 1 , ('Green' , 'tree' ))]
1426
+
1427
+ items = [item for item in onbuber .getOnItemIter (keys = (k , "" ))]
1428
+ assert items == []
1429
+
1430
+ vals = [val for val in onbuber .getOnIter (keys = (k , "" ))]
1431
+ assert vals == []
1432
+
1433
+ items = [item for item in onbuber .getOnItemIter (keys = '' )]
1434
+ assert items == [(('a' ,), 0 , ('Blue' , 'dog' )),
1435
+ (('a' ,), 1 , ('Green' , 'tree' )),
1436
+ (('ac' ,), 0 , ('White' ,)),
1437
+ (('b' ,), 0 , ('Blue' , 'dog' )),
1438
+ (('b' ,), 1 , ('Green' , 'tree' )),
1439
+ (('b' ,), 2 , ('Red' ,)),
1440
+ (('b' ,), 3 , ('White' ,)),
1441
+ (('bc' ,), 0 , ('Red' ,))]
1442
+
1443
+
1444
+ vals = [val for val in onbuber .getOnIter (keys = '' )]
1445
+ assert vals == [('Blue' , 'dog' ),
1446
+ ('Green' , 'tree' ),
1447
+ ('White' ,),
1448
+ ('Blue' , 'dog' ),
1449
+ ('Green' , 'tree' ),
1450
+ ('Red' ,),
1451
+ ('White' ,),
1452
+ ('Red' ,)]
1453
+
1454
+ items = [item for item in onbuber .getOnItemIter ()]
1455
+ assert items == [(('a' ,), 0 , ('Blue' , 'dog' )),
1456
+ (('a' ,), 1 , ('Green' , 'tree' )),
1457
+ (('ac' ,), 0 , ('White' ,)),
1458
+ (('b' ,), 0 , ('Blue' , 'dog' )),
1459
+ (('b' ,), 1 , ('Green' , 'tree' )),
1460
+ (('b' ,), 2 , ('Red' ,)),
1461
+ (('b' ,), 3 , ('White' ,)),
1462
+ (('bc' ,), 0 , ('Red' ,))]
1463
+
1464
+
1465
+ vals = [val for val in onbuber .getOnIter ()]
1466
+ assert vals == [('Blue' , 'dog' ),
1467
+ ('Green' , 'tree' ),
1468
+ ('White' ,),
1469
+ ('Blue' , 'dog' ),
1470
+ ('Green' , 'tree' ),
1471
+ ('Red' ,),
1472
+ ('White' ,),
1473
+ ('Red' ,)]
1474
+
1475
+ # test with duplicates
1476
+ assert onbuber .add (keys = dbing .onKey (j , 0 ), val = z )
1477
+ assert onbuber .add (keys = dbing .onKey (j , 1 ), val = y )
1478
+ assert onbuber .add (keys = dbing .onKey (j , 2 ), val = x )
1479
+ assert onbuber .add (keys = dbing .onKey (j , 3 ), val = w )
1480
+
1481
+ assert onbuber .cntOn (keys = (j ,)) == 8
1482
+ assert onbuber .cntOn (keys = (j ,), on = 2 ) == 4
1483
+ assert onbuber .cntOn (keys = (j ,), on = 4 ) == 0
1484
+
1485
+ items = [(keys , val ) for keys , val in onbuber .getItemIter (keys = (j , "" ))]
1486
+ assert items == [(('b' , '00000000000000000000000000000000' ), ('Blue' , 'dog' )),
1487
+ (('b' , '00000000000000000000000000000000' ), ('White' ,)),
1488
+ (('b' , '00000000000000000000000000000001' ), ('Green' , 'tree' )),
1489
+ (('b' , '00000000000000000000000000000001' ), ('Red' ,)),
1490
+ (('b' , '00000000000000000000000000000002' ), ('Red' ,)),
1491
+ (('b' , '00000000000000000000000000000002' ), ('Green' , 'tree' )),
1492
+ (('b' , '00000000000000000000000000000003' ), ('White' ,)),
1493
+ (('b' , '00000000000000000000000000000003' ), ('Blue' , 'dog' ))]
1494
+
1495
+
1496
+ # test getOnItemIter getOnIter getOnItemBackIter getOnBackIter
1497
+ items = [item for item in onbuber .getOnItemIter (keys = j )]
1498
+ assert items == [(('b' ,), 0 , ('Blue' , 'dog' )),
1499
+ (('b' ,), 0 , ('White' ,)),
1500
+ (('b' ,), 1 , ('Green' , 'tree' )),
1501
+ (('b' ,), 1 , ('Red' ,)),
1502
+ (('b' ,), 2 , ('Red' ,)),
1503
+ (('b' ,), 2 , ('Green' , 'tree' )),
1504
+ (('b' ,), 3 , ('White' ,)),
1505
+ (('b' ,), 3 , ('Blue' , 'dog' ))]
1506
+
1507
+ vals = [val for val in onbuber .getOnIter (keys = j )]
1508
+ assert vals == [('Blue' , 'dog' ),
1509
+ ('White' ,),
1510
+ ('Green' , 'tree' ),
1511
+ ('Red' ,),
1512
+ ('Red' ,),
1513
+ ('Green' , 'tree' ),
1514
+ ('White' ,),
1515
+ ('Blue' , 'dog' )]
1516
+
1517
+
1518
+ items = [item for item in onbuber .getOnItemBackIter (keys = j , on = 4 )]
1519
+ assert items == [(('b' ,), 3 , ('Blue' , 'dog' )),
1520
+ (('b' ,), 3 , ('White' ,)),
1521
+ (('b' ,), 2 , ('Green' , 'tree' )),
1522
+ (('b' ,), 2 , ('Red' ,)),
1523
+ (('b' ,), 1 , ('Red' ,)),
1524
+ (('b' ,), 1 , ('Green' , 'tree' )),
1525
+ (('b' ,), 0 , ('White' ,)),
1526
+ (('b' ,), 0 , ('Blue' , 'dog' ))]
1527
+
1528
+
1529
+ vals = [val for val in onbuber .getOnBackIter (keys = j , on = 4 )]
1530
+ assert vals == [('Blue' , 'dog' ),
1531
+ ('White' ,),
1532
+ ('Green' , 'tree' ),
1533
+ ('Red' ,),
1534
+ ('Red' ,),
1535
+ ('Green' , 'tree' ),
1536
+ ('White' ,),
1537
+ ('Blue' , 'dog' )]
1538
+
1539
+
1540
+ items = [item for item in onbuber .getOnItemIter (keys = j , on = 2 )]
1541
+ assert items == [(('b' ,), 2 , ('Red' ,)),
1542
+ (('b' ,), 2 , ('Green' , 'tree' )),
1543
+ (('b' ,), 3 , ('White' ,)),
1544
+ (('b' ,), 3 , ('Blue' , 'dog' ))]
1545
+
1546
+ vals = [val for val in onbuber .getOnIter (keys = j , on = 2 )]
1547
+ assert vals == [('Red' ,), ('Green' , 'tree' ), ('White' ,), ('Blue' , 'dog' )]
1548
+
1549
+
1550
+ items = [item for item in onbuber .getOnItemBackIter (keys = j , on = 1 )]
1551
+ assert items == [(('b' ,), 1 , ('Red' ,)),
1552
+ (('b' ,), 1 , ('Green' , 'tree' )),
1553
+ (('b' ,), 0 , ('White' ,)),
1554
+ (('b' ,), 0 , ('Blue' , 'dog' ))]
1555
+
1556
+ vals = [val for val in onbuber .getOnBackIter (keys = j , on = 1 )]
1557
+ assert vals == [('Red' ,), ('Green' , 'tree' ), ('White' ,), ('Blue' , 'dog' )]
1558
+
1559
+ # test append with duplicates
1560
+ assert 4 == onbuber .appendOn (keys = (j ,), val = x )
1561
+ assert onbuber .cntOn (keys = (j ,)) == 9
1562
+
1563
+ # test remove
1564
+ assert onbuber .remOn (keys = j , on = 1 )
1565
+ assert not onbuber .remOn (keys = j , on = 1 )
1566
+ assert onbuber .remOn (keys = j , on = 3 )
1567
+ assert not onbuber .remOn (keys = j , on = 3 )
1568
+
1569
+ assert onbuber .cntOn (keys = (j ,)) == 5
1570
+
1571
+ items = [item for item in onbuber .getOnItemIter (keys = j )]
1572
+ assert items == [(('b' ,), 0 , ('Blue' , 'dog' )),
1573
+ (('b' ,), 0 , ('White' ,)),
1574
+ (('b' ,), 2 , ('Red' ,)),
1575
+ (('b' ,), 2 , ('Green' , 'tree' )),
1576
+ (('b' ,), 4 , ('Green' , 'tree' ))]
1577
+
1578
+ vals = [val for val in onbuber .getOnIter (keys = j )]
1579
+ assert vals == [('Blue' , 'dog' ),
1580
+ ('White' ,),
1581
+ ('Red' ,),
1582
+ ('Green' , 'tree' ),
1583
+ ('Green' , 'tree' )]
1584
+
1585
+ assert not os .path .exists (db .path )
1586
+ assert not db .opened
1309
1587
1310
1588
1311
1589
def test_ioset_suber ():
@@ -3011,11 +3289,12 @@ def test_crypt_signer_suber():
3011
3289
if __name__ == "__main__" :
3012
3290
test_suber ()
3013
3291
test_on_suber ()
3014
- test_B64_suber ()
3292
+ test_b64_suber ()
3015
3293
test_dup_suber ()
3016
3294
test_iodup_suber ()
3017
- test_B64_iodup_suber ()
3295
+ test_b64_iodup_suber ()
3018
3296
test_on_iodup_suber ()
3297
+ test_b64_oniodup_suber ()
3019
3298
test_ioset_suber ()
3020
3299
test_cat_cesr_suber ()
3021
3300
test_cesr_suber ()
0 commit comments