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 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 = prepareRstLines(desc)
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 = prepareRstLines(desc)
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 = prepareRstLines(desc)
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 = prepareRstLines(desc)
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
  },
@@ -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.',
@@ -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',
@@ -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)
@@ -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': '_int',
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._int,
101
+ 'int': self._methInt,
102
+ 'generator': self._methGenerator,
27
103
  }
28
104
 
29
105
  @s_stormtypes.stormfunc(readonly=True)
30
- async def _int(self, maxval, minval=0):
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, 182, 0)
226
+ version = (2, 183, 0)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = '72e535c8c22073fd1b7428121849de4b9fb034ae'
228
+ commit = '68e4f3dd36f4ff9dd7818ea2c8180b086092148f'
@@ -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))
@@ -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')
@@ -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))
@@ -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
- mesg = f'The property ``{prop}`` has been modified from {pnfo.get("old_type")}' \
573
- f' to {pnfo.get("new_type")}.'
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 properties:', '\n')
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
- mesg = f'The property ``{prop}`` has been modified from {pnfo.get("old_type")}' \
628
- f' to {pnfo.get("new_type")}.'
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
- mesg = f'The property ``{prop}`` has been modified from {pnfo.get("old_type")}' \
639
- f' to {pnfo.get("new_type")}.'
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',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: synapse
3
- Version: 2.182.0
3
+ Version: 2.183.0
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License: Apache License 2.0
@@ -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=GD-LqaPLRisk7EKm3ezb79A6B_Z3HQUjx26yPLZSQB0,254327
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=GqrMmTMqdTT-zFoJyvRyjbFQZNiYV_qEJBdq_ctH8X8,154963
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=CsGaX0tAKGh21YbIvUtvaUnZyqmsx6j-E9QD_vhKSP4,20747
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=Y3WWjqmygawVz7-gWmdI3y1YP1hFpWVtIJtOSEdFPR8,212151
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=U1E2MNvd2d9u3iSdWIOw95Xkrv08U3QKtvYY2XWcqAM,386940
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=IDaz45RPs6DDTjr0mk7F0_KG3bRP1Lfvnipu1wNd8i8,7162
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=Ktv82cSpsSHWCGV2Po-nCwBSNj5iEB5qmkH2TJdE-ls,55559
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=it6FX10-1NcqMORlpGFEFI9OYwQ8TBY-5KXZ2lTi7_8,30193
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=RpDw7-YGcv95nAT3LudrhpHXM-hxt2pIdGwCopVlQ8g,52006
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=BHcnpNkJNAM6-ZZqv98Hx1zCnJv8Guu7_jiuwr36Ht4,1331
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=Dn9F4tiILFsErRNzAjIwN7-wdLWATLEr9BkTXrnEUr4,147999
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=gSzDgNrolSuGwH6jWAYhZAD4J5F_vNcvMBzqSFxemKQ,351814
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=H9Yb7cvzXOMPGBIoCCqNClcyIp6zEWcawtfudKbG-2U,6282
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=Pd9pZqsLLCauqZctzZqlURTpvRmiqAlupQrvmtBqzu4,221579
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=1P-7-FzDJEPQbxHEGOnIa9EfQkCjhv31Fo8BwA_wbiU,796
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=IDBtj2djfqbOJ-6iIPZJAB28pjbaxZUsgpkPGMrnB2I,108688
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=TD4FMDCCMFTCJ8ZLuetkV6c5t_NBUB4_7XUDtn-IXmg,8592
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=UdujTFcuj7HHtAxyJHfofbqGCqaTU4R1FvALIsIa8eQ,76946
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=GfEYkt2w4vGqn8z9Fa-5qjFDqWWy8vgHkLEANUp-4LM,3175
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=3U1OWl9ryjGX35U8WovOuZcNaeZQHIwJEXjQSqKGD1A,34950
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=-SYAW3LnDOrieWJDfSo6Xh_agON8bmmnSr3B44CCrnY,42902
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.182.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
604
- synapse-2.182.0.dist-info/METADATA,sha256=g9dI52Vey98p2ZCe1ukjO2jwph8UslICAUKgBHw03SE,4860
605
- synapse-2.182.0.dist-info/WHEEL,sha256=0gYN5xNdqpdGsLVVyA9-Xf3Xnq-9PwlAwkekQ_z55rY,93
606
- synapse-2.182.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
607
- synapse-2.182.0.dist-info/RECORD,,
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,,