synapse 2.221.0__py311-none-any.whl → 2.223.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 +143 -44
- synapse/cryotank.py +1 -1
- synapse/data/lark/storm.lark +9 -6
- synapse/lib/ast.py +13 -5
- synapse/lib/layer.py +18 -11
- synapse/lib/nexus.py +1 -1
- synapse/lib/parser.py +1 -0
- synapse/lib/rstorm.py +19 -1
- synapse/lib/schemas.py +4 -0
- synapse/lib/snap.py +15 -9
- synapse/lib/storm.py +0 -190
- synapse/lib/stormlib/auth.py +1 -1
- synapse/lib/stormlib/cortex.py +1 -1
- synapse/lib/stormlib/mime.py +15 -5
- synapse/lib/stormlib/pkg.py +598 -0
- synapse/lib/stormlib/task.py +115 -0
- synapse/lib/stormtypes.py +42 -178
- synapse/lib/trigger.py +16 -14
- synapse/lib/version.py +2 -2
- synapse/lib/view.py +17 -14
- synapse/models/files.py +1 -1
- synapse/models/orgs.py +3 -0
- synapse/tests/test_cortex.py +1 -1
- synapse/tests/test_lib_aha.py +68 -53
- synapse/tests/test_lib_ast.py +3 -0
- synapse/tests/test_lib_cell.py +12 -12
- synapse/tests/test_lib_grammar.py +4 -4
- synapse/tests/test_lib_rstorm.py +55 -7
- synapse/tests/test_lib_storm.py +105 -249
- synapse/tests/test_lib_stormlib_auth.py +84 -0
- synapse/tests/test_lib_stormlib_cortex.py +1 -0
- synapse/tests/test_lib_stormlib_mime.py +24 -0
- synapse/tests/test_lib_stormlib_pkg.py +456 -0
- synapse/tests/test_lib_stormlib_task.py +98 -0
- synapse/tests/test_lib_stormtypes.py +25 -100
- synapse/tests/test_lib_trigger.py +66 -3
- synapse/tests/test_lib_view.py +53 -0
- synapse/tests/test_model_files.py +11 -0
- synapse/tests/test_model_orgs.py +6 -1
- synapse/tools/cryo/cat.py +2 -1
- synapse/tools/cryo/list.py +2 -0
- {synapse-2.221.0.dist-info → synapse-2.223.0.dist-info}/METADATA +1 -1
- {synapse-2.221.0.dist-info → synapse-2.223.0.dist-info}/RECORD +46 -42
- {synapse-2.221.0.dist-info → synapse-2.223.0.dist-info}/WHEEL +0 -0
- {synapse-2.221.0.dist-info → synapse-2.223.0.dist-info}/licenses/LICENSE +0 -0
- {synapse-2.221.0.dist-info → synapse-2.223.0.dist-info}/top_level.txt +0 -0
|
@@ -2054,6 +2054,31 @@ class StormTypesTest(s_test.SynTest):
|
|
|
2054
2054
|
self.eq(nodes[0].repr(), 'foo')
|
|
2055
2055
|
self.none(nodes[0].get('hehe'))
|
|
2056
2056
|
|
|
2057
|
+
async with self.getTestCore() as core2:
|
|
2058
|
+
url = core.getLocalUrl('*/layer')
|
|
2059
|
+
|
|
2060
|
+
layers = set(core2.layers.keys())
|
|
2061
|
+
q = f'layer.add --mirror {url}'
|
|
2062
|
+
await core2.stormlist(q)
|
|
2063
|
+
|
|
2064
|
+
uplayr = list(set(core2.layers.keys()) - layers)[0]
|
|
2065
|
+
vdef = {'layers': [uplayr]}
|
|
2066
|
+
|
|
2067
|
+
view00 = await core2.addView(vdef)
|
|
2068
|
+
opts = {'view': view00.get('iden')}
|
|
2069
|
+
|
|
2070
|
+
nodes = await core.nodes('[ test:str=foo :hehe=bar ]')
|
|
2071
|
+
|
|
2072
|
+
layr = core2.getLayer(uplayr)
|
|
2073
|
+
offs = await core.view.layers[0].getEditOffs()
|
|
2074
|
+
self.true(await layr.waitEditOffs(offs, timeout=10))
|
|
2075
|
+
|
|
2076
|
+
q = 'test:str return($lib.layer.get().delStorNodeProp($node.iden(), test:str:hehe))'
|
|
2077
|
+
self.true(await core2.callStorm(q, opts=opts))
|
|
2078
|
+
|
|
2079
|
+
# attempting to delete a second time should not blow up
|
|
2080
|
+
self.false(await core2.callStorm(q, opts=opts))
|
|
2081
|
+
|
|
2057
2082
|
# no test:str:newp prop
|
|
2058
2083
|
q = '''
|
|
2059
2084
|
[ test:str=foobar00 ]
|
|
@@ -7980,103 +8005,3 @@ words\tword\twrd'''
|
|
|
7980
8005
|
|
|
7981
8006
|
q = 'return($lib.axon.unpack($sha256, fmt=">Q", offs=24))'
|
|
7982
8007
|
await self.asyncraises(s_exc.BadDataValu, core.callStorm(q, opts=opts))
|
|
7983
|
-
|
|
7984
|
-
async def test_storm_pkg_vars(self):
|
|
7985
|
-
with self.getTestDir() as dirn:
|
|
7986
|
-
|
|
7987
|
-
async with self.getTestCore(dirn=dirn) as core:
|
|
7988
|
-
|
|
7989
|
-
lowuser = await core.addUser('lowuser')
|
|
7990
|
-
aslow = {'user': lowuser.get('iden')}
|
|
7991
|
-
await core.callStorm('auth.user.addrule lowuser node')
|
|
7992
|
-
|
|
7993
|
-
# basic crud
|
|
7994
|
-
|
|
7995
|
-
self.none(await core.callStorm('return($lib.pkg.vars(pkg0).bar)'))
|
|
7996
|
-
self.none(await core.callStorm('$varz=$lib.pkg.vars(pkg0) $varz.baz=$lib.undef return($varz.baz)'))
|
|
7997
|
-
self.eq([], await core.callStorm('''
|
|
7998
|
-
$kvs = ([])
|
|
7999
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8000
|
-
return($kvs)
|
|
8001
|
-
'''))
|
|
8002
|
-
|
|
8003
|
-
await core.callStorm('$lib.pkg.vars(pkg0).bar = cat')
|
|
8004
|
-
await core.callStorm('$lib.pkg.vars(pkg0).baz = dog')
|
|
8005
|
-
|
|
8006
|
-
await core.callStorm('$lib.pkg.vars(pkg1).bar = emu')
|
|
8007
|
-
await core.callStorm('$lib.pkg.vars(pkg1).baz = groot')
|
|
8008
|
-
|
|
8009
|
-
self.eq('cat', await core.callStorm('return($lib.pkg.vars(pkg0).bar)'))
|
|
8010
|
-
self.eq('dog', await core.callStorm('return($lib.pkg.vars(pkg0).baz)'))
|
|
8011
|
-
self.eq('emu', await core.callStorm('return($lib.pkg.vars(pkg1).bar)'))
|
|
8012
|
-
self.eq('groot', await core.callStorm('return($lib.pkg.vars(pkg1).baz)'))
|
|
8013
|
-
|
|
8014
|
-
self.sorteq([('bar', 'cat'), ('baz', 'dog')], await core.callStorm('''
|
|
8015
|
-
$kvs = ([])
|
|
8016
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8017
|
-
return($kvs)
|
|
8018
|
-
'''))
|
|
8019
|
-
self.sorteq([('bar', 'emu'), ('baz', 'groot')], await core.callStorm('''
|
|
8020
|
-
$kvs = ([])
|
|
8021
|
-
for $kv in $lib.pkg.vars(pkg1) { $kvs.append($kv) }
|
|
8022
|
-
return($kvs)
|
|
8023
|
-
'''))
|
|
8024
|
-
|
|
8025
|
-
await core.callStorm('$lib.pkg.vars(pkg0).baz = $lib.undef')
|
|
8026
|
-
self.none(await core.callStorm('return($lib.pkg.vars(pkg0).baz)'))
|
|
8027
|
-
|
|
8028
|
-
# perms
|
|
8029
|
-
|
|
8030
|
-
await self.asyncraises(s_exc.AuthDeny, core.callStorm('$lib.print($lib.pkg.vars(pkg0))', opts=aslow))
|
|
8031
|
-
await self.asyncraises(s_exc.AuthDeny, core.callStorm('return($lib.pkg.vars(pkg0).baz)', opts=aslow))
|
|
8032
|
-
await self.asyncraises(s_exc.AuthDeny, core.callStorm('$lib.pkg.vars(pkg0).baz = cool', opts=aslow))
|
|
8033
|
-
await self.asyncraises(s_exc.AuthDeny, core.callStorm('$lib.pkg.vars(pkg0).baz = $lib.undef', opts=aslow))
|
|
8034
|
-
await self.asyncraises(s_exc.AuthDeny, core.callStorm('''
|
|
8035
|
-
$kvs = ([])
|
|
8036
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8037
|
-
return($kvs)
|
|
8038
|
-
''', opts=aslow))
|
|
8039
|
-
await self.asyncraises(s_exc.AuthDeny, core.callStorm('''
|
|
8040
|
-
[ test:str=foo ]
|
|
8041
|
-
$kvs = ([])
|
|
8042
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8043
|
-
fini { return($kvs) }
|
|
8044
|
-
''', opts=aslow))
|
|
8045
|
-
|
|
8046
|
-
await core.callStorm('auth.user.addrule lowuser "power-ups.pkg0.admin"')
|
|
8047
|
-
|
|
8048
|
-
self.stormHasNoWarnErr(await core.nodes('$lib.print($lib.pkg.vars(pkg0))', opts=aslow))
|
|
8049
|
-
await core.callStorm('$lib.pkg.vars(pkg0).baz = cool', opts=aslow)
|
|
8050
|
-
self.eq('cool', await core.callStorm('return($lib.pkg.vars(pkg0).baz)', opts=aslow))
|
|
8051
|
-
await core.callStorm('$lib.pkg.vars(pkg0).baz = $lib.undef', opts=aslow)
|
|
8052
|
-
self.eq([('bar', 'cat')], await core.callStorm('''
|
|
8053
|
-
$kvs = ([])
|
|
8054
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8055
|
-
return($kvs)
|
|
8056
|
-
''', opts=aslow))
|
|
8057
|
-
self.eq([('bar', 'cat')], await core.callStorm('''
|
|
8058
|
-
[ test:str=foo ]
|
|
8059
|
-
$kvs = ([])
|
|
8060
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8061
|
-
fini { return($kvs) }
|
|
8062
|
-
''', opts=aslow))
|
|
8063
|
-
|
|
8064
|
-
async with self.getTestCore(dirn=dirn) as core:
|
|
8065
|
-
|
|
8066
|
-
# data persists
|
|
8067
|
-
|
|
8068
|
-
self.eq('cat', await core.callStorm('return($lib.pkg.vars(pkg0).bar)'))
|
|
8069
|
-
self.none(await core.callStorm('return($lib.pkg.vars(pkg0).baz)'))
|
|
8070
|
-
self.eq('emu', await core.callStorm('return($lib.pkg.vars(pkg1).bar)'))
|
|
8071
|
-
self.eq('groot', await core.callStorm('return($lib.pkg.vars(pkg1).baz)'))
|
|
8072
|
-
|
|
8073
|
-
self.sorteq([('bar', 'cat')], await core.callStorm('''
|
|
8074
|
-
$kvs = ([])
|
|
8075
|
-
for $kv in $lib.pkg.vars(pkg0) { $kvs.append($kv) }
|
|
8076
|
-
return($kvs)
|
|
8077
|
-
'''))
|
|
8078
|
-
self.sorteq([('bar', 'emu'), ('baz', 'groot')], await core.callStorm('''
|
|
8079
|
-
$kvs = ([])
|
|
8080
|
-
for $kv in $lib.pkg.vars(pkg1) { $kvs.append($kv) }
|
|
8081
|
-
return($kvs)
|
|
8082
|
-
'''))
|
|
@@ -8,7 +8,7 @@ import synapse.tools.backup as s_tools_backup
|
|
|
8
8
|
|
|
9
9
|
class TrigTest(s_t_utils.SynTest):
|
|
10
10
|
|
|
11
|
-
async def
|
|
11
|
+
async def test_trigger_async_base(self):
|
|
12
12
|
|
|
13
13
|
with self.getTestDir() as dirn:
|
|
14
14
|
|
|
@@ -49,6 +49,24 @@ class TrigTest(s_t_utils.SynTest):
|
|
|
49
49
|
self.none(nodes[0].tags.get('foo'))
|
|
50
50
|
self.none(await core.callStorm('return($lib.queue.gen(foo).pop())'))
|
|
51
51
|
|
|
52
|
+
q = '''$u=$lib.auth.users.get($auto.opts.user)
|
|
53
|
+
$s=`f={$auto.opts.form} v={$auto.opts.valu} u={$u.name}`
|
|
54
|
+
$lib.log.info($s) [ test:guid="*" +#nodeadd]'''
|
|
55
|
+
tdef = {'cond': 'node:add', 'form': 'test:str', 'storm': q}
|
|
56
|
+
await core.view.addTrigger(tdef)
|
|
57
|
+
with self.getAsyncLoggerStream('synapse.storm.log', 'f=') as stream:
|
|
58
|
+
await core.nodes('[ test:str=foo ]')
|
|
59
|
+
self.true(await stream.wait(12))
|
|
60
|
+
self.eq(stream.getvalue().strip(), 'f=test:str v=foo u=root')
|
|
61
|
+
self.len(1, await core.nodes('test:guid#nodeadd'))
|
|
62
|
+
unfo = await core.addUser('someuser')
|
|
63
|
+
await core.setUserAdmin(unfo.get('iden'), True)
|
|
64
|
+
with self.getAsyncLoggerStream('synapse.storm.log', 'f=') as stream:
|
|
65
|
+
await core.nodes('[ test:str=bar ]', opts={'user': unfo.get('iden')})
|
|
66
|
+
self.true(await stream.wait(12))
|
|
67
|
+
self.eq(stream.getvalue().strip(), 'f=test:str v=bar u=someuser')
|
|
68
|
+
self.len(2, await core.nodes('test:guid#nodeadd'))
|
|
69
|
+
|
|
52
70
|
async with self.getTestCore(dirn=dirn) as core:
|
|
53
71
|
|
|
54
72
|
self.nn(await core.callStorm('return($lib.queue.gen(foo).pop(wait=$lib.true))'))
|
|
@@ -141,13 +159,15 @@ class TrigTest(s_t_utils.SynTest):
|
|
|
141
159
|
view = core.view
|
|
142
160
|
|
|
143
161
|
# node:add case
|
|
144
|
-
q = '$
|
|
162
|
+
q = '''$u=$lib.auth.users.get($auto.opts.user)
|
|
163
|
+
$s=`f={$auto.opts.form} v={$auto.opts.valu} u={$u.name}`
|
|
164
|
+
$lib.log.info($s) [ test:guid="*" +#nodeadd]'''
|
|
145
165
|
tdef = {'cond': 'node:add', 'form': 'test:str', 'storm': q}
|
|
146
166
|
await view.addTrigger(tdef)
|
|
147
167
|
with self.getAsyncLoggerStream('synapse.storm.log', 'f=') as stream:
|
|
148
168
|
await core.nodes('[ test:str=foo ]')
|
|
149
169
|
self.true(await stream.wait(6))
|
|
150
|
-
self.eq(stream.getvalue().strip(), 'f=test:str v=foo')
|
|
170
|
+
self.eq(stream.getvalue().strip(), 'f=test:str v=foo u=root')
|
|
151
171
|
self.len(1, await core.nodes('test:guid#nodeadd'))
|
|
152
172
|
|
|
153
173
|
# node:del case
|
|
@@ -910,3 +930,46 @@ class TrigTest(s_t_utils.SynTest):
|
|
|
910
930
|
for view in core.views.values():
|
|
911
931
|
for _, trigger in view.triggers.list():
|
|
912
932
|
self.eq(trigger.tdef.get('view'), view.iden)
|
|
933
|
+
|
|
934
|
+
async def test_trigger_feed_data(self):
|
|
935
|
+
async with self.getTestCore() as core0:
|
|
936
|
+
|
|
937
|
+
podes = []
|
|
938
|
+
|
|
939
|
+
node1 = (await core0.nodes('[ test:int=1 ]'))[0]
|
|
940
|
+
await node1.setData('foo', 'bar')
|
|
941
|
+
pack = node1.pack()
|
|
942
|
+
pack[1]['nodedata']['foo'] = 'bar'
|
|
943
|
+
podes.append(pack)
|
|
944
|
+
|
|
945
|
+
node2 = (await core0.nodes('[ test:int=2 ] | [ +(refs)> { test:int=1 } ]'))[0]
|
|
946
|
+
pack = node2.pack()
|
|
947
|
+
pack[1]['edges'] = (('refs', node1.iden()), )
|
|
948
|
+
podes.append(pack)
|
|
949
|
+
|
|
950
|
+
node3 = (await core0.nodes('[ test:int=3 ]'))[0]
|
|
951
|
+
podes.append(node3.pack())
|
|
952
|
+
|
|
953
|
+
node = (await core0.nodes(f'[ test:int=4 ]'))[0]
|
|
954
|
+
pack = node.pack()
|
|
955
|
+
podes.append(pack)
|
|
956
|
+
|
|
957
|
+
async with self.getTestCore() as core1:
|
|
958
|
+
|
|
959
|
+
q = '''$u=$lib.auth.users.get($auto.opts.user)
|
|
960
|
+
$s=`f={$auto.opts.form} v={$auto.opts.valu} u={$u.name}`
|
|
961
|
+
$lib.log.info($s) [ test:guid="*" +#nodeadd]'''
|
|
962
|
+
tdef = {'cond': 'node:add', 'form': 'test:str', 'storm': q}
|
|
963
|
+
await core1.view.addTrigger(tdef)
|
|
964
|
+
tdef = {'cond': 'node:add', 'form': 'test:int', 'storm': q}
|
|
965
|
+
await core1.view.addTrigger(tdef)
|
|
966
|
+
|
|
967
|
+
with self.getAsyncLoggerStream('synapse.storm.log', 'f=') as stream:
|
|
968
|
+
await core1.addFeedData('syn.nodes', podes)
|
|
969
|
+
self.true(await stream.wait(6))
|
|
970
|
+
valu = stream.getvalue().strip()
|
|
971
|
+
self.isin('f=test:int v=1 u=root', valu)
|
|
972
|
+
self.isin('f=test:int v=2 u=root', valu)
|
|
973
|
+
self.isin('f=test:int v=3 u=root', valu)
|
|
974
|
+
self.isin('f=test:int v=4 u=root', valu)
|
|
975
|
+
self.len(4, await core1.nodes('test:guid#nodeadd'))
|
synapse/tests/test_lib_view.py
CHANGED
|
@@ -605,6 +605,59 @@ class ViewTest(s_t_utils.SynTest):
|
|
|
605
605
|
self.len(1, await core.nodes('ou:org#foo', opts={'view': view}))
|
|
606
606
|
self.len(1, await core.nodes('test:str=foo', opts={'view': view}))
|
|
607
607
|
|
|
608
|
+
async def test_lib_view_savenodeedits_telepath(self):
|
|
609
|
+
|
|
610
|
+
async with self.getTestCore() as core:
|
|
611
|
+
|
|
612
|
+
unfo = await core.getUserDefByName('root')
|
|
613
|
+
root = unfo.get('iden')
|
|
614
|
+
|
|
615
|
+
view = await core.callStorm('''
|
|
616
|
+
$layr = $lib.layer.add().iden
|
|
617
|
+
$view = $lib.view.add(($layr,))
|
|
618
|
+
return($view.iden)
|
|
619
|
+
''')
|
|
620
|
+
|
|
621
|
+
await core.nodes('trigger.add node:add --form test:guid --query {$lib.log.info(`u={$auto.opts.user}`) [+#foo]}', opts={'view': view})
|
|
622
|
+
await core.nodes('trigger.add node:del --form test:int --query {$lib.log.info(`u={$auto.opts.user}`) [test:str=foo]}', opts={'view': view})
|
|
623
|
+
|
|
624
|
+
await core.nodes('[ test:guid=* ]')
|
|
625
|
+
self.len(0, await core.nodes('test:guid', opts={'view': view}))
|
|
626
|
+
|
|
627
|
+
await core.nodes('[ test:int=0 ]')
|
|
628
|
+
self.len(0, await core.nodes('test:int', opts={'view': view}))
|
|
629
|
+
|
|
630
|
+
await core.nodes('test:int | delnode')
|
|
631
|
+
|
|
632
|
+
edits = await core.callStorm('''$nodeedits = ()
|
|
633
|
+
for ($offs, $edits) in $lib.layer.get().edits(wait=$lib.false) {
|
|
634
|
+
$nodeedits.extend($edits)
|
|
635
|
+
}
|
|
636
|
+
return($nodeedits)''')
|
|
637
|
+
|
|
638
|
+
user = await core.auth.addUser('user')
|
|
639
|
+
await user.addRule((True, ('view', 'read')))
|
|
640
|
+
guid = s_common.guid()
|
|
641
|
+
|
|
642
|
+
async with core.getLocalProxy(share=f'*/view/{view}', user='user') as prox:
|
|
643
|
+
with self.raises(s_exc.AuthDeny):
|
|
644
|
+
await prox.saveNodeEdits(edits, {})
|
|
645
|
+
|
|
646
|
+
await core.setUserAdmin(user.iden, True)
|
|
647
|
+
|
|
648
|
+
with self.raises(s_exc.BadArg) as cm:
|
|
649
|
+
await prox.saveNodeEdits(edits, {})
|
|
650
|
+
self.eq(cm.exception.get('mesg'), "Meta argument requires user key to be a guid, got user=''")
|
|
651
|
+
|
|
652
|
+
with self.getAsyncLoggerStream('synapse.storm.log', 'u=') as stream:
|
|
653
|
+
await prox.saveNodeEdits(edits, {'time': s_common.now(), 'user': guid})
|
|
654
|
+
self.true(await stream.wait(6))
|
|
655
|
+
valu = stream.getvalue().strip()
|
|
656
|
+
self.isin(f'u={guid}', valu)
|
|
657
|
+
|
|
658
|
+
self.len(1, await core.nodes('test:guid#foo', opts={'view': view}))
|
|
659
|
+
self.len(1, await core.nodes('test:str=foo', opts={'view': view}))
|
|
660
|
+
|
|
608
661
|
async def test_lib_view_wipeLayer(self):
|
|
609
662
|
|
|
610
663
|
async with self.getTestCore() as core:
|
|
@@ -103,6 +103,17 @@ class FileTest(s_t_utils.SynTest):
|
|
|
103
103
|
self.eq(rnode.get('type'), 2)
|
|
104
104
|
self.eq(rnode.repr('langid'), 'en-US')
|
|
105
105
|
self.eq(rnode.repr('type'), 'RT_BITMAP')
|
|
106
|
+
# unknown langid
|
|
107
|
+
nodes = await core.nodes('[file:mime:pe:resource=$valu]',
|
|
108
|
+
opts={'vars': {'valu': (filea, 2, 0x1804, 'd' * 64)}})
|
|
109
|
+
self.len(1, nodes)
|
|
110
|
+
rnode = nodes[0]
|
|
111
|
+
self.eq(rnode.get('langid'), 0x1804)
|
|
112
|
+
self.eq(rnode.repr('langid'), '6148')
|
|
113
|
+
# invalid langid
|
|
114
|
+
with self.raises(s_exc.BadTypeValu):
|
|
115
|
+
await core.nodes('[file:mime:pe:resource=$valu]',
|
|
116
|
+
opts={'vars': {'valu': (filea, 2, 0xfffff, 'd' * 64)}})
|
|
106
117
|
# pe section
|
|
107
118
|
nodes = await core.nodes('[file:mime:pe:section=$valu]',
|
|
108
119
|
opts={'vars': {'valu': (filea, 'foo', 'b' * 64)}})
|
synapse/tests/test_model_orgs.py
CHANGED
|
@@ -25,6 +25,7 @@ class OuModelTest(s_t_utils.SynTest):
|
|
|
25
25
|
:reporter=$lib.gen.orgByName(vertex)
|
|
26
26
|
:reporter:name=vertex
|
|
27
27
|
:ext:id=Foo
|
|
28
|
+
:parent={[ ou:technique=* :name=metawoot ]}
|
|
28
29
|
]
|
|
29
30
|
''')
|
|
30
31
|
self.len(1, nodes)
|
|
@@ -37,10 +38,14 @@ class OuModelTest(s_t_utils.SynTest):
|
|
|
37
38
|
self.eq('T0001', nodes[0].get('mitre:attack:technique'))
|
|
38
39
|
self.eq(40, nodes[0].get('sophistication'))
|
|
39
40
|
self.eq('vertex', nodes[0].get('reporter:name'))
|
|
41
|
+
self.nn(nodes[0].get('parent'))
|
|
40
42
|
self.len(1, await core.nodes('ou:technique -> syn:tag'))
|
|
41
43
|
self.len(1, await core.nodes('ou:technique -> ou:technique:taxonomy'))
|
|
42
44
|
self.len(1, await core.nodes('ou:technique -> it:mitre:attack:technique'))
|
|
43
|
-
|
|
45
|
+
|
|
46
|
+
nodes = await core.nodes('ou:technique :parent -> *')
|
|
47
|
+
self.len(1, nodes)
|
|
48
|
+
self.eq('metawoot', nodes[0].get('name'))
|
|
44
49
|
|
|
45
50
|
props = {
|
|
46
51
|
'name': 'MyGoal',
|
synapse/tools/cryo/cat.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import sys
|
|
2
2
|
import pprint
|
|
3
|
-
import argparse
|
|
4
3
|
|
|
4
|
+
import synapse.common as s_common
|
|
5
5
|
import synapse.telepath as s_telepath
|
|
6
6
|
|
|
7
7
|
import synapse.lib.cmd as s_cmd
|
|
@@ -58,4 +58,5 @@ async def main(argv, outp=s_output.stdout):
|
|
|
58
58
|
return 0
|
|
59
59
|
|
|
60
60
|
if __name__ == '__main__': # pragma: no cover
|
|
61
|
+
s_common.deprecated('synapse.tools.cryo.cat', curv='2.223.0')
|
|
61
62
|
s_cmd.exitmain(main)
|
synapse/tools/cryo/list.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import synapse.common as s_common
|
|
1
2
|
import synapse.telepath as s_telepath
|
|
2
3
|
|
|
3
4
|
import synapse.lib.cmd as s_cmd
|
|
@@ -24,4 +25,5 @@ async def main(argv, outp=s_output.stdout):
|
|
|
24
25
|
return 0
|
|
25
26
|
|
|
26
27
|
if __name__ == '__main__': # pragma: no cover
|
|
28
|
+
s_common.deprecated('synapse.tools.cryo.list', curv='2.223.0')
|
|
27
29
|
s_cmd.exitmain(main)
|