synapse 2.218.1__py311-none-any.whl → 2.220.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/cortex.py +113 -14
- synapse/daemon.py +2 -1
- synapse/data/__init__.py +4 -0
- synapse/data/lark/__init__.py +0 -0
- synapse/data/lark/imap.lark +8 -0
- synapse/exc.py +2 -0
- synapse/lib/ast.py +86 -84
- synapse/lib/json.py +6 -5
- synapse/lib/layer.py +27 -0
- synapse/lib/link.py +49 -50
- synapse/lib/parser.py +3 -5
- synapse/lib/schemas.py +25 -0
- synapse/lib/storm.py +1 -0
- synapse/lib/stormlib/imap.py +476 -35
- synapse/lib/stormtypes.py +177 -2
- synapse/lib/version.py +2 -2
- synapse/models/inet.py +3 -0
- synapse/tests/files/stormpkg/badinits.yaml +12 -0
- synapse/tests/files/stormpkg/testpkg.yaml +12 -0
- synapse/tests/test_lib_grammar.py +2 -4
- synapse/tests/test_lib_json.py +29 -0
- synapse/tests/test_lib_layer.py +119 -0
- synapse/tests/test_lib_storm.py +184 -1
- synapse/tests/test_lib_stormlib_imap.py +1307 -230
- synapse/tests/test_lib_stormtypes.py +157 -0
- synapse/tests/test_model_inet.py +3 -0
- synapse/tests/test_telepath.py +31 -0
- synapse/tests/test_tools_genpkg.py +4 -0
- synapse/tests/utils.py +1 -1
- synapse/tools/genpkg.py +9 -0
- synapse/utils/stormcov/plugin.py +2 -5
- {synapse-2.218.1.dist-info → synapse-2.220.0.dist-info}/METADATA +2 -3
- {synapse-2.218.1.dist-info → synapse-2.220.0.dist-info}/RECORD +37 -34
- /synapse/{lib → data/lark}/storm.lark +0 -0
- {synapse-2.218.1.dist-info → synapse-2.220.0.dist-info}/WHEEL +0 -0
- {synapse-2.218.1.dist-info → synapse-2.220.0.dist-info}/licenses/LICENSE +0 -0
- {synapse-2.218.1.dist-info → synapse-2.220.0.dist-info}/top_level.txt +0 -0
synapse/tests/test_lib_storm.py
CHANGED
|
@@ -732,13 +732,17 @@ class StormTest(s_t_utils.SynTest):
|
|
|
732
732
|
[(ou:org=* :names=(foo, baz))]
|
|
733
733
|
[(ou:org=* :names=(foo, hehe))]
|
|
734
734
|
''')
|
|
735
|
-
nodes = await core.nodes('ou:org | intersect { -> ou:name }')
|
|
735
|
+
nodes = await core.nodes('ou:org | intersect { -> ou:name }', opts={'readonly': True})
|
|
736
736
|
self.len(1, nodes)
|
|
737
737
|
self.eq(nodes[0].ndef[1], 'foo')
|
|
738
738
|
|
|
739
739
|
msgs = await core.stormlist('ou:org $foo=$node.value() | intersect $foo')
|
|
740
740
|
self.stormIsInErr('intersect arguments must be runtsafe', msgs)
|
|
741
741
|
|
|
742
|
+
with self.raises(s_exc.IsReadOnly) as exc:
|
|
743
|
+
await core.nodes('ou:org | intersect { [ou:org=*] }', opts={'readonly': True})
|
|
744
|
+
self.eq(exc.exception.get('mesg'), 'Storm runtime is in readonly mode, cannot create or edit nodes and other graph data.')
|
|
745
|
+
|
|
742
746
|
async def test_lib_storm_trycatch(self):
|
|
743
747
|
|
|
744
748
|
async with self.getTestCore() as core:
|
|
@@ -3105,6 +3109,185 @@ class StormTest(s_t_utils.SynTest):
|
|
|
3105
3109
|
|
|
3106
3110
|
await core00.waitfini()
|
|
3107
3111
|
|
|
3112
|
+
async def test_storm_pkg_inits(self):
|
|
3113
|
+
|
|
3114
|
+
async def loadPkg(core, pkg):
|
|
3115
|
+
waiter = core.waiter(2, 'core:pkg:onload:start', 'core:pkg:onload:complete')
|
|
3116
|
+
|
|
3117
|
+
await core.addStormPkg(pkg)
|
|
3118
|
+
|
|
3119
|
+
events = await waiter.wait(timeout=10)
|
|
3120
|
+
self.eq(events, [
|
|
3121
|
+
('core:pkg:onload:start', {'pkg': 'testload'}),
|
|
3122
|
+
('core:pkg:onload:complete', {'pkg': 'testload'}),
|
|
3123
|
+
])
|
|
3124
|
+
|
|
3125
|
+
with self.getTestDir() as dirn:
|
|
3126
|
+
|
|
3127
|
+
async with self.getTestCore(dirn=dirn) as core:
|
|
3128
|
+
|
|
3129
|
+
pkg = {
|
|
3130
|
+
'name': 'testload',
|
|
3131
|
+
'version': '0.1.0',
|
|
3132
|
+
'inits': {
|
|
3133
|
+
'key': 'testload:version',
|
|
3134
|
+
'versions': [
|
|
3135
|
+
{
|
|
3136
|
+
'version': 0,
|
|
3137
|
+
'name': 'init00',
|
|
3138
|
+
'query': '$lib.globals.set(init00, $lib.time.now())',
|
|
3139
|
+
},
|
|
3140
|
+
{
|
|
3141
|
+
'version': 1,
|
|
3142
|
+
'name': 'init01',
|
|
3143
|
+
'inaugural': True,
|
|
3144
|
+
'query': '$lib.globals.set(init01, $lib.time.now())',
|
|
3145
|
+
},
|
|
3146
|
+
]
|
|
3147
|
+
},
|
|
3148
|
+
}
|
|
3149
|
+
|
|
3150
|
+
# bad init queries fail on load
|
|
3151
|
+
|
|
3152
|
+
pkg['inits']['versions'].append({
|
|
3153
|
+
'version': 2,
|
|
3154
|
+
'name': 'bad',
|
|
3155
|
+
'query': '...',
|
|
3156
|
+
})
|
|
3157
|
+
|
|
3158
|
+
await self.asyncraises(s_exc.BadSyntax, core.addStormPkg(pkg))
|
|
3159
|
+
|
|
3160
|
+
pkg['inits']['versions'].pop(2)
|
|
3161
|
+
|
|
3162
|
+
# non-increasing init versions fail on load
|
|
3163
|
+
|
|
3164
|
+
pkg['inits']['versions'].append({
|
|
3165
|
+
'version': 0,
|
|
3166
|
+
'name': 'bad',
|
|
3167
|
+
'query': '$lib.print("")',
|
|
3168
|
+
})
|
|
3169
|
+
|
|
3170
|
+
await self.asyncraises(s_exc.BadPkgDef, core.addStormPkg(pkg))
|
|
3171
|
+
|
|
3172
|
+
pkg['inits']['versions'].pop(2)
|
|
3173
|
+
|
|
3174
|
+
# only inaugural inits run on first load
|
|
3175
|
+
|
|
3176
|
+
await loadPkg(core, pkg)
|
|
3177
|
+
|
|
3178
|
+
self.eq(1, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3179
|
+
self.none(await core.getStormVar('init00'))
|
|
3180
|
+
self.nn(init01 := await core.getStormVar('init01'))
|
|
3181
|
+
|
|
3182
|
+
# non-inaugural inits run on reload
|
|
3183
|
+
# inits always run before onload
|
|
3184
|
+
|
|
3185
|
+
pkg['version'] = '0.2.0'
|
|
3186
|
+
pkg['onload'] = '$lib.time.sleep((0.1)) $lib.globals.set(onload, $lib.time.now())'
|
|
3187
|
+
pkg['inits']['versions'].append({
|
|
3188
|
+
'version': 2,
|
|
3189
|
+
'name': 'init02',
|
|
3190
|
+
'query': '$lib.globals.set(init02, $lib.time.now())',
|
|
3191
|
+
})
|
|
3192
|
+
|
|
3193
|
+
await loadPkg(core, pkg)
|
|
3194
|
+
|
|
3195
|
+
self.eq(2, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3196
|
+
self.none(await core.getStormVar('init00'))
|
|
3197
|
+
self.eq(init01, await core.getStormVar('init01'))
|
|
3198
|
+
self.nn(init02 := await core.getStormVar('init02'))
|
|
3199
|
+
self.nn(onload := await core.getStormVar('onload'))
|
|
3200
|
+
self.gt(onload, init02)
|
|
3201
|
+
|
|
3202
|
+
# inits run even if onload fails
|
|
3203
|
+
# prior inits do not re-run
|
|
3204
|
+
|
|
3205
|
+
pkg['version'] = '0.3.0'
|
|
3206
|
+
pkg['onload'] = '$lib.raise(SynErr, whoopsie)'
|
|
3207
|
+
pkg['inits']['versions'].append({
|
|
3208
|
+
'version': 3,
|
|
3209
|
+
'name': 'init03',
|
|
3210
|
+
'inaugural': True,
|
|
3211
|
+
'query': '$lib.globals.set(init03, $lib.time.now())',
|
|
3212
|
+
})
|
|
3213
|
+
|
|
3214
|
+
await loadPkg(core, pkg)
|
|
3215
|
+
|
|
3216
|
+
self.eq(3, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3217
|
+
self.eq(init02, await core.getStormVar('init02'))
|
|
3218
|
+
self.nn(await core.getStormVar('init03'))
|
|
3219
|
+
|
|
3220
|
+
# init failure stops progression
|
|
3221
|
+
|
|
3222
|
+
await core.setStormVar('dofail', True)
|
|
3223
|
+
|
|
3224
|
+
pkg['version'] = '0.4.0'
|
|
3225
|
+
pkg['onload'] = '$lib.globals.set(onload, $lib.time.now()) $lib.time.sleep((0.1))'
|
|
3226
|
+
pkg['inits']['versions'].extend([
|
|
3227
|
+
{
|
|
3228
|
+
'version': 4,
|
|
3229
|
+
'name': 'init04',
|
|
3230
|
+
'query': '''
|
|
3231
|
+
if $lib.globals.get(dofail) { $lib.raise(SynErr, newp) }
|
|
3232
|
+
$lib.globals.set(init04, $lib.time.now())
|
|
3233
|
+
''',
|
|
3234
|
+
},
|
|
3235
|
+
{
|
|
3236
|
+
'version': 6,
|
|
3237
|
+
'name': 'init06',
|
|
3238
|
+
'query': '$lib.globals.set(init06, $lib.time.now())',
|
|
3239
|
+
},
|
|
3240
|
+
])
|
|
3241
|
+
|
|
3242
|
+
mesg = 'testload init vers=4 output: (\'SynErr\''
|
|
3243
|
+
with self.getAsyncLoggerStream('synapse.cortex', mesg) as stream:
|
|
3244
|
+
await loadPkg(core, pkg)
|
|
3245
|
+
self.eq(3, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3246
|
+
await stream.wait(timeout=10)
|
|
3247
|
+
|
|
3248
|
+
self.none(await core.getStormVar('init04'))
|
|
3249
|
+
self.none(await core.getStormVar('init06'))
|
|
3250
|
+
|
|
3251
|
+
await core.setStormVar('dofail', False)
|
|
3252
|
+
|
|
3253
|
+
with self.getAsyncLoggerStream('synapse.cortex', 'testload finished onload') as stream:
|
|
3254
|
+
async with self.getTestCore(dirn=dirn) as core:
|
|
3255
|
+
await stream.wait(timeout=10)
|
|
3256
|
+
|
|
3257
|
+
# prior versions dont re-run, but a failed one does
|
|
3258
|
+
|
|
3259
|
+
self.eq(6, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3260
|
+
self.gt(await core.getStormVar('onload'), onload)
|
|
3261
|
+
self.eq(init02, await core.getStormVar('init02'))
|
|
3262
|
+
self.nn(await core.getStormVar('init04'))
|
|
3263
|
+
self.nn(await core.getStormVar('init06'))
|
|
3264
|
+
|
|
3265
|
+
# coverage for prints and warns
|
|
3266
|
+
|
|
3267
|
+
pkg['version'] = '0.5.0'
|
|
3268
|
+
pkg['inits']['versions'].append({
|
|
3269
|
+
'version': 7,
|
|
3270
|
+
'name': 'init07',
|
|
3271
|
+
'query': '$lib.print("doing a print")',
|
|
3272
|
+
})
|
|
3273
|
+
|
|
3274
|
+
with self.getAsyncLoggerStream('synapse.cortex', 'doing a print') as stream:
|
|
3275
|
+
await loadPkg(core, pkg)
|
|
3276
|
+
await stream.wait(timeout=10)
|
|
3277
|
+
self.eq(7, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3278
|
+
|
|
3279
|
+
pkg['version'] = '0.6.0'
|
|
3280
|
+
pkg['inits']['versions'].append({
|
|
3281
|
+
'version': 8,
|
|
3282
|
+
'name': 'init08',
|
|
3283
|
+
'query': '$lib.warn("doing a warn")',
|
|
3284
|
+
})
|
|
3285
|
+
|
|
3286
|
+
with self.getAsyncLoggerStream('synapse.cortex', 'doing a warn') as stream:
|
|
3287
|
+
await loadPkg(core, pkg)
|
|
3288
|
+
await stream.wait(timeout=10)
|
|
3289
|
+
self.eq(8, await core.getStormPkgVar('testload', 'testload:version'))
|
|
3290
|
+
|
|
3108
3291
|
async def test_storm_tree(self):
|
|
3109
3292
|
|
|
3110
3293
|
async with self.getTestCore() as core:
|