synapse 2.174.0__py311-none-any.whl → 2.175.0__py311-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of synapse might be problematic. Click here for more details.
- synapse/daemon.py +11 -12
- synapse/lib/ast.py +4 -0
- synapse/lib/cell.py +22 -13
- synapse/lib/jupyter.py +21 -0
- synapse/lib/layer.py +124 -30
- synapse/lib/link.py +3 -2
- synapse/lib/modelrev.py +15 -1
- synapse/lib/snap.py +13 -0
- synapse/lib/storm.py +103 -86
- synapse/lib/types.py +1 -1
- synapse/lib/version.py +2 -2
- synapse/tests/test_daemon.py +36 -0
- synapse/tests/test_lib_ast.py +35 -0
- synapse/tests/test_lib_cell.py +11 -0
- synapse/tests/test_lib_modelrev.py +29 -0
- synapse/tests/test_lib_storm.py +127 -11
- synapse/tools/changelog.py +27 -7
- {synapse-2.174.0.dist-info → synapse-2.175.0.dist-info}/METADATA +1 -1
- {synapse-2.174.0.dist-info → synapse-2.175.0.dist-info}/RECORD +22 -22
- {synapse-2.174.0.dist-info → synapse-2.175.0.dist-info}/LICENSE +0 -0
- {synapse-2.174.0.dist-info → synapse-2.175.0.dist-info}/WHEEL +0 -0
- {synapse-2.174.0.dist-info → synapse-2.175.0.dist-info}/top_level.txt +0 -0
synapse/lib/layer.py
CHANGED
|
@@ -227,6 +227,7 @@ STOR_TYPE_FLOAT64 = 22
|
|
|
227
227
|
STOR_TYPE_HUGENUM = 23
|
|
228
228
|
|
|
229
229
|
STOR_TYPE_MAXTIME = 24
|
|
230
|
+
STOR_TYPE_NDEF = 25
|
|
230
231
|
|
|
231
232
|
# STOR_TYPE_TOMB = ??
|
|
232
233
|
# STOR_TYPE_FIXED = ??
|
|
@@ -1300,6 +1301,27 @@ class StorTypeMsgp(StorType):
|
|
|
1300
1301
|
def indx(self, valu):
|
|
1301
1302
|
return (s_common.buid(valu),)
|
|
1302
1303
|
|
|
1304
|
+
class StorTypeNdef(StorType):
|
|
1305
|
+
|
|
1306
|
+
def __init__(self, layr):
|
|
1307
|
+
StorType.__init__(self, layr, STOR_TYPE_NDEF)
|
|
1308
|
+
self.lifters.update({
|
|
1309
|
+
'=': self._liftNdefEq,
|
|
1310
|
+
})
|
|
1311
|
+
|
|
1312
|
+
async def _liftNdefEq(self, liftby, valu, reverse=False):
|
|
1313
|
+
if reverse:
|
|
1314
|
+
scan = liftby.keyBuidsByDupsBack
|
|
1315
|
+
else:
|
|
1316
|
+
scan = liftby.keyBuidsByDups
|
|
1317
|
+
|
|
1318
|
+
indx = s_common.buid(valu)
|
|
1319
|
+
for item in scan(indx):
|
|
1320
|
+
yield item
|
|
1321
|
+
|
|
1322
|
+
def indx(self, valu):
|
|
1323
|
+
return (s_common.buid(valu),)
|
|
1324
|
+
|
|
1303
1325
|
class StorTypeLatLon(StorType):
|
|
1304
1326
|
|
|
1305
1327
|
def __init__(self, layr):
|
|
@@ -1459,6 +1481,7 @@ class Layer(s_nexus.Pusher):
|
|
|
1459
1481
|
StorTypeHugeNum(self, STOR_TYPE_HUGENUM),
|
|
1460
1482
|
|
|
1461
1483
|
StorTypeTime(self), # STOR_TYPE_MAXTIME
|
|
1484
|
+
StorTypeNdef(self),
|
|
1462
1485
|
]
|
|
1463
1486
|
|
|
1464
1487
|
await self._initLayerStorage()
|
|
@@ -2689,6 +2712,7 @@ class Layer(s_nexus.Pusher):
|
|
|
2689
2712
|
|
|
2690
2713
|
self.bytag = self.layrslab.initdb('bytag', dupsort=True)
|
|
2691
2714
|
self.byform = self.layrslab.initdb('byform', dupsort=True)
|
|
2715
|
+
self.byndef = self.layrslab.initdb('byndef', dupsort=True)
|
|
2692
2716
|
self.byprop = self.layrslab.initdb('byprop', dupsort=True)
|
|
2693
2717
|
self.byarray = self.layrslab.initdb('byarray', dupsort=True)
|
|
2694
2718
|
self.bytagprop = self.layrslab.initdb('bytagprop', dupsort=True)
|
|
@@ -3053,6 +3077,35 @@ class Layer(s_nexus.Pusher):
|
|
|
3053
3077
|
|
|
3054
3078
|
yield None, buid, deepcopy(sode)
|
|
3055
3079
|
|
|
3080
|
+
async def liftByTags(self, tags):
|
|
3081
|
+
# todo: support form and reverse kwargs
|
|
3082
|
+
|
|
3083
|
+
genrs = []
|
|
3084
|
+
|
|
3085
|
+
for tag in tags:
|
|
3086
|
+
try:
|
|
3087
|
+
abrv = self.tagabrv.bytsToAbrv(tag.encode())
|
|
3088
|
+
genrs.append(s_coro.agen(self.layrslab.scanByPref(abrv, db=self.bytag)))
|
|
3089
|
+
except s_exc.NoSuchAbrv:
|
|
3090
|
+
continue
|
|
3091
|
+
|
|
3092
|
+
lastbuid = None
|
|
3093
|
+
|
|
3094
|
+
async for lkey, buid in s_common.merggenr2(genrs, cmprkey=lambda x: x[1]):
|
|
3095
|
+
|
|
3096
|
+
if buid == lastbuid:
|
|
3097
|
+
lastbuid = buid
|
|
3098
|
+
await asyncio.sleep(0)
|
|
3099
|
+
continue
|
|
3100
|
+
|
|
3101
|
+
lastbuid = buid
|
|
3102
|
+
|
|
3103
|
+
sode = self._getStorNode(buid)
|
|
3104
|
+
if sode is None: # pragma: no cover
|
|
3105
|
+
continue
|
|
3106
|
+
|
|
3107
|
+
yield None, buid, deepcopy(sode)
|
|
3108
|
+
|
|
3056
3109
|
async def liftByTagValu(self, tag, cmpr, valu, form=None, reverse=False):
|
|
3057
3110
|
|
|
3058
3111
|
try:
|
|
@@ -3304,7 +3357,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3304
3357
|
changes = []
|
|
3305
3358
|
for edit in edits:
|
|
3306
3359
|
|
|
3307
|
-
delt = self.editors[edit[0]](buid, form, edit, sode, meta)
|
|
3360
|
+
delt = await self.editors[edit[0]](buid, form, edit, sode, meta)
|
|
3308
3361
|
if delt and edit[2]:
|
|
3309
3362
|
nodeedits.extend(edit[2])
|
|
3310
3363
|
|
|
@@ -3338,22 +3391,22 @@ class Layer(s_nexus.Pusher):
|
|
|
3338
3391
|
def mayDelBuid(self, buid, sode):
|
|
3339
3392
|
|
|
3340
3393
|
if sode.get('valu'):
|
|
3341
|
-
return
|
|
3394
|
+
return False
|
|
3342
3395
|
|
|
3343
3396
|
if sode.get('props'):
|
|
3344
|
-
return
|
|
3397
|
+
return False
|
|
3345
3398
|
|
|
3346
3399
|
if sode.get('tags'):
|
|
3347
|
-
return
|
|
3400
|
+
return False
|
|
3348
3401
|
|
|
3349
3402
|
if sode.get('tagprops'):
|
|
3350
|
-
return
|
|
3403
|
+
return False
|
|
3351
3404
|
|
|
3352
3405
|
if self.dataslab.prefexists(buid, self.nodedata):
|
|
3353
|
-
return
|
|
3406
|
+
return False
|
|
3354
3407
|
|
|
3355
3408
|
if self.layrslab.prefexists(buid, db=self.edgesn1):
|
|
3356
|
-
return
|
|
3409
|
+
return False
|
|
3357
3410
|
|
|
3358
3411
|
# no more refs in this layer. time to pop it...
|
|
3359
3412
|
try:
|
|
@@ -3365,6 +3418,8 @@ class Layer(s_nexus.Pusher):
|
|
|
3365
3418
|
self.buidcache.pop(buid, None)
|
|
3366
3419
|
self.layrslab.delete(buid, db=self.bybuidv3)
|
|
3367
3420
|
|
|
3421
|
+
return True
|
|
3422
|
+
|
|
3368
3423
|
async def storNodeEditsNoLift(self, nodeedits, meta):
|
|
3369
3424
|
'''
|
|
3370
3425
|
Execute a series of node edit operations.
|
|
@@ -3374,7 +3429,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3374
3429
|
self._reqNotReadOnly()
|
|
3375
3430
|
await self._push('edits', nodeedits, meta)
|
|
3376
3431
|
|
|
3377
|
-
def _editNodeAdd(self, buid, form, edit, sode, meta):
|
|
3432
|
+
async def _editNodeAdd(self, buid, form, edit, sode, meta):
|
|
3378
3433
|
|
|
3379
3434
|
valt = edit[1]
|
|
3380
3435
|
valu, stortype = valt
|
|
@@ -3393,6 +3448,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3393
3448
|
|
|
3394
3449
|
for indx in self.getStorIndx(stortype, valu):
|
|
3395
3450
|
self.layrslab.put(abrv + indx, buid, db=self.byarray)
|
|
3451
|
+
await asyncio.sleep(0)
|
|
3396
3452
|
|
|
3397
3453
|
for indx in self.getStorIndx(STOR_TYPE_MSGP, valu):
|
|
3398
3454
|
self.layrslab.put(abrv + indx, buid, db=self.byprop)
|
|
@@ -3415,20 +3471,17 @@ class Layer(s_nexus.Pusher):
|
|
|
3415
3471
|
tick = s_common.now()
|
|
3416
3472
|
|
|
3417
3473
|
edit = (EDIT_PROP_SET, ('.created', tick, None, STOR_TYPE_MINTIME), ())
|
|
3418
|
-
retn.extend(self._editPropSet(buid, form, edit, sode, meta))
|
|
3474
|
+
retn.extend(await self._editPropSet(buid, form, edit, sode, meta))
|
|
3419
3475
|
|
|
3420
3476
|
return retn
|
|
3421
3477
|
|
|
3422
|
-
def _editNodeDel(self, buid, form, edit, sode, meta):
|
|
3478
|
+
async def _editNodeDel(self, buid, form, edit, sode, meta):
|
|
3423
3479
|
|
|
3424
|
-
valt = sode.
|
|
3480
|
+
valt = sode.get('valu', None)
|
|
3425
3481
|
if valt is None:
|
|
3426
|
-
# TODO tombstone
|
|
3427
3482
|
self.mayDelBuid(buid, sode)
|
|
3428
3483
|
return ()
|
|
3429
3484
|
|
|
3430
|
-
self.setSodeDirty(buid, sode, form)
|
|
3431
|
-
|
|
3432
3485
|
valu, stortype = valt
|
|
3433
3486
|
|
|
3434
3487
|
abrv = self.setPropAbrv(form, None)
|
|
@@ -3437,6 +3490,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3437
3490
|
|
|
3438
3491
|
for indx in self.getStorIndx(stortype, valu):
|
|
3439
3492
|
self.layrslab.delete(abrv + indx, buid, db=self.byarray)
|
|
3493
|
+
await asyncio.sleep(0)
|
|
3440
3494
|
|
|
3441
3495
|
for indx in self.getStorIndx(STOR_TYPE_MSGP, valu):
|
|
3442
3496
|
self.layrslab.delete(abrv + indx, buid, db=self.byprop)
|
|
@@ -3456,13 +3510,16 @@ class Layer(s_nexus.Pusher):
|
|
|
3456
3510
|
|
|
3457
3511
|
self.buidcache.pop(buid, None)
|
|
3458
3512
|
|
|
3459
|
-
|
|
3513
|
+
sode.pop('valu', None)
|
|
3514
|
+
|
|
3515
|
+
if not self.mayDelBuid(buid, sode):
|
|
3516
|
+
self.setSodeDirty(buid, sode, form)
|
|
3460
3517
|
|
|
3461
3518
|
return (
|
|
3462
3519
|
(EDIT_NODE_DEL, (valu, stortype), ()),
|
|
3463
3520
|
)
|
|
3464
3521
|
|
|
3465
|
-
def _editPropSet(self, buid, form, edit, sode, meta):
|
|
3522
|
+
async def _editPropSet(self, buid, form, edit, sode, meta):
|
|
3466
3523
|
|
|
3467
3524
|
prop, valu, oldv, stortype = edit[1]
|
|
3468
3525
|
|
|
@@ -3491,11 +3548,18 @@ class Layer(s_nexus.Pusher):
|
|
|
3491
3548
|
|
|
3492
3549
|
if oldt & STOR_FLAG_ARRAY:
|
|
3493
3550
|
|
|
3551
|
+
realtype = oldt & 0x7fff
|
|
3552
|
+
|
|
3494
3553
|
for oldi in self.getStorIndx(oldt, oldv):
|
|
3495
3554
|
self.layrslab.delete(abrv + oldi, buid, db=self.byarray)
|
|
3496
3555
|
if univabrv is not None:
|
|
3497
3556
|
self.layrslab.delete(univabrv + oldi, buid, db=self.byarray)
|
|
3498
3557
|
|
|
3558
|
+
if realtype == STOR_TYPE_NDEF:
|
|
3559
|
+
self.layrslab.delete(oldi, buid + abrv, db=self.byndef)
|
|
3560
|
+
|
|
3561
|
+
await asyncio.sleep(0)
|
|
3562
|
+
|
|
3499
3563
|
for indx in self.getStorIndx(STOR_TYPE_MSGP, oldv):
|
|
3500
3564
|
self.layrslab.delete(abrv + indx, buid, db=self.byprop)
|
|
3501
3565
|
if univabrv is not None:
|
|
@@ -3508,6 +3572,9 @@ class Layer(s_nexus.Pusher):
|
|
|
3508
3572
|
if univabrv is not None:
|
|
3509
3573
|
self.layrslab.delete(univabrv + oldi, buid, db=self.byprop)
|
|
3510
3574
|
|
|
3575
|
+
if oldt == STOR_TYPE_NDEF:
|
|
3576
|
+
self.layrslab.delete(oldi, buid + abrv, db=self.byndef)
|
|
3577
|
+
|
|
3511
3578
|
if sode.get('form') is None:
|
|
3512
3579
|
formabrv = self.setPropAbrv(form, None)
|
|
3513
3580
|
self.layrslab.put(formabrv, buid, db=self.byform)
|
|
@@ -3517,11 +3584,18 @@ class Layer(s_nexus.Pusher):
|
|
|
3517
3584
|
|
|
3518
3585
|
if stortype & STOR_FLAG_ARRAY:
|
|
3519
3586
|
|
|
3587
|
+
realtype = stortype & 0x7fff
|
|
3588
|
+
|
|
3520
3589
|
for indx in self.getStorIndx(stortype, valu):
|
|
3521
3590
|
self.layrslab.put(abrv + indx, buid, db=self.byarray)
|
|
3522
3591
|
if univabrv is not None:
|
|
3523
3592
|
self.layrslab.put(univabrv + indx, buid, db=self.byarray)
|
|
3524
3593
|
|
|
3594
|
+
if realtype == STOR_TYPE_NDEF:
|
|
3595
|
+
self.layrslab.put(indx, buid + abrv, db=self.byndef)
|
|
3596
|
+
|
|
3597
|
+
await asyncio.sleep(0)
|
|
3598
|
+
|
|
3525
3599
|
for indx in self.getStorIndx(STOR_TYPE_MSGP, valu):
|
|
3526
3600
|
self.layrslab.put(abrv + indx, buid, db=self.byprop)
|
|
3527
3601
|
if univabrv is not None:
|
|
@@ -3534,11 +3608,14 @@ class Layer(s_nexus.Pusher):
|
|
|
3534
3608
|
if univabrv is not None:
|
|
3535
3609
|
self.layrslab.put(univabrv + indx, buid, db=self.byprop)
|
|
3536
3610
|
|
|
3611
|
+
if stortype == STOR_TYPE_NDEF:
|
|
3612
|
+
self.layrslab.put(indx, buid + abrv, db=self.byndef)
|
|
3613
|
+
|
|
3537
3614
|
return (
|
|
3538
3615
|
(EDIT_PROP_SET, (prop, valu, oldv, stortype), ()),
|
|
3539
3616
|
)
|
|
3540
3617
|
|
|
3541
|
-
def _editPropDel(self, buid, form, edit, sode, meta):
|
|
3618
|
+
async def _editPropDel(self, buid, form, edit, sode, meta):
|
|
3542
3619
|
|
|
3543
3620
|
prop, oldv, stortype = edit[1]
|
|
3544
3621
|
|
|
@@ -3548,14 +3625,11 @@ class Layer(s_nexus.Pusher):
|
|
|
3548
3625
|
if prop[0] == '.': # '.' to detect universal props (as quickly as possible)
|
|
3549
3626
|
univabrv = self.setPropAbrv(None, prop)
|
|
3550
3627
|
|
|
3551
|
-
valt = sode['props'].
|
|
3628
|
+
valt = sode['props'].get(prop, None)
|
|
3552
3629
|
if valt is None:
|
|
3553
|
-
# FIXME tombstone
|
|
3554
3630
|
self.mayDelBuid(buid, sode)
|
|
3555
3631
|
return ()
|
|
3556
3632
|
|
|
3557
|
-
self.setSodeDirty(buid, sode, form)
|
|
3558
|
-
|
|
3559
3633
|
valu, stortype = valt
|
|
3560
3634
|
|
|
3561
3635
|
if stortype & STOR_FLAG_ARRAY:
|
|
@@ -3568,6 +3642,11 @@ class Layer(s_nexus.Pusher):
|
|
|
3568
3642
|
if univabrv is not None:
|
|
3569
3643
|
self.layrslab.delete(univabrv + indx, buid, db=self.byarray)
|
|
3570
3644
|
|
|
3645
|
+
if realtype == STOR_TYPE_NDEF:
|
|
3646
|
+
self.layrslab.delete(indx, buid + abrv, db=self.byndef)
|
|
3647
|
+
|
|
3648
|
+
await asyncio.sleep(0)
|
|
3649
|
+
|
|
3571
3650
|
for indx in self.getStorIndx(STOR_TYPE_MSGP, valu):
|
|
3572
3651
|
self.layrslab.delete(abrv + indx, buid, db=self.byprop)
|
|
3573
3652
|
if univabrv is not None:
|
|
@@ -3580,12 +3659,19 @@ class Layer(s_nexus.Pusher):
|
|
|
3580
3659
|
if univabrv is not None:
|
|
3581
3660
|
self.layrslab.delete(univabrv + indx, buid, db=self.byprop)
|
|
3582
3661
|
|
|
3583
|
-
|
|
3662
|
+
if stortype == STOR_TYPE_NDEF:
|
|
3663
|
+
self.layrslab.delete(indx, buid + abrv, db=self.byndef)
|
|
3664
|
+
|
|
3665
|
+
sode['props'].pop(prop, None)
|
|
3666
|
+
|
|
3667
|
+
if not self.mayDelBuid(buid, sode):
|
|
3668
|
+
self.setSodeDirty(buid, sode, form)
|
|
3669
|
+
|
|
3584
3670
|
return (
|
|
3585
3671
|
(EDIT_PROP_DEL, (prop, valu, stortype), ()),
|
|
3586
3672
|
)
|
|
3587
3673
|
|
|
3588
|
-
def _editTagSet(self, buid, form, edit, sode, meta):
|
|
3674
|
+
async def _editTagSet(self, buid, form, edit, sode, meta):
|
|
3589
3675
|
|
|
3590
3676
|
if form is None: # pragma: no cover
|
|
3591
3677
|
logger.warning(f'Invalid tag set edit, form is None: {edit}')
|
|
@@ -3618,7 +3704,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3618
3704
|
(EDIT_TAG_SET, (tag, valu, oldv), ()),
|
|
3619
3705
|
)
|
|
3620
3706
|
|
|
3621
|
-
def _editTagDel(self, buid, form, edit, sode, meta):
|
|
3707
|
+
async def _editTagDel(self, buid, form, edit, sode, meta):
|
|
3622
3708
|
|
|
3623
3709
|
tag, oldv = edit[1]
|
|
3624
3710
|
formabrv = self.setPropAbrv(form, None)
|
|
@@ -3640,7 +3726,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3640
3726
|
(EDIT_TAG_DEL, (tag, oldv), ()),
|
|
3641
3727
|
)
|
|
3642
3728
|
|
|
3643
|
-
def _editTagPropSet(self, buid, form, edit, sode, meta):
|
|
3729
|
+
async def _editTagPropSet(self, buid, form, edit, sode, meta):
|
|
3644
3730
|
|
|
3645
3731
|
if form is None: # pragma: no cover
|
|
3646
3732
|
logger.warning(f'Invalid tagprop set edit, form is None: {edit}')
|
|
@@ -3692,7 +3778,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3692
3778
|
(EDIT_TAGPROP_SET, (tag, prop, valu, oldv, stortype), ()),
|
|
3693
3779
|
)
|
|
3694
3780
|
|
|
3695
|
-
def _editTagPropDel(self, buid, form, edit, sode, meta):
|
|
3781
|
+
async def _editTagPropDel(self, buid, form, edit, sode, meta):
|
|
3696
3782
|
tag, prop, valu, stortype = edit[1]
|
|
3697
3783
|
|
|
3698
3784
|
tp_dict = sode['tagprops'].get(tag)
|
|
@@ -3721,7 +3807,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3721
3807
|
(EDIT_TAGPROP_DEL, (tag, prop, oldv, oldt), ()),
|
|
3722
3808
|
)
|
|
3723
3809
|
|
|
3724
|
-
def _editNodeDataSet(self, buid, form, edit, sode, meta):
|
|
3810
|
+
async def _editNodeDataSet(self, buid, form, edit, sode, meta):
|
|
3725
3811
|
|
|
3726
3812
|
name, valu, oldv = edit[1]
|
|
3727
3813
|
abrv = self.setPropAbrv(name, None)
|
|
@@ -3746,7 +3832,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3746
3832
|
(EDIT_NODEDATA_SET, (name, valu, oldv), ()),
|
|
3747
3833
|
)
|
|
3748
3834
|
|
|
3749
|
-
def _editNodeDataDel(self, buid, form, edit, sode, meta):
|
|
3835
|
+
async def _editNodeDataDel(self, buid, form, edit, sode, meta):
|
|
3750
3836
|
|
|
3751
3837
|
name, valu = edit[1]
|
|
3752
3838
|
abrv = self.setPropAbrv(name, None)
|
|
@@ -3764,7 +3850,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3764
3850
|
(EDIT_NODEDATA_DEL, (name, oldv), ()),
|
|
3765
3851
|
)
|
|
3766
3852
|
|
|
3767
|
-
def _editNodeEdgeAdd(self, buid, form, edit, sode, meta):
|
|
3853
|
+
async def _editNodeEdgeAdd(self, buid, form, edit, sode, meta):
|
|
3768
3854
|
|
|
3769
3855
|
if form is None: # pragma: no cover
|
|
3770
3856
|
logger.warning(f'Invalid node edge edit, form is None: {edit}')
|
|
@@ -3795,7 +3881,7 @@ class Layer(s_nexus.Pusher):
|
|
|
3795
3881
|
(EDIT_EDGE_ADD, (verb, n2iden), ()),
|
|
3796
3882
|
)
|
|
3797
3883
|
|
|
3798
|
-
def _editNodeEdgeDel(self, buid, form, edit, sode, meta):
|
|
3884
|
+
async def _editNodeEdgeDel(self, buid, form, edit, sode, meta):
|
|
3799
3885
|
|
|
3800
3886
|
verb, n2iden = edit[1]
|
|
3801
3887
|
|
|
@@ -3862,6 +3948,10 @@ class Layer(s_nexus.Pusher):
|
|
|
3862
3948
|
verb = lkey[32:].decode()
|
|
3863
3949
|
yield verb, s_common.ehex(n2buid)
|
|
3864
3950
|
|
|
3951
|
+
async def iterNodeEdgeVerbsN1(self, buid):
|
|
3952
|
+
for lkey in self.layrslab.scanKeysByPref(buid, db=self.edgesn1, nodup=True):
|
|
3953
|
+
yield lkey[32:].decode()
|
|
3954
|
+
|
|
3865
3955
|
async def iterNodeEdgesN2(self, buid, verb=None):
|
|
3866
3956
|
pref = buid
|
|
3867
3957
|
if verb is not None:
|
|
@@ -3879,6 +3969,10 @@ class Layer(s_nexus.Pusher):
|
|
|
3879
3969
|
lkey = buid1 + verb.encode()
|
|
3880
3970
|
return self.layrslab.hasdup(lkey, buid2, db=self.edgesn1)
|
|
3881
3971
|
|
|
3972
|
+
async def getNdefRefs(self, buid):
|
|
3973
|
+
for _, byts in self.layrslab.scanByDups(buid, db=self.byndef):
|
|
3974
|
+
yield byts[:32], byts[32:]
|
|
3975
|
+
|
|
3882
3976
|
async def iterFormRows(self, form, stortype=None, startvalu=None):
|
|
3883
3977
|
'''
|
|
3884
3978
|
Yields buid, valu tuples of nodes of a single form, optionally (re)starting at startvalu.
|
synapse/lib/link.py
CHANGED
|
@@ -303,10 +303,11 @@ class Link(s_base.Base):
|
|
|
303
303
|
raise
|
|
304
304
|
|
|
305
305
|
except Exception as e:
|
|
306
|
+
mesg = f'rx error {e} link={self.getAddrInfo()}'
|
|
306
307
|
if isinstance(e, (BrokenPipeError, ConnectionResetError)):
|
|
307
|
-
logger.warning(
|
|
308
|
+
logger.warning(mesg)
|
|
308
309
|
else:
|
|
309
|
-
logger.exception(
|
|
310
|
+
logger.exception(mesg)
|
|
310
311
|
await self.fini()
|
|
311
312
|
return None
|
|
312
313
|
|
synapse/lib/modelrev.py
CHANGED
|
@@ -8,7 +8,7 @@ import synapse.lib.layer as s_layer
|
|
|
8
8
|
|
|
9
9
|
logger = logging.getLogger(__name__)
|
|
10
10
|
|
|
11
|
-
maxvers = (0, 2,
|
|
11
|
+
maxvers = (0, 2, 26)
|
|
12
12
|
|
|
13
13
|
class ModelRev:
|
|
14
14
|
|
|
@@ -39,6 +39,7 @@ class ModelRev:
|
|
|
39
39
|
((0, 2, 23), self.revModel_0_2_23),
|
|
40
40
|
((0, 2, 24), self.revModel_0_2_24),
|
|
41
41
|
((0, 2, 25), self.revModel_0_2_25),
|
|
42
|
+
((0, 2, 26), self.revModel_0_2_26),
|
|
42
43
|
)
|
|
43
44
|
|
|
44
45
|
async def _uniqSortArray(self, todoprops, layers):
|
|
@@ -769,6 +770,19 @@ class ModelRev:
|
|
|
769
770
|
await self._normPropValu(layers, 'ou:conference:names')
|
|
770
771
|
await self._propArrayToForm(layers, 'ou:conference:names', 'entity:name')
|
|
771
772
|
|
|
773
|
+
async def revModel_0_2_26(self, layers):
|
|
774
|
+
for name, prop in list(self.core.model.props.items()):
|
|
775
|
+
if prop.isform:
|
|
776
|
+
continue
|
|
777
|
+
|
|
778
|
+
stortype = prop.type.stortype
|
|
779
|
+
if stortype & s_layer.STOR_FLAG_ARRAY:
|
|
780
|
+
stortype = stortype & 0x7fff
|
|
781
|
+
|
|
782
|
+
if stortype == s_layer.STOR_TYPE_NDEF:
|
|
783
|
+
logger.info(f'Updating ndef indexing for {name}')
|
|
784
|
+
await self._updatePropStortype(layers, prop.full)
|
|
785
|
+
|
|
772
786
|
async def runStorm(self, text, opts=None):
|
|
773
787
|
'''
|
|
774
788
|
Run storm code in a schedcoro and log the output messages.
|
synapse/lib/snap.py
CHANGED
|
@@ -1602,6 +1602,19 @@ class Snap(s_base.Base):
|
|
|
1602
1602
|
last = verb
|
|
1603
1603
|
yield verb
|
|
1604
1604
|
|
|
1605
|
+
async def getNdefRefs(self, buid):
|
|
1606
|
+
last = None
|
|
1607
|
+
gens = [layr.getNdefRefs(buid) for layr in self.layers]
|
|
1608
|
+
|
|
1609
|
+
async for refsbuid, _ in s_common.merggenr2(gens):
|
|
1610
|
+
if refsbuid == last:
|
|
1611
|
+
continue
|
|
1612
|
+
|
|
1613
|
+
await asyncio.sleep(0)
|
|
1614
|
+
last = refsbuid
|
|
1615
|
+
|
|
1616
|
+
yield refsbuid
|
|
1617
|
+
|
|
1605
1618
|
async def hasNodeData(self, buid, name):
|
|
1606
1619
|
'''
|
|
1607
1620
|
Return True if the buid has nodedata set on it under the given name
|