synapse 2.182.0__py311-none-any.whl → 2.183.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 +5 -0
- synapse/lib/ast.py +1 -1
- synapse/lib/autodoc.py +64 -5
- synapse/lib/storm.py +23 -0
- synapse/lib/stormlib/cortex.py +1 -0
- synapse/lib/stormlib/infosec.py +2 -0
- synapse/lib/stormlib/model.py +2 -1
- synapse/lib/stormlib/random.py +84 -3
- synapse/lib/stormtypes.py +4 -0
- synapse/lib/version.py +2 -2
- synapse/models/infotech.py +0 -15
- synapse/tests/files/stormpkg/testpkg.yaml +10 -0
- synapse/tests/test_cortex.py +16 -0
- synapse/tests/test_lib_autodoc.py +31 -0
- synapse/tests/test_lib_storm.py +4 -0
- synapse/tests/test_lib_stormlib_random.py +93 -0
- synapse/tests/test_model_infotech.py +39 -0
- synapse/tests/test_tools_autodoc.py +6 -0
- synapse/tests/utils.py +2 -0
- synapse/tools/autodoc.py +2 -1
- synapse/tools/changelog.py +53 -10
- {synapse-2.182.0.dist-info → synapse-2.183.0.dist-info}/METADATA +1 -1
- {synapse-2.182.0.dist-info → synapse-2.183.0.dist-info}/RECORD +26 -26
- {synapse-2.182.0.dist-info → synapse-2.183.0.dist-info}/LICENSE +0 -0
- {synapse-2.182.0.dist-info → synapse-2.183.0.dist-info}/WHEEL +0 -0
- {synapse-2.182.0.dist-info → synapse-2.183.0.dist-info}/top_level.txt +0 -0
synapse/cortex.py
CHANGED
|
@@ -1453,6 +1453,11 @@ class Cortex(s_oauth.OAuthMixin, s_cell.Cell): # type: ignore
|
|
|
1453
1453
|
{'perm': ('storm', 'macro', 'edit'), 'gate': 'cortex',
|
|
1454
1454
|
'desc': 'Controls access to edit a storm macro.'},
|
|
1455
1455
|
|
|
1456
|
+
{'perm': ('task', 'get'), 'gate': 'cortex',
|
|
1457
|
+
'desc': 'Controls access to view other users tasks.'},
|
|
1458
|
+
{'perm': ('task', 'del'), 'gate': 'cortex',
|
|
1459
|
+
'desc': 'Controls access to terminate other users tasks.'},
|
|
1460
|
+
|
|
1456
1461
|
{'perm': ('view',), 'gate': 'cortex',
|
|
1457
1462
|
'desc': 'Controls all view permissions.'},
|
|
1458
1463
|
{'perm': ('view', 'add'), 'gate': 'cortex',
|
synapse/lib/ast.py
CHANGED
|
@@ -4517,7 +4517,7 @@ class EditTagAdd(Edit):
|
|
|
4517
4517
|
else:
|
|
4518
4518
|
oper_offset = 0
|
|
4519
4519
|
|
|
4520
|
-
excignore = (s_exc.BadTypeValu,) if oper_offset == 1 else ()
|
|
4520
|
+
excignore = (s_exc.BadTypeValu, s_exc.BadTag) if oper_offset == 1 else ()
|
|
4521
4521
|
|
|
4522
4522
|
hasval = len(self.kids) > 2 + oper_offset
|
|
4523
4523
|
|
synapse/lib/autodoc.py
CHANGED
|
@@ -28,6 +28,7 @@ stormtype_doc_schema = {
|
|
|
28
28
|
'description': 'For a function argument, the name of the argument.'},
|
|
29
29
|
'desc': {'type': 'string',
|
|
30
30
|
'description': 'For a function argument or return value, the description of the value.'},
|
|
31
|
+
'deprecated': {'$ref': '#/definitions/deprecatedItem'},
|
|
31
32
|
'type': {'$ref': '#/definitions/stormType'},
|
|
32
33
|
'args': {
|
|
33
34
|
'type': 'array',
|
|
@@ -46,7 +47,28 @@ stormtype_doc_schema = {
|
|
|
46
47
|
'documentation for.',
|
|
47
48
|
'additionalProperties': False,
|
|
48
49
|
},
|
|
49
|
-
|
|
50
|
+
'deprecatedItem': {
|
|
51
|
+
'type': 'object',
|
|
52
|
+
'properties': {
|
|
53
|
+
'eolvers': {'type': 'string', 'minLength': 1,
|
|
54
|
+
'description': "The version which will not longer support the item."},
|
|
55
|
+
'eoldate': {'type': 'string', 'minLength': 1,
|
|
56
|
+
'description': 'Optional string indicating Synapse releases after this date may no longer support the item.'},
|
|
57
|
+
'mesg': {'type': ['string', 'null'], 'default': None,
|
|
58
|
+
'description': 'Optional message to include in the warning text.'}
|
|
59
|
+
},
|
|
60
|
+
'oneOf': [
|
|
61
|
+
{
|
|
62
|
+
'required': ['eolvers'],
|
|
63
|
+
'not': {'required': ['eoldate']}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
'required': ['eoldate'],
|
|
67
|
+
'not': {'required': ['eolvers']}
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
'additionalProperties': False,
|
|
71
|
+
},
|
|
50
72
|
'stormtypeDoc': {
|
|
51
73
|
'type': 'object',
|
|
52
74
|
'properties': {
|
|
@@ -54,6 +76,7 @@ stormtype_doc_schema = {
|
|
|
54
76
|
'description': 'The name of the object.'},
|
|
55
77
|
'desc': {'type': 'string',
|
|
56
78
|
'description': 'The docstring of the object.'},
|
|
79
|
+
'deprecated': {'$ref': '#/definitions/deprecatedItem'},
|
|
57
80
|
'type': {'$ref': '#/definitions/stormType'}
|
|
58
81
|
},
|
|
59
82
|
'additionalProperties': False,
|
|
@@ -186,6 +209,34 @@ def getArgLines(rtype):
|
|
|
186
209
|
|
|
187
210
|
return lines
|
|
188
211
|
|
|
212
|
+
def genDeprecationWarning(name, depr, runt=False):
|
|
213
|
+
assert name is not None
|
|
214
|
+
assert depr is not None
|
|
215
|
+
lines = []
|
|
216
|
+
if runt:
|
|
217
|
+
lines.append('.. warning::')
|
|
218
|
+
else:
|
|
219
|
+
lines.append('Warning:')
|
|
220
|
+
|
|
221
|
+
mesg = depr.get('mesg')
|
|
222
|
+
date = depr.get('eoldate')
|
|
223
|
+
vers = depr.get('eolvers')
|
|
224
|
+
|
|
225
|
+
ws = ''
|
|
226
|
+
if runt:
|
|
227
|
+
ws = ' '
|
|
228
|
+
|
|
229
|
+
if date:
|
|
230
|
+
lines.append(f'{ws}``{name}`` has been deprecated and will be removed on or after {date}.')
|
|
231
|
+
else:
|
|
232
|
+
lines.append(f'{ws}``{name}`` has been deprecated and will be removed in version {vers}.')
|
|
233
|
+
if mesg:
|
|
234
|
+
lines.append(f'{ws}{mesg}')
|
|
235
|
+
|
|
236
|
+
lines.append('\n')
|
|
237
|
+
|
|
238
|
+
return lines
|
|
239
|
+
|
|
189
240
|
def runtimeGetArgLines(rtype):
|
|
190
241
|
lines = []
|
|
191
242
|
args = rtype.get('args', ())
|
|
@@ -424,6 +475,9 @@ def docStormTypes(page, docinfo, linkprefix, islib=False, lvl=1,
|
|
|
424
475
|
assert rtype is not None
|
|
425
476
|
|
|
426
477
|
link = f'.. _{linkprefix}-{loclname.replace(":", ".").replace(".", "-")}:'
|
|
478
|
+
lines = []
|
|
479
|
+
if depr := locl.get('deprecated'):
|
|
480
|
+
lines.extend(genDeprecationWarning(f'${loclname}', depr, True))
|
|
427
481
|
|
|
428
482
|
if isinstance(rtype, dict):
|
|
429
483
|
rname = rtype.get('type')
|
|
@@ -445,7 +499,7 @@ def docStormTypes(page, docinfo, linkprefix, islib=False, lvl=1,
|
|
|
445
499
|
if rname == 'stor' or 'stor' in rname:
|
|
446
500
|
isstor = True
|
|
447
501
|
|
|
448
|
-
lines
|
|
502
|
+
lines.extend(prepareRstLines(desc))
|
|
449
503
|
arglines = getArgLines(rtype)
|
|
450
504
|
lines.extend(arglines)
|
|
451
505
|
|
|
@@ -461,7 +515,7 @@ def docStormTypes(page, docinfo, linkprefix, islib=False, lvl=1,
|
|
|
461
515
|
|
|
462
516
|
else:
|
|
463
517
|
header = name
|
|
464
|
-
lines
|
|
518
|
+
lines.extend(prepareRstLines(desc))
|
|
465
519
|
|
|
466
520
|
retlines = getReturnLines(rtype, known_types=known_types, types_prefix=types_prefix,
|
|
467
521
|
suffix=types_suffix)
|
|
@@ -472,6 +526,7 @@ def docStormTypes(page, docinfo, linkprefix, islib=False, lvl=1,
|
|
|
472
526
|
header = f'${header}'
|
|
473
527
|
|
|
474
528
|
page.addHead(header, lvl=lvl + 1, link=link)
|
|
529
|
+
|
|
475
530
|
page.addLines(*lines)
|
|
476
531
|
|
|
477
532
|
def runtimeDocStormTypes(page, docinfo, islib=False, lvl=1,
|
|
@@ -568,13 +623,17 @@ def runtimeDocStormTypes(page, docinfo, islib=False, lvl=1,
|
|
|
568
623
|
assert desc is not None
|
|
569
624
|
assert rtype is not None
|
|
570
625
|
|
|
626
|
+
lines = []
|
|
627
|
+
if (depr := locl.get('deprecated')) and not oneline:
|
|
628
|
+
lines.extend(genDeprecationWarning(f'${loclname}', depr))
|
|
629
|
+
|
|
571
630
|
if isinstance(rtype, dict):
|
|
572
631
|
rname = rtype.get('type')
|
|
573
632
|
|
|
574
633
|
if isinstance(rname, dict):
|
|
575
634
|
raise AssertionError(f'rname as dict not supported loclname={loclname} rname={rname}')
|
|
576
635
|
|
|
577
|
-
lines
|
|
636
|
+
lines.extend(prepareRstLines(desc))
|
|
578
637
|
arglines = runtimeGetArgLines(rtype)
|
|
579
638
|
lines.extend(arglines)
|
|
580
639
|
|
|
@@ -588,7 +647,7 @@ def runtimeDocStormTypes(page, docinfo, islib=False, lvl=1,
|
|
|
588
647
|
|
|
589
648
|
else:
|
|
590
649
|
header = name
|
|
591
|
-
lines
|
|
650
|
+
lines.extend(prepareRstLines(desc))
|
|
592
651
|
|
|
593
652
|
retlines = runtimeGetReturnLines(rtype)
|
|
594
653
|
lines.extend(retlines)
|
synapse/lib/storm.py
CHANGED
|
@@ -342,6 +342,7 @@ reqValidPkgdef = s_config.getJsValidator({
|
|
|
342
342
|
'properties': {
|
|
343
343
|
'name': {'type': 'string'},
|
|
344
344
|
'desc': {'type': 'string'},
|
|
345
|
+
'deprecated': {'$ref': '#/definitions/deprecatedItem'},
|
|
345
346
|
'type': {
|
|
346
347
|
'type': 'object',
|
|
347
348
|
'properties': {
|
|
@@ -395,6 +396,28 @@ reqValidPkgdef = s_config.getJsValidator({
|
|
|
395
396
|
'additionalProperties': False,
|
|
396
397
|
'required': ['name', 'desc', 'type']
|
|
397
398
|
},
|
|
399
|
+
'deprecatedItem': {
|
|
400
|
+
'type': 'object',
|
|
401
|
+
'properties': {
|
|
402
|
+
'eolvers': {'type': 'string', 'minLength': 1,
|
|
403
|
+
'description': "The version which will not longer support the item."},
|
|
404
|
+
'eoldate': {'type': 'string', 'minLength': 1,
|
|
405
|
+
'description': 'Optional string indicating Synapse releases after this date may no longer support the item.'},
|
|
406
|
+
'mesg': {'type': ['string', 'null'], 'default': None,
|
|
407
|
+
'description': 'Optional message to include in the warning text.'}
|
|
408
|
+
},
|
|
409
|
+
'oneOf': [
|
|
410
|
+
{
|
|
411
|
+
'required': ['eolvers'],
|
|
412
|
+
'not': {'required': ['eoldate']}
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
'required': ['eoldate'],
|
|
416
|
+
'not': {'required': ['eolvers']}
|
|
417
|
+
}
|
|
418
|
+
],
|
|
419
|
+
'additionalProperties': False,
|
|
420
|
+
},
|
|
398
421
|
'apitype': {
|
|
399
422
|
'type': 'string',
|
|
400
423
|
},
|
synapse/lib/stormlib/cortex.py
CHANGED
|
@@ -715,6 +715,7 @@ class HttpPermsList(s_stormtypes.List):
|
|
|
715
715
|
),
|
|
716
716
|
'returns': {'type': 'any', 'desc': 'The permission present in the list at the index position.', }}},
|
|
717
717
|
{'name': 'length', 'desc': 'Get the length of the list. This is deprecated; please use ``.size()`` instead.',
|
|
718
|
+
'deprecated': {'eolvers': 'v3.0.0'},
|
|
718
719
|
'type': {'type': 'function', '_funcname': '_methListLength',
|
|
719
720
|
'returns': {'type': 'int', 'desc': 'The size of the list.', }}},
|
|
720
721
|
{'name': 'append', 'desc': 'Append a permission to the list.',
|
synapse/lib/stormlib/infosec.py
CHANGED
|
@@ -537,6 +537,7 @@ class CvssLib(s_stormtypes.Lib):
|
|
|
537
537
|
'returns': {'type': 'dict', 'desc': 'A dictionary containing the computed score and subscores.', }
|
|
538
538
|
}},
|
|
539
539
|
{'name': 'vectToProps', 'desc': 'Parse a CVSS v3.1 vector and return a dictionary of risk:vuln props.',
|
|
540
|
+
'deprecated': {'eolvers': 'v3.0.0'},
|
|
540
541
|
'type': {'type': 'function', '_funcname': 'vectToProps',
|
|
541
542
|
'args': (
|
|
542
543
|
{'name': 'text', 'type': 'str', 'desc': 'A CVSS vector string.'},
|
|
@@ -544,6 +545,7 @@ class CvssLib(s_stormtypes.Lib):
|
|
|
544
545
|
'returns': {'type': 'dict', 'desc': 'A dictionary of risk:vuln secondary props.', }
|
|
545
546
|
}},
|
|
546
547
|
{'name': 'saveVectToNode', 'desc': 'Parse a CVSS v3.1 vector and record properties on a risk:vuln node.',
|
|
548
|
+
'deprecated': {'eolvers': 'v3.0.0'},
|
|
547
549
|
'type': {'type': 'function', '_funcname': 'saveVectToNode',
|
|
548
550
|
'args': (
|
|
549
551
|
{'name': 'node', 'type': 'node',
|
synapse/lib/stormlib/model.py
CHANGED
|
@@ -543,7 +543,7 @@ class ModelType(s_stormtypes.Prim):
|
|
|
543
543
|
@s_stormtypes.registry.registerLib
|
|
544
544
|
class LibModelEdge(s_stormtypes.Lib):
|
|
545
545
|
'''
|
|
546
|
-
A Storm Library for interacting with light edges and manipulating their key-value attributes.
|
|
546
|
+
A Storm Library for interacting with light edges and manipulating their key-value attributes. This Library is deprecated.
|
|
547
547
|
'''
|
|
548
548
|
_storm_locals = (
|
|
549
549
|
{'name': 'get', 'desc': 'Get the key-value data for a given Edge verb.',
|
|
@@ -588,6 +588,7 @@ class LibModelEdge(s_stormtypes.Lib):
|
|
|
588
588
|
hivepath = ('cortex', 'model', 'edges')
|
|
589
589
|
|
|
590
590
|
_storm_lib_path = ('model', 'edge')
|
|
591
|
+
_storm_lib_deprecation = {'eolvers': 'v3.0.0'}
|
|
591
592
|
|
|
592
593
|
def __init__(self, runt, name=()):
|
|
593
594
|
s_stormtypes.Lib.__init__(self, runt, name)
|
synapse/lib/stormlib/random.py
CHANGED
|
@@ -1,10 +1,77 @@
|
|
|
1
1
|
import random
|
|
2
2
|
|
|
3
3
|
import synapse.exc as s_exc
|
|
4
|
+
import synapse.common as s_common
|
|
5
|
+
|
|
4
6
|
import synapse.lib.stormtypes as s_stormtypes
|
|
5
7
|
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
6
10
|
randinst = random.SystemRandom()
|
|
7
11
|
|
|
12
|
+
|
|
13
|
+
@s_stormtypes.registry.registerType
|
|
14
|
+
class Random(s_stormtypes.StormType):
|
|
15
|
+
'''
|
|
16
|
+
A random number generator.
|
|
17
|
+
'''
|
|
18
|
+
_storm_typename = 'random'
|
|
19
|
+
_storm_locals = (
|
|
20
|
+
{'name': 'int', 'desc': 'Generate a random integer.',
|
|
21
|
+
'type': {'type': 'function', '_funcname': '_methInt',
|
|
22
|
+
'args': (
|
|
23
|
+
{'name': 'maxval', 'type': 'int', 'desc': 'The maximum random value.'},
|
|
24
|
+
{'name': 'minval', 'type': 'int', 'desc': 'The minimum random value.', 'default': 0},
|
|
25
|
+
),
|
|
26
|
+
'returns': {'type': 'int', 'desc': 'A random integer in the range min-max inclusive.'}}},
|
|
27
|
+
{'name': 'seed', 'desc': 'The seed used for the generator. Setting this value resets the generator state.',
|
|
28
|
+
'type': {'type': ['gtor', 'stor'], '_storfunc': '_storSeed', '_gtorfunc': '_gtorSeed',
|
|
29
|
+
'returns': {'type': ['str', 'null']}}},
|
|
30
|
+
)
|
|
31
|
+
_ismutable = False
|
|
32
|
+
|
|
33
|
+
def __init__(self, runt, seed: Optional[str] =None):
|
|
34
|
+
s_stormtypes.StormType.__init__(self)
|
|
35
|
+
self.runt = runt
|
|
36
|
+
self._seed = seed
|
|
37
|
+
self.robj = random.Random()
|
|
38
|
+
if seed is not None:
|
|
39
|
+
self.robj.seed(self._seed, version=2)
|
|
40
|
+
self.locls.update(self.getObjLocals())
|
|
41
|
+
self.gtors.update({
|
|
42
|
+
'seed': self._gtorSeed,
|
|
43
|
+
})
|
|
44
|
+
self.stors.update({
|
|
45
|
+
'seed': self._storSeed,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
async def stormrepr(self):
|
|
49
|
+
ret = f'{self._storm_typename}'
|
|
50
|
+
if self._seed is not None:
|
|
51
|
+
ret = f'{ret} seed={s_common.trimText(self._seed, n=40)}'
|
|
52
|
+
return ret
|
|
53
|
+
|
|
54
|
+
def getObjLocals(self):
|
|
55
|
+
return {
|
|
56
|
+
'int': self._methInt,
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async def _gtorSeed(self):
|
|
60
|
+
return self._seed
|
|
61
|
+
|
|
62
|
+
async def _storSeed(self, seed):
|
|
63
|
+
self._seed = await s_stormtypes.tostr(seed, noneok=True)
|
|
64
|
+
self.robj.seed(self._seed)
|
|
65
|
+
|
|
66
|
+
@s_stormtypes.stormfunc(readonly=True)
|
|
67
|
+
async def _methInt(self, maxval, minval=0):
|
|
68
|
+
maxval = await s_stormtypes.toint(maxval)
|
|
69
|
+
minval = await s_stormtypes.toint(minval)
|
|
70
|
+
if minval > maxval:
|
|
71
|
+
raise s_exc.BadArg(mesg=f'Minval must be less than or equal to maxval, minval={minval}, maxval={maxval}',
|
|
72
|
+
minval=minval, maxval=maxval)
|
|
73
|
+
return self.robj.randint(minval, maxval)
|
|
74
|
+
|
|
8
75
|
@s_stormtypes.registry.registerLib
|
|
9
76
|
class LibRandom(s_stormtypes.Lib):
|
|
10
77
|
'''
|
|
@@ -12,22 +79,36 @@ class LibRandom(s_stormtypes.Lib):
|
|
|
12
79
|
'''
|
|
13
80
|
_storm_locals = (
|
|
14
81
|
{'name': 'int', 'desc': 'Generate a random integer.',
|
|
15
|
-
'type': {'type': 'function', '_funcname': '
|
|
82
|
+
'type': {'type': 'function', '_funcname': '_methInt',
|
|
16
83
|
'args': (
|
|
17
84
|
{'name': 'maxval', 'type': 'int', 'desc': 'The maximum random value.'},
|
|
18
85
|
{'name': 'minval', 'type': 'int', 'desc': 'The minimum random value.', 'default': 0},
|
|
19
86
|
),
|
|
20
87
|
'returns': {'type': 'int', 'desc': 'A random integer in the range min-max inclusive.'}}},
|
|
88
|
+
{'name': 'generator', 'desc': 'Make a random generator with a given seed.',
|
|
89
|
+
'type': {'type': 'function', '_funcname': '_methGenerator',
|
|
90
|
+
'args': (
|
|
91
|
+
{'name': 'seed', 'type': 'str', 'default': None,
|
|
92
|
+
'desc': 'The seed value used for the random generator.'},
|
|
93
|
+
),
|
|
94
|
+
'returns': {'type': 'random', 'desc': 'The random generator object.'}}
|
|
95
|
+
}
|
|
21
96
|
)
|
|
22
97
|
_storm_lib_path = ('random',)
|
|
23
98
|
|
|
24
99
|
def getObjLocals(self):
|
|
25
100
|
return {
|
|
26
|
-
'int': self.
|
|
101
|
+
'int': self._methInt,
|
|
102
|
+
'generator': self._methGenerator,
|
|
27
103
|
}
|
|
28
104
|
|
|
29
105
|
@s_stormtypes.stormfunc(readonly=True)
|
|
30
|
-
async def
|
|
106
|
+
async def _methGenerator(self, seed=None):
|
|
107
|
+
seed = await s_stormtypes.tostr(seed, noneok=True)
|
|
108
|
+
return Random(self.runt, seed=seed)
|
|
109
|
+
|
|
110
|
+
@s_stormtypes.stormfunc(readonly=True)
|
|
111
|
+
async def _methInt(self, maxval, minval=0):
|
|
31
112
|
maxval = await s_stormtypes.toint(maxval)
|
|
32
113
|
minval = await s_stormtypes.toint(minval)
|
|
33
114
|
if minval > maxval:
|
synapse/lib/stormtypes.py
CHANGED
|
@@ -277,6 +277,7 @@ class StormTypesRegistry:
|
|
|
277
277
|
'desc': getDoc(slib, sname),
|
|
278
278
|
'locals': locs,
|
|
279
279
|
'path': ('lib',) + slib._storm_lib_path,
|
|
280
|
+
'deprecated': slib._storm_lib_deprecation,
|
|
280
281
|
}
|
|
281
282
|
for info in sorted(slib._storm_locals, key=lambda x: x.get('name')):
|
|
282
283
|
info = s_msgpack.deepcopy(info)
|
|
@@ -509,6 +510,7 @@ class Lib(StormType):
|
|
|
509
510
|
_storm_query = None
|
|
510
511
|
_storm_typename = 'lib'
|
|
511
512
|
_storm_lib_perms = ()
|
|
513
|
+
_storm_lib_deprecation = None
|
|
512
514
|
|
|
513
515
|
def __init__(self, runt, name=()):
|
|
514
516
|
StormType.__init__(self)
|
|
@@ -2659,6 +2661,7 @@ class LibBytes(Lib):
|
|
|
2659
2661
|
'returns': {'type': 'list', 'desc': 'A tuple of the file size and sha256 value.', }}},
|
|
2660
2662
|
)
|
|
2661
2663
|
_storm_lib_path = ('bytes',)
|
|
2664
|
+
_storm_lib_deprecation = {'eolvers': 'v3.0.0'}
|
|
2662
2665
|
|
|
2663
2666
|
def getObjLocals(self):
|
|
2664
2667
|
return {
|
|
@@ -5005,6 +5008,7 @@ class List(Prim):
|
|
|
5005
5008
|
),
|
|
5006
5009
|
'returns': {'type': 'any', 'desc': 'The item present in the list at the index position.', }}},
|
|
5007
5010
|
{'name': 'length', 'desc': 'Get the length of the list. This is deprecated; please use ``.size()`` instead.',
|
|
5011
|
+
'deprecated': {'eolvers': 'v3.0.0'},
|
|
5008
5012
|
'type': {'type': 'function', '_funcname': '_methListLength',
|
|
5009
5013
|
'returns': {'type': 'int', 'desc': 'The size of the list.', }}},
|
|
5010
5014
|
{'name': 'append', 'desc': 'Append a value to the list.',
|
synapse/lib/version.py
CHANGED
|
@@ -223,6 +223,6 @@ def reqVersion(valu, reqver,
|
|
|
223
223
|
##############################################################################
|
|
224
224
|
# The following are touched during the release process by bumpversion.
|
|
225
225
|
# Do not modify these directly.
|
|
226
|
-
version = (2,
|
|
226
|
+
version = (2, 183, 0)
|
|
227
227
|
verstring = '.'.join([str(x) for x in version])
|
|
228
|
-
commit = '
|
|
228
|
+
commit = '68e4f3dd36f4ff9dd7818ea2c8180b086092148f'
|
synapse/models/infotech.py
CHANGED
|
@@ -2709,15 +2709,12 @@ class ItModule(s_module.CoreModule):
|
|
|
2709
2709
|
'doc': 'The path for the file.',
|
|
2710
2710
|
}),
|
|
2711
2711
|
('path:dir', ('file:path', {}), {
|
|
2712
|
-
'ro': True,
|
|
2713
2712
|
'doc': 'The parent directory of the file path (parsed from :path).',
|
|
2714
2713
|
}),
|
|
2715
2714
|
('path:ext', ('str', {'lower': True, 'strip': True}), {
|
|
2716
|
-
'ro': True,
|
|
2717
2715
|
'doc': 'The file extension of the file name (parsed from :path).',
|
|
2718
2716
|
}),
|
|
2719
2717
|
('path:base', ('file:base', {}), {
|
|
2720
|
-
'ro': True,
|
|
2721
2718
|
'doc': 'The final component of the file path (parsed from :path).',
|
|
2722
2719
|
}),
|
|
2723
2720
|
('file', ('file:bytes', {}), {
|
|
@@ -2755,15 +2752,12 @@ class ItModule(s_module.CoreModule):
|
|
|
2755
2752
|
'doc': 'The path where the file was created.',
|
|
2756
2753
|
}),
|
|
2757
2754
|
('path:dir', ('file:path', {}), {
|
|
2758
|
-
'ro': True,
|
|
2759
2755
|
'doc': 'The parent directory of the file path (parsed from :path).',
|
|
2760
2756
|
}),
|
|
2761
2757
|
('path:ext', ('str', {'lower': True, 'strip': True}), {
|
|
2762
|
-
'ro': True,
|
|
2763
2758
|
'doc': 'The file extension of the file name (parsed from :path).',
|
|
2764
2759
|
}),
|
|
2765
2760
|
('path:base', ('file:base', {}), {
|
|
2766
|
-
'ro': True,
|
|
2767
2761
|
'doc': 'The final component of the file path (parsed from :path).',
|
|
2768
2762
|
}),
|
|
2769
2763
|
('file', ('file:bytes', {}), {
|
|
@@ -2789,15 +2783,12 @@ class ItModule(s_module.CoreModule):
|
|
|
2789
2783
|
'doc': 'The path where the file was deleted.',
|
|
2790
2784
|
}),
|
|
2791
2785
|
('path:dir', ('file:path', {}), {
|
|
2792
|
-
'ro': True,
|
|
2793
2786
|
'doc': 'The parent directory of the file path (parsed from :path).',
|
|
2794
2787
|
}),
|
|
2795
2788
|
('path:ext', ('str', {'lower': True, 'strip': True}), {
|
|
2796
|
-
'ro': True,
|
|
2797
2789
|
'doc': 'The file extension of the file name (parsed from :path).',
|
|
2798
2790
|
}),
|
|
2799
2791
|
('path:base', ('file:base', {}), {
|
|
2800
|
-
'ro': True,
|
|
2801
2792
|
'doc': 'The final component of the file path (parsed from :path).',
|
|
2802
2793
|
}),
|
|
2803
2794
|
('file', ('file:bytes', {}), {
|
|
@@ -2823,15 +2814,12 @@ class ItModule(s_module.CoreModule):
|
|
|
2823
2814
|
'doc': 'The path where the file was read.',
|
|
2824
2815
|
}),
|
|
2825
2816
|
('path:dir', ('file:path', {}), {
|
|
2826
|
-
'ro': True,
|
|
2827
2817
|
'doc': 'The parent directory of the file path (parsed from :path).',
|
|
2828
2818
|
}),
|
|
2829
2819
|
('path:ext', ('str', {'lower': True, 'strip': True}), {
|
|
2830
|
-
'ro': True,
|
|
2831
2820
|
'doc': 'The file extension of the file name (parsed from :path).',
|
|
2832
2821
|
}),
|
|
2833
2822
|
('path:base', ('file:base', {}), {
|
|
2834
|
-
'ro': True,
|
|
2835
2823
|
'doc': 'The final component of the file path (parsed from :path).',
|
|
2836
2824
|
}),
|
|
2837
2825
|
('file', ('file:bytes', {}), {
|
|
@@ -2857,15 +2845,12 @@ class ItModule(s_module.CoreModule):
|
|
|
2857
2845
|
'doc': 'The path where the file was written to/modified.',
|
|
2858
2846
|
}),
|
|
2859
2847
|
('path:dir', ('file:path', {}), {
|
|
2860
|
-
'ro': True,
|
|
2861
2848
|
'doc': 'The parent directory of the file path (parsed from :path).',
|
|
2862
2849
|
}),
|
|
2863
2850
|
('path:ext', ('str', {'lower': True, 'strip': True}), {
|
|
2864
|
-
'ro': True,
|
|
2865
2851
|
'doc': 'The file extension of the file name (parsed from :path).',
|
|
2866
2852
|
}),
|
|
2867
2853
|
('path:base', ('file:base', {}), {
|
|
2868
|
-
'ro': True,
|
|
2869
2854
|
'doc': 'The final component of the file path (parsed from :path).',
|
|
2870
2855
|
}),
|
|
2871
2856
|
('file', ('file:bytes', {}), {
|
|
@@ -30,6 +30,16 @@ modules:
|
|
|
30
30
|
returns:
|
|
31
31
|
type: dict
|
|
32
32
|
desc: A status dictionary.
|
|
33
|
+
- name: newp
|
|
34
|
+
desc: Some nonexistent function.
|
|
35
|
+
deprecated:
|
|
36
|
+
eolvers: v2.300.4
|
|
37
|
+
mesg: Newp is no longer maintained. Use bar() instead.
|
|
38
|
+
type:
|
|
39
|
+
type: function
|
|
40
|
+
returns:
|
|
41
|
+
type: 'null'
|
|
42
|
+
desc: '``newp()`` does not return data.'
|
|
33
43
|
|
|
34
44
|
onload: |
|
|
35
45
|
$lib.time.sleep($lib.globals.get(onload_sleep, 0))
|
synapse/tests/test_cortex.py
CHANGED
|
@@ -2985,6 +2985,16 @@ class CortexBasicTest(s_t_utils.SynTest):
|
|
|
2985
2985
|
info = await view.pack()
|
|
2986
2986
|
self.eq(info['name'], 'default')
|
|
2987
2987
|
|
|
2988
|
+
depr = [x for x in coreinfo['stormdocs']['libraries'] if x['path'] == ('lib', 'bytes')]
|
|
2989
|
+
self.len(1, depr)
|
|
2990
|
+
deprinfo = depr[0].get('deprecated')
|
|
2991
|
+
self.nn(deprinfo)
|
|
2992
|
+
self.eq(deprinfo.get('eolvers'), 'v3.0.0')
|
|
2993
|
+
|
|
2994
|
+
depr = [x for x in coreinfo['stormdocs']['libraries'] if x['path'] == ('lib', 'infosec', 'cvss')]
|
|
2995
|
+
self.len(1, depr)
|
|
2996
|
+
self.len(2, [x for x in depr[0]['locals'] if x.get('deprecated')])
|
|
2997
|
+
|
|
2988
2998
|
async def test_cortex_model_dict(self):
|
|
2989
2999
|
|
|
2990
3000
|
async with self.getTestCoreAndProxy() as (core, prox):
|
|
@@ -7195,6 +7205,12 @@ class CortexBasicTest(s_t_utils.SynTest):
|
|
|
7195
7205
|
with self.raises(s_exc.BadTag):
|
|
7196
7206
|
await core.nodes('[ inet:ipv4=1.2.3.4 +#cno.cve.12345 ]')
|
|
7197
7207
|
|
|
7208
|
+
nodes = await core.nodes('[ test:str=beep +?#cno.cve.12345 ]')
|
|
7209
|
+
self.len(1, nodes)
|
|
7210
|
+
self.none(nodes[0].get('#cno'))
|
|
7211
|
+
self.none(nodes[0].get('#cno.cve'))
|
|
7212
|
+
self.none(nodes[0].get('#cno.cve.12345'))
|
|
7213
|
+
|
|
7198
7214
|
self.eq((None, None, '[0-9]{4}', '[0-9]{5}'), await core.callStorm('''
|
|
7199
7215
|
return($lib.model.tags.pop(cno.cve, regex))
|
|
7200
7216
|
'''))
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import copy
|
|
2
|
+
|
|
3
|
+
import synapse.exc as s_exc
|
|
2
4
|
import synapse.lib.autodoc as s_autodoc
|
|
3
5
|
import synapse.lib.stormtypes as s_stormtypes
|
|
4
6
|
|
|
@@ -153,6 +155,10 @@ LibTst for testing!
|
|
|
153
155
|
beep(valu)
|
|
154
156
|
==========
|
|
155
157
|
|
|
158
|
+
.. warning::
|
|
159
|
+
``$lib.test.beep`` has been deprecated and will be removed on or after 8080-08-08.
|
|
160
|
+
|
|
161
|
+
|
|
156
162
|
Example storm func.
|
|
157
163
|
|
|
158
164
|
Notes:
|
|
@@ -173,6 +179,11 @@ Returns:
|
|
|
173
179
|
someargs(valu, bar=$lib.true, faz=$lib.null)
|
|
174
180
|
============================================
|
|
175
181
|
|
|
182
|
+
.. warning::
|
|
183
|
+
``$lib.test.someargs`` has been deprecated and will be removed in version v3.0.0.
|
|
184
|
+
This is a test library was deprecated from the day it was made.
|
|
185
|
+
|
|
186
|
+
|
|
176
187
|
Example storm func with args.
|
|
177
188
|
|
|
178
189
|
|
|
@@ -220,6 +231,10 @@ LibTst for testing!
|
|
|
220
231
|
$lib.test.beep(valu)
|
|
221
232
|
====================
|
|
222
233
|
|
|
234
|
+
.. warning::
|
|
235
|
+
``$lib.test.beep`` has been deprecated and will be removed on or after 8080-08-08.
|
|
236
|
+
|
|
237
|
+
|
|
223
238
|
Example storm func.
|
|
224
239
|
|
|
225
240
|
Notes:
|
|
@@ -240,6 +255,11 @@ Returns:
|
|
|
240
255
|
$lib.test.someargs(valu, bar=$lib.true, faz=$lib.null)
|
|
241
256
|
======================================================
|
|
242
257
|
|
|
258
|
+
.. warning::
|
|
259
|
+
``$lib.test.someargs`` has been deprecated and will be removed in version v3.0.0.
|
|
260
|
+
This is a test library was deprecated from the day it was made.
|
|
261
|
+
|
|
262
|
+
|
|
243
263
|
Example storm func with args.
|
|
244
264
|
|
|
245
265
|
|
|
@@ -257,3 +277,14 @@ Args:
|
|
|
257
277
|
Returns:
|
|
258
278
|
The beeped string. The return type is ``str``.'''
|
|
259
279
|
self.eq(text, expected)
|
|
280
|
+
|
|
281
|
+
badlocls = copy.deepcopy(libtst._storm_locals)
|
|
282
|
+
badlocls[0]['deprecated']['eolvers'] = 'v4.4.4'
|
|
283
|
+
page = s_autodoc.RstHelp()
|
|
284
|
+
doc = {
|
|
285
|
+
'desc': s_stormtypes.getDoc(libtst, "err"),
|
|
286
|
+
'path': ('lib',) + libtst._storm_lib_path,
|
|
287
|
+
'locals': badlocls,
|
|
288
|
+
}
|
|
289
|
+
with self.raises(s_exc.SchemaViolation):
|
|
290
|
+
s_autodoc.docStormTypes(page, (doc,), linkprefix='test')
|
synapse/tests/test_lib_storm.py
CHANGED
|
@@ -3913,6 +3913,10 @@ class StormTest(s_t_utils.SynTest):
|
|
|
3913
3913
|
self.stormIsInPrint('Returns an ou:org by name, adding the node if it does not exist.\n'
|
|
3914
3914
|
'Args:\n name (str): The name of the org.', msgs)
|
|
3915
3915
|
|
|
3916
|
+
msgs = await core.stormlist('help --verbose $lib.infosec.cvss.saveVectToNode')
|
|
3917
|
+
self.stormIsInPrint('Warning', msgs)
|
|
3918
|
+
self.stormIsInPrint('``$lib.infosec.cvss.saveVectToNode`` has been deprecated and will be removed in version v3.0.0.', msgs)
|
|
3919
|
+
|
|
3916
3920
|
msgs = await core.stormlist('help $lib.inet')
|
|
3917
3921
|
self.stormIsInPrint('The following libraries are available:\n\n'
|
|
3918
3922
|
'$lib.inet.http : A Storm Library exposing an HTTP client API.\n'
|
|
@@ -20,3 +20,96 @@ class TestLibStormRandom(s_test.SynTest):
|
|
|
20
20
|
|
|
21
21
|
with self.raises(s_exc.BadArg):
|
|
22
22
|
await core.callStorm('return($lib.random.int(maxval=0, minval=1))')
|
|
23
|
+
|
|
24
|
+
async def test_stormlib_random_generator(self):
|
|
25
|
+
async with self.getTestCore() as core:
|
|
26
|
+
|
|
27
|
+
# Seedless generators
|
|
28
|
+
q = '''$r=$lib.random.generator()
|
|
29
|
+
return(($r.int(10), $r.int(10), $r.int(10)))
|
|
30
|
+
'''
|
|
31
|
+
valu = await core.callStorm(q)
|
|
32
|
+
for v in valu:
|
|
33
|
+
self.true(v >= 0 and v <= 10)
|
|
34
|
+
|
|
35
|
+
# There is no seed on the generator
|
|
36
|
+
q = '''$r=$lib.random.generator() return ( $r.seed )'''
|
|
37
|
+
valu = await core.callStorm(q)
|
|
38
|
+
self.none(valu)
|
|
39
|
+
|
|
40
|
+
# Generators can be made and seeds set
|
|
41
|
+
q = '''$r=$lib.random.generator() $r.seed=myCoolTestSeed
|
|
42
|
+
return ( (($r.int(10), $r.int(10), $r.int(10)), $r.seed) )'''
|
|
43
|
+
valu = await core.callStorm(q)
|
|
44
|
+
self.eq(valu, ((5, 9, 1), 'myCoolTestSeed'))
|
|
45
|
+
|
|
46
|
+
# Setting a seed resets the generator
|
|
47
|
+
q = '''$r=$lib.random.generator(seed=myCoolTestSeed) $ret=()
|
|
48
|
+
$ret.append($r.int(10)) $ret.append($r.int(10)) $ret.append($r.int(10))
|
|
49
|
+
$r.seed=myCoolTestSeed
|
|
50
|
+
$ret.append($r.int(10)) $ret.append($r.int(10)) $ret.append($r.int(10))
|
|
51
|
+
return ($ret)'''
|
|
52
|
+
valu = await core.callStorm(q)
|
|
53
|
+
self.eq(valu, (5, 9, 1, 5, 9, 1))
|
|
54
|
+
|
|
55
|
+
# Clearing the seed makes the generator random.
|
|
56
|
+
q = '''$r=$lib.random.generator(seed=myCoolTestSeed) $ret=()
|
|
57
|
+
$ret.append($r.int(10)) $ret.append($r.int(10)) $ret.append($r.int(10))
|
|
58
|
+
$r.seed=(null)
|
|
59
|
+
$ret.append($r.int(10)) $ret.append($r.int(10)) $ret.append($r.int(10))
|
|
60
|
+
return ($ret)'''
|
|
61
|
+
valu = await core.callStorm(q)
|
|
62
|
+
self.len(6, valu)
|
|
63
|
+
self.eq(valu[:3], (5, 9, 1))
|
|
64
|
+
self.ne(valu[3:], (5, 9, 1))
|
|
65
|
+
for v in valu[3:]:
|
|
66
|
+
self.true(v >= 0 and v <= 10)
|
|
67
|
+
|
|
68
|
+
# Seeded generators are consistent
|
|
69
|
+
q = '''$r=$lib.random.generator(seed=myCoolTestSeed)
|
|
70
|
+
return(($r.int(10), $r.int(10), $r.int(10)))
|
|
71
|
+
'''
|
|
72
|
+
valu = await core.callStorm(q)
|
|
73
|
+
self.eq(valu, (5, 9, 1))
|
|
74
|
+
|
|
75
|
+
new_valu = await core.callStorm(q)
|
|
76
|
+
self.eq(valu, new_valu)
|
|
77
|
+
|
|
78
|
+
q = '''$r=$lib.random.generator(seed=myCoolTestSeed)
|
|
79
|
+
$r2 = $lib.random.generator(seed=$r.seed)
|
|
80
|
+
return(($r.int(10), $r2.int(10)))
|
|
81
|
+
'''
|
|
82
|
+
valu = await core.callStorm(q)
|
|
83
|
+
self.eq(valu, (5, 5))
|
|
84
|
+
|
|
85
|
+
q = '''return($lib.vars.type($lib.random.generator(x)))'''
|
|
86
|
+
valu = await core.callStorm(q)
|
|
87
|
+
self.eq(valu, 'random')
|
|
88
|
+
|
|
89
|
+
# Seeds are stringified
|
|
90
|
+
q = '''$r=$lib.random.generator(seed=1234567890)
|
|
91
|
+
$r2 = $lib.random.generator(seed=(1234567890))
|
|
92
|
+
return(($r.int(10), $r2.int(10), $r.seed, $r2.seed))
|
|
93
|
+
'''
|
|
94
|
+
valu = await core.callStorm(q)
|
|
95
|
+
self.eq(valu, (5, 5, '1234567890', '1234567890'))
|
|
96
|
+
|
|
97
|
+
# Empty string value is still a str
|
|
98
|
+
q = '''$r=$lib.random.generator(seed='') return ($r.int(10))'''
|
|
99
|
+
valu = await core.callStorm(q)
|
|
100
|
+
self.eq(valu, 7)
|
|
101
|
+
|
|
102
|
+
# Sad path
|
|
103
|
+
with self.raises(s_exc.BadArg):
|
|
104
|
+
await core.callStorm('$r=$lib.random.generator(seed="") return($r.int(maxval=0, minval=1))')
|
|
105
|
+
|
|
106
|
+
# Printing objects
|
|
107
|
+
msgs = await core.stormlist('$lib.print($lib.random.generator())')
|
|
108
|
+
self.stormIsInPrint('random', msgs)
|
|
109
|
+
self.stormNotInPrint('seed=', msgs)
|
|
110
|
+
|
|
111
|
+
msgs = await core.stormlist('$lib.print($lib.random.generator(seed=""))')
|
|
112
|
+
self.stormIsInPrint('random seed=', msgs)
|
|
113
|
+
|
|
114
|
+
msgs = await core.stormlist('$lib.print($lib.random.generator(seed=haha))')
|
|
115
|
+
self.stormIsInPrint('random seed=haha', msgs)
|
|
@@ -1547,6 +1547,45 @@ class InfotechModelTest(s_t_utils.SynTest):
|
|
|
1547
1547
|
self.nn(node.get('reg'))
|
|
1548
1548
|
self.eq(node.get('sandbox:file'), sandfile)
|
|
1549
1549
|
|
|
1550
|
+
async with self.getTestCore() as core:
|
|
1551
|
+
forms = [
|
|
1552
|
+
'it:fs:file',
|
|
1553
|
+
'it:exec:file:add',
|
|
1554
|
+
'it:exec:file:del',
|
|
1555
|
+
'it:exec:file:read',
|
|
1556
|
+
'it:exec:file:write',
|
|
1557
|
+
]
|
|
1558
|
+
|
|
1559
|
+
for form in forms:
|
|
1560
|
+
opts = {'vars': {'form': form}}
|
|
1561
|
+
nodes = await core.nodes('[ *$form=($form, calc) :path="c:/windows/system32/calc.exe" ]', opts=opts)
|
|
1562
|
+
self.len(1, nodes)
|
|
1563
|
+
self.eq(nodes[0].get('path'), 'c:/windows/system32/calc.exe')
|
|
1564
|
+
self.eq(nodes[0].get('path:base'), 'calc.exe')
|
|
1565
|
+
self.eq(nodes[0].get('path:dir'), 'c:/windows/system32')
|
|
1566
|
+
self.eq(nodes[0].get('path:ext'), 'exe')
|
|
1567
|
+
|
|
1568
|
+
nodes = await core.nodes('*$form=($form, calc) [ :path="c:/users/blackout/script.ps1" ]', opts=opts)
|
|
1569
|
+
self.len(1, nodes)
|
|
1570
|
+
self.eq(nodes[0].get('path'), 'c:/users/blackout/script.ps1')
|
|
1571
|
+
self.eq(nodes[0].get('path:base'), 'script.ps1')
|
|
1572
|
+
self.eq(nodes[0].get('path:dir'), 'c:/users/blackout')
|
|
1573
|
+
self.eq(nodes[0].get('path:ext'), 'ps1')
|
|
1574
|
+
|
|
1575
|
+
nodes = await core.nodes('*$form=($form, calc) [ -:path:base -:path:dir -:path:ext ]', opts=opts)
|
|
1576
|
+
self.len(1, nodes)
|
|
1577
|
+
self.eq(nodes[0].get('path'), 'c:/users/blackout/script.ps1')
|
|
1578
|
+
self.none(nodes[0].get('path:base'))
|
|
1579
|
+
self.none(nodes[0].get('path:dir'))
|
|
1580
|
+
self.none(nodes[0].get('path:ext'))
|
|
1581
|
+
|
|
1582
|
+
nodes = await core.nodes('*$form=($form, calc) [ :path="c:/users/admin/superscript.bat" ]', opts=opts)
|
|
1583
|
+
self.len(1, nodes)
|
|
1584
|
+
self.eq(nodes[0].get('path'), 'c:/users/admin/superscript.bat')
|
|
1585
|
+
self.eq(nodes[0].get('path:base'), 'superscript.bat')
|
|
1586
|
+
self.eq(nodes[0].get('path:dir'), 'c:/users/admin')
|
|
1587
|
+
self.eq(nodes[0].get('path:ext'), 'bat')
|
|
1588
|
+
|
|
1550
1589
|
async def test_it_app_yara(self):
|
|
1551
1590
|
|
|
1552
1591
|
async with self.getTestCore() as core:
|
|
@@ -191,6 +191,12 @@ class TestAutoDoc(s_t_utils.SynTest):
|
|
|
191
191
|
|
|
192
192
|
self.isin('status()', s)
|
|
193
193
|
|
|
194
|
+
self.isin('newp()', s)
|
|
195
|
+
self.isin('.. warning::\n', s)
|
|
196
|
+
self.isin('``newp`` has been deprecated and will be removed in version v2.300.4.', s)
|
|
197
|
+
self.isin('Newp is no longer maintained. Use bar() instead.', s)
|
|
198
|
+
self.isin('Some nonexistent function', s)
|
|
199
|
+
|
|
194
200
|
# coverage for no apidefs
|
|
195
201
|
rst = s_l_autodoc.RstHelp()
|
|
196
202
|
await s_autodoc.processStormModules(rst, 'foo', [])
|
synapse/tests/utils.py
CHANGED
|
@@ -157,6 +157,7 @@ class LibTst(s_stormtypes.Lib):
|
|
|
157
157
|
'''
|
|
158
158
|
_storm_locals = (
|
|
159
159
|
{'name': 'beep',
|
|
160
|
+
'deprecated': {'eoldate': '8080-08-08'},
|
|
160
161
|
'desc': '''
|
|
161
162
|
Example storm func.
|
|
162
163
|
|
|
@@ -169,6 +170,7 @@ class LibTst(s_stormtypes.Lib):
|
|
|
169
170
|
'returns': {'type': 'str', 'desc': 'The beeped string.', }}},
|
|
170
171
|
{'name': 'someargs',
|
|
171
172
|
'desc': '''Example storm func with args.''',
|
|
173
|
+
'deprecated': {'eolvers': 'v3.0.0', 'mesg': 'This is a test library was deprecated from the day it was made.'},
|
|
172
174
|
'type': {'type': 'function', '_funcname': 'someargs',
|
|
173
175
|
'args': (
|
|
174
176
|
{'name': 'valu', 'type': 'str', 'desc': 'The value to beep.', },
|
synapse/tools/autodoc.py
CHANGED
|
@@ -617,7 +617,8 @@ async def processStormModules(rst, pkgname, modules):
|
|
|
617
617
|
|
|
618
618
|
callsig = s_autodoc.genCallsig(apitype)
|
|
619
619
|
rst.addHead(f'{apiname}{callsig}', lvl=4)
|
|
620
|
-
|
|
620
|
+
if depr := apidef.get('deprecated'):
|
|
621
|
+
rst.addLines(*s_autodoc.genDeprecationWarning(apiname, depr, True))
|
|
621
622
|
rst.addLines(*s_autodoc.prepareRstLines(apidesc))
|
|
622
623
|
rst.addLines(*s_autodoc.getArgLines(apitype))
|
|
623
624
|
rst.addLines(*s_autodoc.getReturnLines(apitype))
|
synapse/tools/changelog.py
CHANGED
|
@@ -222,13 +222,25 @@ class ModelDiffer:
|
|
|
222
222
|
deprecated_props_noiface[prop] = cpinfo
|
|
223
223
|
continue
|
|
224
224
|
|
|
225
|
+
okeys = set(opinfo.keys())
|
|
226
|
+
nkeys = set(cpinfo.keys())
|
|
227
|
+
|
|
228
|
+
if nkeys - okeys:
|
|
229
|
+
# We've added a key to the prop def.
|
|
230
|
+
raise s_exc.NoSuchImpl(mesg='Have not implemented support for a prop def having a key added')
|
|
231
|
+
|
|
232
|
+
if okeys - nkeys:
|
|
233
|
+
# We've removed a key from the prop def.
|
|
234
|
+
updated_props[prop] = {'type': 'delkey', 'keys': list(okeys - nkeys)}
|
|
235
|
+
continue
|
|
236
|
+
|
|
225
237
|
# Check if type change happened, we'll want to document that.
|
|
226
238
|
ctyp = cpinfo.get('type')
|
|
227
239
|
otyp = opinfo.get('type')
|
|
228
240
|
if ctyp == otyp:
|
|
229
241
|
continue
|
|
230
242
|
|
|
231
|
-
updated_props[prop] = {'new_type': ctyp, 'old_type': otyp}
|
|
243
|
+
updated_props[prop] = {'type': 'type_change', 'new_type': ctyp, 'old_type': otyp}
|
|
232
244
|
is_ifaceprop = False
|
|
233
245
|
for iface in self.cur_type2iface[form]:
|
|
234
246
|
upt_iface = self.changes.get('interfaces').get('updated_interfaces', {}).get(iface)
|
|
@@ -237,7 +249,7 @@ class ModelDiffer:
|
|
|
237
249
|
break
|
|
238
250
|
if is_ifaceprop:
|
|
239
251
|
continue
|
|
240
|
-
updated_props_noiface[prop] = {'new_type': ctyp, 'old_type': otyp}
|
|
252
|
+
updated_props_noiface[prop] = {'type': 'type_change', 'new_type': ctyp, 'old_type': otyp}
|
|
241
253
|
|
|
242
254
|
if updated_props:
|
|
243
255
|
updated_forms[form]['updated_properties'] = updated_props
|
|
@@ -317,13 +329,25 @@ class ModelDiffer:
|
|
|
317
329
|
deprecated_props[prop] = cpinfo
|
|
318
330
|
continue
|
|
319
331
|
|
|
332
|
+
okeys = set(opinfo.keys())
|
|
333
|
+
nkeys = set(cpinfo.keys())
|
|
334
|
+
|
|
335
|
+
if nkeys - okeys:
|
|
336
|
+
# We've added a key to the prop def.
|
|
337
|
+
raise s_exc.NoSuchImpl(mesg='Have not implemented support for a prop def having a key added')
|
|
338
|
+
|
|
339
|
+
if okeys - nkeys:
|
|
340
|
+
# We've removed a key from the prop def.
|
|
341
|
+
updated_props[prop] = {'type': 'delkey', 'keys': list(okeys - nkeys)}
|
|
342
|
+
continue
|
|
343
|
+
|
|
320
344
|
# Check if type change happened, we'll want to document that.
|
|
321
345
|
ctyp = cpinfo.get('type')
|
|
322
346
|
otyp = opinfo.get('type')
|
|
323
347
|
if ctyp == otyp:
|
|
324
348
|
continue
|
|
325
349
|
|
|
326
|
-
updated_props[prop] = {'new_type': ctyp, 'old_type': otyp}
|
|
350
|
+
updated_props[prop] = {'type': 'type_change', 'new_type': ctyp, 'old_type': otyp}
|
|
327
351
|
if updated_props:
|
|
328
352
|
updated_interfaces[iface]['updated_properties'] = updated_props
|
|
329
353
|
|
|
@@ -569,8 +593,14 @@ def _gen_model_rst(version, model_ref, changes, current_model, outp: s_output.Ou
|
|
|
569
593
|
lines.append('\n')
|
|
570
594
|
elif key == 'updated_properties':
|
|
571
595
|
for prop, pnfo in sorted(valu.items(), key=lambda x: x[0]):
|
|
572
|
-
|
|
573
|
-
|
|
596
|
+
ptyp = pnfo.get('type')
|
|
597
|
+
if ptyp == 'type_change':
|
|
598
|
+
mesg = f'The property ``{prop}`` has been modified from {pnfo.get("old_type")}' \
|
|
599
|
+
f' to {pnfo.get("new_type")}.'
|
|
600
|
+
elif ptyp == 'delkey':
|
|
601
|
+
mesg = f'The property ``{prop}`` had the ``{pnfo.get("keys")}`` keys removed from its definition.'
|
|
602
|
+
else:
|
|
603
|
+
raise s_exc.NoSuchImpl(mesg=f'pnfo.type={ptyp} not supported.')
|
|
574
604
|
lines.extend(textwrap.wrap(mesg, initial_indent=' ', subsequent_indent=' ',
|
|
575
605
|
width=width))
|
|
576
606
|
lines.append('\n')
|
|
@@ -621,11 +651,17 @@ def _gen_model_rst(version, model_ref, changes, current_model, outp: s_output.Ou
|
|
|
621
651
|
rst.addLines(f'``{form}``')
|
|
622
652
|
upd_form_props = list(info.get('updated_properties').items())
|
|
623
653
|
if len(upd_form_props) > 1:
|
|
624
|
-
rst.addLines(' The form had the following updated
|
|
654
|
+
rst.addLines(' The form had the following properties updated:', '\n')
|
|
625
655
|
upd_form_props.sort(key=lambda x: x[0])
|
|
626
656
|
for prop, pnfo in upd_form_props:
|
|
627
|
-
|
|
628
|
-
|
|
657
|
+
ptyp = pnfo.get('type')
|
|
658
|
+
if ptyp == 'type_change':
|
|
659
|
+
mesg = f'The property ``{prop}`` has been modified from {pnfo.get("old_type")}' \
|
|
660
|
+
f' to {pnfo.get("new_type")}.'
|
|
661
|
+
elif ptyp == 'delkey':
|
|
662
|
+
mesg = f'The property ``{prop}`` had the ``{pnfo.get("keys")}`` keys removed from its definition.'
|
|
663
|
+
else:
|
|
664
|
+
raise s_exc.NoSuchImpl(mesg=f'pnfo.type={ptyp} not supported.')
|
|
629
665
|
lines = [
|
|
630
666
|
*textwrap.wrap(mesg, initial_indent=' ', subsequent_indent=' ',
|
|
631
667
|
width=width),
|
|
@@ -635,8 +671,15 @@ def _gen_model_rst(version, model_ref, changes, current_model, outp: s_output.Ou
|
|
|
635
671
|
|
|
636
672
|
else:
|
|
637
673
|
prop, pnfo = upd_form_props[0]
|
|
638
|
-
|
|
639
|
-
|
|
674
|
+
ptyp = pnfo.get('type')
|
|
675
|
+
if ptyp == 'type_change':
|
|
676
|
+
mesg = f'The property ``{prop}`` has been modified from {pnfo.get("old_type")}' \
|
|
677
|
+
f' to {pnfo.get("new_type")}.'
|
|
678
|
+
elif ptyp == 'delkey':
|
|
679
|
+
mesg = f'The property ``{prop}`` had the ``{pnfo.get("keys")}`` keys removed from its definition.'
|
|
680
|
+
else:
|
|
681
|
+
raise s_exc.NoSuchImpl(mesg=f'pnfo.type={ptyp} not supported.')
|
|
682
|
+
|
|
640
683
|
lines = [
|
|
641
684
|
' The form had the following property updated:',
|
|
642
685
|
'\n',
|
|
@@ -2,7 +2,7 @@ synapse/__init__.py,sha256=R2kOXlF5j-8m6G0JkHuN7rXRPg_tHLmbMxr__94mHQk,1145
|
|
|
2
2
|
synapse/axon.py,sha256=DQu_Ps4BDRDnmdHmqCbpd3W_91yzhdo7AzAk-wtQC3s,61520
|
|
3
3
|
synapse/cells.py,sha256=eNvdglfAoTURVhGOLGcgMXCGpfsIX1a02SQnyiklo3E,308
|
|
4
4
|
synapse/common.py,sha256=JRGiA6FCkCZP2pBc3s_H7MsQGwc9jU_vkJFQP3XpVLs,36523
|
|
5
|
-
synapse/cortex.py,sha256=
|
|
5
|
+
synapse/cortex.py,sha256=DHJegMCR9oUfMLx3Wl_bvj_w1G1iJISAM9K5aCpvqA0,254581
|
|
6
6
|
synapse/cryotank.py,sha256=oTbAOKq-q8WqAkYmY46Mc8hy85W3ZcQMxmP2EJDFyZ0,12124
|
|
7
7
|
synapse/daemon.py,sha256=-xy6EnmD5CodWQs_S-v7apKILECmn5EEYBpEPG-MDns,16986
|
|
8
8
|
synapse/datamodel.py,sha256=Axyn6u0Crbo1_2F0CQeJNw9pBqUGPufupHyB_tFYB_0,36785
|
|
@@ -87,9 +87,9 @@ synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-sch
|
|
|
87
87
|
synapse/lib/__init__.py,sha256=qLS7nt8-Iot8jnD2Xss_6wZi5lJoyv2rqxF9kkektT0,129
|
|
88
88
|
synapse/lib/agenda.py,sha256=ddr6FrbDY5YslJS3vdBqUUcoh32XwiEj1OkomFg-NAg,33107
|
|
89
89
|
synapse/lib/aha.py,sha256=vUFzh_s4VYSYXb73C3GYVcQRIaQow_0PSrSYOvz5wis,50308
|
|
90
|
-
synapse/lib/ast.py,sha256=
|
|
90
|
+
synapse/lib/ast.py,sha256=TDSYImz4BAuwQ8Fh4APKt6mkfr4Y-ET7t2NkKhDv-7s,154976
|
|
91
91
|
synapse/lib/auth.py,sha256=MfSyR7RWWwDuSv5zQW_-CtYLJfnIuCRTEcyfa1vnxvw,52313
|
|
92
|
-
synapse/lib/autodoc.py,sha256=
|
|
92
|
+
synapse/lib/autodoc.py,sha256=FW9M00ZX3kmGGzO7BQ9MVdVrbMxyC_f3OzFlCuxu0FA,22880
|
|
93
93
|
synapse/lib/base.py,sha256=FfS6k30ZcS1CVfHPa5LNKog1f48rJ0xE14PI89vW7tM,23634
|
|
94
94
|
synapse/lib/boss.py,sha256=rYu4jkHJ3Y5GLX23Hlrwe9H17LF27LZ0BkK_A_9Aqh0,2056
|
|
95
95
|
synapse/lib/cache.py,sha256=N8BoNFQXOaYQU33LLYQcVkdV6IYjSNaUoaKue55y7H0,6275
|
|
@@ -143,12 +143,12 @@ synapse/lib/slabseqn.py,sha256=LJ2SZEsZlROBAD3mdS-3JxNVVPXXkBW8GIJXsW0OGG8,10287
|
|
|
143
143
|
synapse/lib/snap.py,sha256=PpMDg8zp0AMLMWYyTSpLclqEX7GHRZSA-gJl-j3e6Qs,60055
|
|
144
144
|
synapse/lib/spooled.py,sha256=00x_RS1TiJkfuTXwwdUcYifuECGYgC8B1tX-sX7nb_k,5385
|
|
145
145
|
synapse/lib/storm.lark,sha256=c79oBF4ykuNHwq7HIPBrZl9rLAB0gZP3tNBNymEWQdQ,26315
|
|
146
|
-
synapse/lib/storm.py,sha256=
|
|
146
|
+
synapse/lib/storm.py,sha256=UQviFMeomWP6EuHy-Drzk-e4XK9FRvvi1Dm00M4PQRw,213209
|
|
147
147
|
synapse/lib/storm_format.py,sha256=3C7SAzxOcc7a3JUuFeVRK46C7N1En7XMy7RylSeAYoo,4790
|
|
148
148
|
synapse/lib/stormctrl.py,sha256=XvyZ6M0Ew8sXsjGvRTWbXh0MjktZrGi_zQ9kNa7AWTE,285
|
|
149
149
|
synapse/lib/stormhttp.py,sha256=tw0LuO0UfxZT50sfF_V9hemudv5yZc2M9nFMkGrRHRw,28884
|
|
150
150
|
synapse/lib/stormsvc.py,sha256=dKREBhzYAncOXBbI-FYLRy9VusGIbRyF0TaDDz7mMXw,7581
|
|
151
|
-
synapse/lib/stormtypes.py,sha256=
|
|
151
|
+
synapse/lib/stormtypes.py,sha256=4BwCyUtYxMuEqp3tUraRibFWhItftWudPICmICQfmJo,387130
|
|
152
152
|
synapse/lib/stormwhois.py,sha256=efG4s1_UOShY3YD8N2OLEa_ELOnzsfLaMEMfDCJYeLQ,2275
|
|
153
153
|
synapse/lib/structlog.py,sha256=qiuD7TTdwCyYEDF2f-88G2iX54SuB-lJ1pqlYokL1r8,1303
|
|
154
154
|
synapse/lib/task.py,sha256=krDjQvNh0EpAs1PILK8CJJa9DMeM0depI0K8Eimp010,5733
|
|
@@ -159,7 +159,7 @@ synapse/lib/time.py,sha256=FKTYwpdvpuAj8p8sSodRjOxoA7Vu67CIbbXz55gtghk,9231
|
|
|
159
159
|
synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
|
|
160
160
|
synapse/lib/types.py,sha256=er9Jj4Mb3qh8YY4mUukyM7C164eIjO_fJeZvVJmSHFE,69500
|
|
161
161
|
synapse/lib/urlhelp.py,sha256=j-DvWGi-xH0TcO0NbCuwG7guUuiV8wxIxfMyJOzDygo,2523
|
|
162
|
-
synapse/lib/version.py,sha256=
|
|
162
|
+
synapse/lib/version.py,sha256=n3U-ECv-9Lwae9z0kcPVQT_TNXskSqJzf3dMBiRhj-I,7162
|
|
163
163
|
synapse/lib/view.py,sha256=bP1lMl8Wm0yaMIlc4cfwobm5ojNzMsWguPFnPUkKhoM,60567
|
|
164
164
|
synapse/lib/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
165
|
synapse/lib/crypto/coin.py,sha256=_dhlkzIrHT8BvHdJOWK7PDThz3sK3dDRnWAUqjRpZJc,4910
|
|
@@ -181,7 +181,7 @@ synapse/lib/stormlib/basex.py,sha256=BHnThzA7xv_wBaoxO3sVjjPGgS7K5PMXyGrFFQzmX2Y
|
|
|
181
181
|
synapse/lib/stormlib/cache.py,sha256=uC7whmdnqaDAcZLTE1AlFQl18RXM_tYUVjpveCDgtz8,7869
|
|
182
182
|
synapse/lib/stormlib/cell.py,sha256=qJlG1JvfNHdyx-xhIA-B129M-SZQoZMp_M5n3RmAsKg,13959
|
|
183
183
|
synapse/lib/stormlib/compression.py,sha256=ZOEuGv0MGiXuXOfarTgVGK6lB1ta6X7tDmXvOza9TDQ,6284
|
|
184
|
-
synapse/lib/stormlib/cortex.py,sha256=
|
|
184
|
+
synapse/lib/stormlib/cortex.py,sha256=9e6KHb0jwHbIIo-zY5vxHat_7GJqSwBt_i_xW7wfgGU,55605
|
|
185
185
|
synapse/lib/stormlib/easyperm.py,sha256=QNaxDhYIJIGapISs4WNHYFpbB3EyEgWAj1UlHlQD8UU,5851
|
|
186
186
|
synapse/lib/stormlib/env.py,sha256=0e5w92jPl_lpVJkyOd8Ia8Lrl6bysXZZIGAT2LsxMW8,1627
|
|
187
187
|
synapse/lib/stormlib/ethereum.py,sha256=hsgQD4tQpS7mS9lrbghxZF5gEwop4OeeN2Tf3CfncuY,1219
|
|
@@ -191,7 +191,7 @@ synapse/lib/stormlib/graph.py,sha256=00gFB0boj2dYv9vMY8nfIOwb2mhr_DyXOYK6O2sUrj4
|
|
|
191
191
|
synapse/lib/stormlib/hashes.py,sha256=h0gtVLiC70FZboJH8gPSR9G53i8-T6WNCFjVfXAH4ig,4751
|
|
192
192
|
synapse/lib/stormlib/hex.py,sha256=nB4nByxkiFs6Kt7V8WGXD0AnWvCtHEN5LKOj4swEsXQ,5849
|
|
193
193
|
synapse/lib/stormlib/imap.py,sha256=ScF-b5JxNkgJcBpYQeewKSmJXTm5I9r7q367Dd2Edis,12733
|
|
194
|
-
synapse/lib/stormlib/infosec.py,sha256=
|
|
194
|
+
synapse/lib/stormlib/infosec.py,sha256=dP8kbKiSoV2ske5R5i_F0EIK1uC9-Kiwa4GD7BatJ04,30285
|
|
195
195
|
synapse/lib/stormlib/ipv6.py,sha256=Ik50Hpd6T-XCc7gVzJqmYqGQF8jfIwFIQvNCDPCMtLs,1557
|
|
196
196
|
synapse/lib/stormlib/iters.py,sha256=TnceDb1bTCpDT2RgaFJ3rpXETZp2GyPzlId6iyah0Os,3159
|
|
197
197
|
synapse/lib/stormlib/json.py,sha256=MwLMfrhvODvvyWXFPErUMfLJf-5_UtF54sDc0CUtcHE,5907
|
|
@@ -199,13 +199,13 @@ synapse/lib/stormlib/log.py,sha256=wdV-lqzQMM0C3GXNJKJKvkSKjk0CBsUfjd-Cl06LOtE,7
|
|
|
199
199
|
synapse/lib/stormlib/macro.py,sha256=7iQ18mCaNZcslmfXGQvOmGQ71HxD7JeDp0HDmu5-EKM,8807
|
|
200
200
|
synapse/lib/stormlib/math.py,sha256=3RKHj40GkYFiJSINa2AZZOAA-GqqeEP98bWw2JNity8,1149
|
|
201
201
|
synapse/lib/stormlib/mime.py,sha256=WMDAcUiF8RkABKL8EUOScrO77pwi5EHPTko7hI2FPIE,1095
|
|
202
|
-
synapse/lib/stormlib/model.py,sha256=
|
|
202
|
+
synapse/lib/stormlib/model.py,sha256=iVebuWcpOqjpGiW6j6Q0IZLyNAhwtYbcMhxP7sVKoXU,52085
|
|
203
203
|
synapse/lib/stormlib/modelext.py,sha256=h_uGVK-OjsFXOC--W-2WwTKVWIhDnWatSa2CRAHo4ZE,13073
|
|
204
204
|
synapse/lib/stormlib/notifications.py,sha256=6y1YuMavQs34WwnW5D_KrLPZ0DQlQKg5VFU56sounSA,3305
|
|
205
205
|
synapse/lib/stormlib/oauth.py,sha256=hgfjI--w8vbvgNbGvZlzINTOEdQv68nk5mB27CkC93M,13011
|
|
206
206
|
synapse/lib/stormlib/pack.py,sha256=9KuF6NnN503qp2TGRid0VYs9vu7ASjeeTTXjS8fBKbY,2639
|
|
207
207
|
synapse/lib/stormlib/project.py,sha256=EWigF9lWRMifl408qs3a78JEr_-QtCicCj8x6h220nc,34494
|
|
208
|
-
synapse/lib/stormlib/random.py,sha256=
|
|
208
|
+
synapse/lib/stormlib/random.py,sha256=tDhp3dCUf6uvIFC-pDIHN0BwKK-uur1zwosc3xPtDBE,4456
|
|
209
209
|
synapse/lib/stormlib/scrape.py,sha256=8KKAw9F3f1rQbqLYaVa9FXi_APczeo07kYVDtzFuZIw,6875
|
|
210
210
|
synapse/lib/stormlib/smtp.py,sha256=xlyLUu3DxXx5RBu_XDltEwmvjeLbsBHNkzpS7lReLDM,7737
|
|
211
211
|
synapse/lib/stormlib/spooled.py,sha256=f-JZcZBngTlWQW732mPaZ7IVwPZ9M-e4xqS9wKSYo4U,4106
|
|
@@ -238,7 +238,7 @@ synapse/models/files.py,sha256=tGb7sCb06Ehg-LmjFgA3TtJPzNHUUXcMCv-KgPgB4iU,33512
|
|
|
238
238
|
synapse/models/geopol.py,sha256=QbSw5hhXVeOhGcB6oP1v4TPsYPbeK_3tQIYs_dLt_eU,11256
|
|
239
239
|
synapse/models/geospace.py,sha256=MY1vPyZXBCQ4GJPj0RCvx0WGaYy0Rue03WfKzMCteko,19345
|
|
240
240
|
synapse/models/inet.py,sha256=4iIbIW2yO5wuwR65b4ORjgPUNpviNT_XeAEgJv2Cdjg,168035
|
|
241
|
-
synapse/models/infotech.py,sha256=
|
|
241
|
+
synapse/models/infotech.py,sha256=k0KMSwYaAgQ_2BiF7RiHM3P-laTAeMrnsRxLm_r4WFw,147459
|
|
242
242
|
synapse/models/language.py,sha256=hBVVIf5kc_FSIV7HZhWnberoc9ssxuqeff4fqC9iz4o,3640
|
|
243
243
|
synapse/models/material.py,sha256=d-nonZKyJpHc32ebghtkm5tSifwVFN_ctx2kb8N4NqI,3214
|
|
244
244
|
synapse/models/math.py,sha256=5zDLSwGbOcWI6T5-KspPL20sR8Bcs59pnRK2nEELzss,1775
|
|
@@ -272,7 +272,7 @@ synapse/tests/test_cmds_boss.py,sha256=SdBwM2qJHFzzfrjWYiZOLBKeye8uru7KeJ3NU_YSk
|
|
|
272
272
|
synapse/tests/test_cmds_cortex.py,sha256=LWFz8HyuvsIGjtz2DqXYh-R-5QbiQWzLlQKqew7gabY,17157
|
|
273
273
|
synapse/tests/test_cmds_hive.py,sha256=aRH_Gh8oF_1BsfpmffyhDDNIqnTqsuF2cavdtGke1-0,5912
|
|
274
274
|
synapse/tests/test_common.py,sha256=2SAJ4M2iLdZuPPV-j16QVwE073VrikyW75cYTPRMjWI,16940
|
|
275
|
-
synapse/tests/test_cortex.py,sha256=
|
|
275
|
+
synapse/tests/test_cortex.py,sha256=Pw78vx3Xeqs4OZUKElK-MYCUPsWY-LUNDhWL7AhpzGU,352552
|
|
276
276
|
synapse/tests/test_cryotank.py,sha256=ms2VkL0aUskMi-LArTzRt8LUYw0z_y8nQfOOBDiCkvI,12027
|
|
277
277
|
synapse/tests/test_daemon.py,sha256=QqKELhm1HF0q_8Kbk0Uf9fnUg3K5nLQ7MocGIyuKKIw,7715
|
|
278
278
|
synapse/tests/test_data.py,sha256=f8L-q6kpMq8XPG3hq1jwlyaFRQEinSBf7ZlsRFeCuoM,196
|
|
@@ -284,7 +284,7 @@ synapse/tests/test_lib_agenda.py,sha256=nVIaM7P9JOr5IK_NtvsSdVaY2WdMYoPRh0B7Fl_v
|
|
|
284
284
|
synapse/tests/test_lib_aha.py,sha256=nRHs14-LtnsSRi-C7nRu24g3ENN-R3S-0Uk8Oq2LVy4,61945
|
|
285
285
|
synapse/tests/test_lib_ast.py,sha256=aS9WNuEh7rYndAMJnv_LwqXBRvNgu2iLOmvt6YtxUqw,178055
|
|
286
286
|
synapse/tests/test_lib_auth.py,sha256=NnRMiGfVm4SQmDEBTSs1aJ1g7TKmFs3Vi8udOKJ3GaM,37815
|
|
287
|
-
synapse/tests/test_lib_autodoc.py,sha256
|
|
287
|
+
synapse/tests/test_lib_autodoc.py,sha256=-MTRi1m3VCHqM90iUpQWN0x5BYu15DXKoy_YoUQsxxI,7281
|
|
288
288
|
synapse/tests/test_lib_base.py,sha256=yhGOfA-OgZrdhISTXwSl6l6YGqN5nqO3pcDes6oICPg,14550
|
|
289
289
|
synapse/tests/test_lib_boss.py,sha256=gZEuJnMO99Fu9gQ7Ct0g67umBW5XFCs8vcwInB5qr14,1598
|
|
290
290
|
synapse/tests/test_lib_cache.py,sha256=oQgEBhm8pZFCEvMfcD3znTDQgl8Gv91fEOB-3eb2IIg,8594
|
|
@@ -332,7 +332,7 @@ synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hM
|
|
|
332
332
|
synapse/tests/test_lib_slabseqn.py,sha256=74V6jU7DRTsy_hqUFDuT4C6dPlJ6ObNnjmI9qhbbyVc,5230
|
|
333
333
|
synapse/tests/test_lib_snap.py,sha256=OviJtj9N5LhBV-56TySkWvRly7f8VH9d-VBcNFLAtmg,27805
|
|
334
334
|
synapse/tests/test_lib_spooled.py,sha256=dC5hba4c0MehALt4qW-cokqJl-tZsIsmABCGMIclXNM,2776
|
|
335
|
-
synapse/tests/test_lib_storm.py,sha256=
|
|
335
|
+
synapse/tests/test_lib_storm.py,sha256=wBFqu3Nla3SD4WKhztdpAMVp_47IGM34UozwhHkmCCU,221857
|
|
336
336
|
synapse/tests/test_lib_storm_format.py,sha256=tEZgQMmKAeG8FQZE5HUjOT7bnKawVTpNaVQh_3Wa630,277
|
|
337
337
|
synapse/tests/test_lib_stormhttp.py,sha256=ZS8iONsisWjEi2CXx9AttiQ9bOrPs9x4GCwXlJEB_u0,42592
|
|
338
338
|
synapse/tests/test_lib_stormlib_aha.py,sha256=2x3KQa64LN86wzSdJwAu3QFb5NNR3WNx1o9aD3N954o,8796
|
|
@@ -362,7 +362,7 @@ synapse/tests/test_lib_stormlib_model.py,sha256=ylsrjecdl3IxLojcmVsMmOU7i0bdTKBT
|
|
|
362
362
|
synapse/tests/test_lib_stormlib_modelext.py,sha256=gmwmwbAeMS7bHLnVAddf__qg72LmEZ-uv9pT-DgT9Us,23338
|
|
363
363
|
synapse/tests/test_lib_stormlib_oauth.py,sha256=rb6ZWyLrWwcDT32VfjdQUg3AurwlhzbQv-kXIfPeRsQ,28858
|
|
364
364
|
synapse/tests/test_lib_stormlib_pack.py,sha256=YSb4dErPM3CeU0piqvhIQF_F1m3YjApo3nA14ewPWf0,1563
|
|
365
|
-
synapse/tests/test_lib_stormlib_random.py,sha256=
|
|
365
|
+
synapse/tests/test_lib_stormlib_random.py,sha256=8bncEY6Unwry7h29CFqIUaAk9lkiNy7Qq9UNINeqpXE,4656
|
|
366
366
|
synapse/tests/test_lib_stormlib_scrape.py,sha256=CY20KZ6y-LKCGvgMYDWLXKX8jczzld1-3sIfhBkj2Z8,9335
|
|
367
367
|
synapse/tests/test_lib_stormlib_smtp.py,sha256=cQY3HReNZlRJL9lfAbHfYDoTQZvtSikbkFQhwPnPWKc,4365
|
|
368
368
|
synapse/tests/test_lib_stormlib_spooled.py,sha256=GJxziVDX0TNjk7CAvuVE1LKKbRdXT3_L-OuS_ZXbAlE,6608
|
|
@@ -402,7 +402,7 @@ synapse/tests/test_model_gov_cn.py,sha256=FnfKNM_wnvmScLm4cYFSQXZ21kVaTPPDusiCD7
|
|
|
402
402
|
synapse/tests/test_model_gov_intl.py,sha256=v5BZhQnoMurzZYhM9hkzALzQzp92KidweYxVlghXDws,770
|
|
403
403
|
synapse/tests/test_model_gov_us.py,sha256=kvZ9DudBrbKtZmqGm8X-b_IOw4oJ7XZMnvTgiDkzsrY,1525
|
|
404
404
|
synapse/tests/test_model_inet.py,sha256=vJs4OjwY9Bx3H9YfxuGse-hWQ_Cd7sSv17S_7fK4NUU,150463
|
|
405
|
-
synapse/tests/test_model_infotech.py,sha256=
|
|
405
|
+
synapse/tests/test_model_infotech.py,sha256=W4O7CddWWi5zc5k8JSaABQNDMVVh5u0GGMNT_4Dp2D0,110691
|
|
406
406
|
synapse/tests/test_model_language.py,sha256=49stF1B8_EwWJB67Xa5VXCG563Zfbr6S85iKN9Iom48,3046
|
|
407
407
|
synapse/tests/test_model_material.py,sha256=M7ACDCuMtavm-xtwAIZa1M-bHVq5PCUedDfR-Ty9_F4,1975
|
|
408
408
|
synapse/tests/test_model_math.py,sha256=x-rHBfm-59ueZdHXXzSi53eshldvVURoJeLeexWTL2U,826
|
|
@@ -423,7 +423,7 @@ synapse/tests/test_servers_stemcell.py,sha256=TJabX5aQVLbGNLffiVd3B7Uj5dH12Y-0Kq
|
|
|
423
423
|
synapse/tests/test_servers_univ.py,sha256=mEeaXLeLx8Wm_58iym87lPFRhPbDL_fJ8U79i6xU5OY,3271
|
|
424
424
|
synapse/tests/test_telepath.py,sha256=AfOBOe8zx71h2-VTWzROCksYwJCBvY-J_r8pa0qHOq0,44327
|
|
425
425
|
synapse/tests/test_tools_aha.py,sha256=9WEg2chGwgLdhjH-KXEhRFhFencpl8zPTNbq5eQ9d-8,7280
|
|
426
|
-
synapse/tests/test_tools_autodoc.py,sha256=
|
|
426
|
+
synapse/tests/test_tools_autodoc.py,sha256=5j3QPfaNqhHl_aKbyn7X1C8SMI7k3fAW1-0qEzX78zk,8900
|
|
427
427
|
synapse/tests/test_tools_axon2axon.py,sha256=A6JU9UI8lLMCS5rJ_w5shks4Oyo_VjlXQTOPtaTBE_M,1346
|
|
428
428
|
synapse/tests/test_tools_backup.py,sha256=HyqogKfvF8fLJFp97ereMu_30NIL3O5nBQO8QjsTGEQ,4242
|
|
429
429
|
synapse/tests/test_tools_cellauth.py,sha256=ocCOuJ9mK-Mxzm47zZeA-ckMsKgZiLCuwsuwgkSFO1Y,12395
|
|
@@ -451,7 +451,7 @@ synapse/tests/test_tools_storm.py,sha256=QkyPX4HS67n1q4LbmsCGF9yUSyMLHK4BjNRX3JC
|
|
|
451
451
|
synapse/tests/test_utils.py,sha256=sI-uDhUpkVQHSKHa2-czmWNvyXL2QTsCojtPAV2jueI,8688
|
|
452
452
|
synapse/tests/test_utils_getrefs.py,sha256=bBV7yZ9tnOXmjqpsU1YKV5pw0behoKpzpwHJDxLjmLs,2304
|
|
453
453
|
synapse/tests/test_utils_stormcov.py,sha256=H9p1vFH8kNE6qMLrGzSV0eH7KOgdZFh7QuarFe47FtU,6149
|
|
454
|
-
synapse/tests/utils.py,sha256=
|
|
454
|
+
synapse/tests/utils.py,sha256=9_JbJ1BtmwHvn-RWZf9wwQBvdFGi_ZGArcf7tLMrZwE,77117
|
|
455
455
|
synapse/tests/files/TestUtilsGetrefs.test_basics.yaml,sha256=Ch8cEGFYfDUCZTEvzAqW5Ir79OnYb49pq4i9OJ7K9T0,8257
|
|
456
456
|
synapse/tests/files/__init__.py,sha256=iqkaqGCD7UedfSwVc6hoQDu2UGSZOkybUCZeFRHAFgQ,1786
|
|
457
457
|
synapse/tests/files/cpedata.json,sha256=e_wajnxn4ZClQ3-hwlOxK-2MWzLQwrqgtWVUV5dUVF4,13799445
|
|
@@ -500,7 +500,7 @@ synapse/tests/files/stormpkg/nomime.yaml,sha256=-T5YO3_Zs7mik2c8CB9-v7C-ZyclG5yE
|
|
|
500
500
|
synapse/tests/files/stormpkg/nopath.yaml,sha256=HVYy3QchMPdGER5fuuwjUjoGJ19eNuD5hHiMKiwB4L4,56
|
|
501
501
|
synapse/tests/files/stormpkg/nosuchfile.yaml,sha256=x6NxrWzuNj3oAICYK5TBJN0WhVL7fhY5DntQ40HWdCc,79
|
|
502
502
|
synapse/tests/files/stormpkg/notitle.yaml,sha256=hrkizBl_JZZEW4C_9rZVynXP1K5oXs11_ymOlx0Ri4M,63
|
|
503
|
-
synapse/tests/files/stormpkg/testpkg.yaml,sha256=
|
|
503
|
+
synapse/tests/files/stormpkg/testpkg.yaml,sha256=HxVTMFdKzVzCYB4KEozCgOzxMNtBVKMusBvrOy1enS0,3504
|
|
504
504
|
synapse/tests/files/stormpkg/docs/foobar.md,sha256=sisAkTRiK2UI11bxBiRV1xpwJllOrLC634H09neSnr4,7
|
|
505
505
|
synapse/tests/files/stormpkg/docs/foobar.svg,sha256=ZW6cRia9bLRWi5RRgptPwYdMMfBIzxj2kPBGh1tcoRk,6
|
|
506
506
|
synapse/tests/files/stormpkg/dotstorm/dotstorm.yaml,sha256=QyRZqAw3KexsRvCv07lzxVhqlpy8MhfYeTMty_JltsQ,160
|
|
@@ -517,11 +517,11 @@ synapse/tests/files/stormpkg/workflows/testpkg-baz.yaml,sha256=i1x0osBg5QF2qnbw6
|
|
|
517
517
|
synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml,sha256=zoN8HxrO1QNumYZJy5q0FJNmR3gBe4VI_546rkmc32Q,31
|
|
518
518
|
synapse/tests/files/testcore/cell.yaml,sha256=fBUjBfX1L-0nGQD-VhLMy_IjrDepI9zRzbmgsVFJSYY,46
|
|
519
519
|
synapse/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
520
|
-
synapse/tools/autodoc.py,sha256
|
|
520
|
+
synapse/tools/autodoc.py,sha256=-esajH0-4ftIJHzW93t7FwQEJ4WsvH8iV5em_sf1Wlw,35082
|
|
521
521
|
synapse/tools/axon2axon.py,sha256=FOaBLUrHH-r5Vw8FABwfTNGn_fJCg7jJxtP0ALpJUGM,1654
|
|
522
522
|
synapse/tools/backup.py,sha256=Cz3OSaYMRND7gE55FdyjrBr3C1_qd68yJ23O4-mukCM,5969
|
|
523
523
|
synapse/tools/cellauth.py,sha256=2ACKpOsOK_9F1B-HV5qhzGORSN7MhlElkL01Q710M1k,12122
|
|
524
|
-
synapse/tools/changelog.py,sha256
|
|
524
|
+
synapse/tools/changelog.py,sha256=MMp8rjl1p-CNIQ8_-qZC-1ld9Bz3Gya-7aaU1bf_LaU,45122
|
|
525
525
|
synapse/tools/cmdr.py,sha256=VdXzGU6ekhgvO0LmXFQlIWwH-T0v_q0VBZsKqONmhlg,1692
|
|
526
526
|
synapse/tools/csvtool.py,sha256=n3TB1qLgb7-0Du6Z6CZtu2vxaHUtzncwr2aQmQjgzi0,7477
|
|
527
527
|
synapse/tools/easycert.py,sha256=naoYnWfg0m6NrBraKUVk3FK5OW53yVBZH8rv6RrXRH8,4531
|
|
@@ -600,8 +600,8 @@ synapse/vendor/xrpl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
600
600
|
synapse/vendor/xrpl/tests/test_codec.py,sha256=Zwq6A5uZUK_FWDL3BA932c5b-rL3hnC6efobWHSLC4o,6651
|
|
601
601
|
synapse/vendor/xrpl/tests/test_main.py,sha256=kZQwWk7I6HrP-PMvLdsUUN4POvWD9I-iXDHOwdeF090,4299
|
|
602
602
|
synapse/vendor/xrpl/tests/test_main_test_cases.py,sha256=vTlUM4hJD2Hd2wCIdd9rfsvcMZZZQmNHWdCTTFeGz2Y,4221
|
|
603
|
-
synapse-2.
|
|
604
|
-
synapse-2.
|
|
605
|
-
synapse-2.
|
|
606
|
-
synapse-2.
|
|
607
|
-
synapse-2.
|
|
603
|
+
synapse-2.183.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
|
|
604
|
+
synapse-2.183.0.dist-info/METADATA,sha256=-P71izjuDTMfQKjakuvwy7xatQhqxBduvnT0CL0-Wiw,4860
|
|
605
|
+
synapse-2.183.0.dist-info/WHEEL,sha256=0gYN5xNdqpdGsLVVyA9-Xf3Xnq-9PwlAwkekQ_z55rY,93
|
|
606
|
+
synapse-2.183.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
|
|
607
|
+
synapse-2.183.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|