synapse 2.210.0__py311-none-any.whl → 2.212.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/lib/base.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import gc
2
2
  import os
3
+ import sys
3
4
  import atexit
4
5
  import signal
5
6
  import asyncio
@@ -82,7 +83,7 @@ class Base:
82
83
  '''
83
84
  def __init__(self):
84
85
  self.anitted = False
85
- assert inspect.stack()[1].function == 'anit', 'Objects from Base must be constructed solely via "anit"'
86
+ assert sys._getframe(1).f_code.co_name == 'anit', 'Objects from Base must be constructed solely via "anit"'
86
87
 
87
88
  @classmethod
88
89
  async def anit(cls, *args, **kwargs):
@@ -129,7 +130,6 @@ class Base:
129
130
  self.isfini = False
130
131
  self.anitted = True # For assertion purposes
131
132
  self.finievt = asyncio.Event()
132
- self.entered = False
133
133
 
134
134
  # hold a weak ref to other bases we should fini if they
135
135
  # are still around when we go down...
@@ -205,7 +205,6 @@ class Base:
205
205
 
206
206
  async def __aenter__(self):
207
207
  assert asyncio.get_running_loop() == self.loop
208
- self.entered = True
209
208
  return self
210
209
 
211
210
  async def __aexit__(self, exc, cls, tb):
synapse/lib/node.py CHANGED
@@ -181,7 +181,7 @@ class Node:
181
181
 
182
182
  if prop.modl.form(prop.type.name) is not None:
183
183
  buid = s_common.buid((prop.type.name, valu))
184
- elif prop.type.name == 'ndef':
184
+ elif prop.type.name == 'ndef' or 'ndef' in prop.type.info.get('bases'):
185
185
  buid = s_common.buid(valu)
186
186
  else:
187
187
  return None
@@ -207,8 +207,13 @@ class Node:
207
207
 
208
208
  embdnode = retn.get(nodepath)
209
209
  if embdnode is None:
210
- embdnode = retn[nodepath] = {}
211
- embdnode['*'] = s_common.ehex(node.buid)
210
+ iden = node.iden()
211
+ # TODO deprecate / remove use of * once we can minver optic
212
+ embdnode = retn[nodepath] = {
213
+ '*': iden,
214
+ '$iden': iden,
215
+ '$form': node.form.name,
216
+ }
212
217
 
213
218
  for relp in relprops:
214
219
  embdnode[relp] = node.props.get(relp)
synapse/lib/schemas.py CHANGED
@@ -668,9 +668,18 @@ _reqValidPkgdefSchema = {
668
668
  'pattern': s_version.semverstr,
669
669
  },
670
670
  'build': {
671
- 'type' 'object'
671
+ 'type': 'object',
672
672
  'properties': {
673
673
  'time': {'type': 'number'},
674
+ 'synapse:version': {
675
+ 'type': 'string',
676
+ 'pattern': s_version.semverstr
677
+ },
678
+ 'synapse:commit': {
679
+ 'type': 'string',
680
+ # Note: This pattern allows empty string for dev environments
681
+ 'pattern': '^[0-9a-fA-F]*$'
682
+ },
674
683
  },
675
684
  'required': ['time'],
676
685
  },
synapse/lib/share.py CHANGED
@@ -16,9 +16,6 @@ class Share(s_base.Base):
16
16
 
17
17
  self.iden = s_common.guid()
18
18
 
19
- self.exited = False
20
- self.entered = False
21
-
22
19
  sess = link.get('sess')
23
20
 
24
21
  async def fini():
synapse/lib/snap.py CHANGED
@@ -303,6 +303,9 @@ class ProtoNode:
303
303
  self.tags[tagnode.valu] = valu
304
304
  return tagnode
305
305
 
306
+ elif valu == (None, None):
307
+ return tagnode
308
+
306
309
  valu = s_time.ival(*valu, *curv)
307
310
  self.tags[tagnode.valu] = valu
308
311
 
@@ -743,19 +746,25 @@ class Snap(s_base.Base):
743
746
 
744
747
  async def _joinEmbedStor(self, storage, embeds):
745
748
  for nodePath, relProps in embeds.items():
749
+
746
750
  await asyncio.sleep(0)
747
- iden = relProps.get('*')
751
+
752
+ iden = relProps.get('$iden')
748
753
  if not iden:
749
754
  continue
750
755
 
751
756
  stor = await self.view.getStorNodes(s_common.uhex(iden))
752
757
  for relProp in relProps.keys():
758
+
753
759
  await asyncio.sleep(0)
754
- if relProp == '*':
760
+
761
+ if relProp[0] in ('*', '$'):
755
762
  continue
756
763
 
757
764
  for idx, layrstor in enumerate(stor):
765
+
758
766
  await asyncio.sleep(0)
767
+
759
768
  props = layrstor.get('props')
760
769
  if not props:
761
770
  continue
@@ -134,7 +134,7 @@ class JsonLib(s_stormtypes.Lib):
134
134
 
135
135
  @s_stormtypes.stormfunc(readonly=True)
136
136
  async def _jsonSchema(self, schema, use_default=True):
137
- schema = await s_stormtypes.toprim(schema)
137
+ schema = await s_stormtypes.toprim(schema, use_list=True)
138
138
  use_default = await s_stormtypes.tobool(use_default)
139
139
  # We have to ensure that we have a valid schema for making the object.
140
140
  try:
synapse/lib/stormtypes.py CHANGED
@@ -6210,9 +6210,9 @@ class NodeData(Prim):
6210
6210
  {'name': 'valu', 'type': 'prim', 'desc': 'The data to store.', },
6211
6211
  ),
6212
6212
  'returns': {'type': 'null', }}},
6213
- {'name': 'list', 'desc': 'Get a list of the Node data names on the Node.',
6213
+ {'name': 'list', 'desc': 'Get a list of the Node data on the Node as (name, value) tuples.',
6214
6214
  'type': {'type': 'function', '_funcname': '_listNodeData',
6215
- 'returns': {'type': 'list', 'desc': 'List of the names of values stored on the node.', }}},
6215
+ 'returns': {'type': 'list', 'desc': 'List of (name, value) tuples stored on the node.', }}},
6216
6216
  {'name': 'load',
6217
6217
  'desc': 'Load the Node data onto the Node so that the Node data is packed and returned by the runtime.',
6218
6218
  'type': {'type': 'function', '_funcname': '_loadNodeData',
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, 210, 0)
226
+ version = (2, 212, 0)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = 'e43efa9d9c2257ff05fe47988a323e16896fdf50'
228
+ commit = '68ec8184b0e2469fd1ef30cbeb29f5989c60c768'
synapse/models/inet.py CHANGED
@@ -35,6 +35,10 @@ ipv4max = 2 ** 32 - 1
35
35
 
36
36
  rfc6598 = ipaddress.IPv4Network('100.64.0.0/10')
37
37
 
38
+ # defined from https://x.com/4A4133/status/1887269972545839559
39
+ ja4_regex = r'^([tqd])([sd\d]\d)([di])(\d{2})(\d{2})([a-zA-Z0-9]{2})_([0-9a-f]{12})_([0-9a-f]{12})$'
40
+ ja4s_regex = r'^([tq])([sd\d]\d)(\d{2})([a-zA-Z0-9]{2})_([0-9a-f]{4})_([0-9a-f]{12})$'
41
+
38
42
  def getAddrType(ip):
39
43
 
40
44
  if ip.is_multicast:
@@ -1535,6 +1539,11 @@ class InetModule(s_module.CoreModule):
1535
1539
  ('inet:service:platform', ('guid', {}), {
1536
1540
  'doc': 'A network platform which provides services.'}),
1537
1541
 
1542
+ ('inet:service:app', ('guid', {}), {
1543
+ 'interfaces': ('inet:service:object',),
1544
+ 'template': {'service:base': 'application'},
1545
+ 'doc': 'A platform specific application.'}),
1546
+
1538
1547
  ('inet:service:instance', ('guid', {}), {
1539
1548
  'doc': 'An instance of the platform such as Slack or Discord instances.'}),
1540
1549
 
@@ -1626,6 +1635,10 @@ class InetModule(s_module.CoreModule):
1626
1635
  'template': {'service:base': 'emote'},
1627
1636
  'doc': 'An emote or reaction by an account.'}),
1628
1637
 
1638
+ ('inet:service:access:action:taxonomy', ('taxonomy', {}), {
1639
+ 'interfaces': ('meta:taxonomy',),
1640
+ 'doc': 'A hierarchical taxonomy of service actions.'}),
1641
+
1629
1642
  ('inet:service:access', ('guid', {}), {
1630
1643
  'interfaces': ('inet:service:action',),
1631
1644
  'doc': 'Represents a user access request to a service resource.'}),
@@ -1669,6 +1682,18 @@ class InetModule(s_module.CoreModule):
1669
1682
  ('inet:tls:handshake', ('guid', {}), {
1670
1683
  'doc': 'An instance of a TLS handshake between a server and client.'}),
1671
1684
 
1685
+ ('inet:tls:ja4', ('str', {'strip': True, 'regex': ja4_regex}), {
1686
+ 'doc': 'A JA4 TLS client fingerprint.'}),
1687
+
1688
+ ('inet:tls:ja4s', ('str', {'strip': True, 'regex': ja4s_regex}), {
1689
+ 'doc': 'A JA4S TLS server fingerprint.'}),
1690
+
1691
+ ('inet:tls:ja4:sample', ('comp', {'fields': (('client', 'inet:client'), ('ja4', 'inet:tls:ja4'))}), {
1692
+ 'doc': 'A JA4 TLS client fingerprint used by a client.'}),
1693
+
1694
+ ('inet:tls:ja4s:sample', ('comp', {'fields': (('server', 'inet:server'), ('ja4s', 'inet:tls:ja4s'))}), {
1695
+ 'doc': 'A JA4S TLS server fingerprint used by a server.'}),
1696
+
1672
1697
  ('inet:tls:ja3s:sample', ('comp', {'fields': (('server', 'inet:server'), ('ja3s', 'hash:md5'))}), {
1673
1698
  'doc': 'A JA3 sample taken from a server.'}),
1674
1699
 
@@ -1774,6 +1799,9 @@ class InetModule(s_module.CoreModule):
1774
1799
  'interfaces': ('inet:service:base',),
1775
1800
  'props': (
1776
1801
 
1802
+ ('app', ('inet:service:app', {}), {
1803
+ 'doc': 'The app which handled the action.'}),
1804
+
1777
1805
  ('time', ('time', {}), {
1778
1806
  'doc': 'The time that the account initiated the action.'}),
1779
1807
 
@@ -1807,6 +1835,9 @@ class InetModule(s_module.CoreModule):
1807
1835
  ('client:host', ('it:host', {}), {
1808
1836
  'doc': 'The client host which initiated the action.'}),
1809
1837
 
1838
+ ('client:app', ('inet:service:app', {}), {
1839
+ 'doc': 'The client service app which initiated the action.'}),
1840
+
1810
1841
  ('server', ('inet:server', {}), {
1811
1842
  'doc': 'The network address of the server which handled the action.'}),
1812
1843
 
@@ -3550,23 +3581,70 @@ class InetModule(s_module.CoreModule):
3550
3581
  'doc': 'The server that was sampled to compute the JARM hash.'}),
3551
3582
  )),
3552
3583
 
3584
+ ('inet:tls:ja4', {}, ()),
3585
+ ('inet:tls:ja4s', {}, ()),
3586
+
3587
+ ('inet:tls:ja4:sample', {}, (
3588
+
3589
+ ('ja4', ('inet:tls:ja4', {}), {
3590
+ 'ro': True,
3591
+ 'doc': 'The JA4 TLS client fingerprint.'}),
3592
+
3593
+ ('client', ('inet:client', {}), {
3594
+ 'ro': True,
3595
+ 'doc': 'The client which initiated the TLS handshake with a JA4 fingerprint.'}),
3596
+ )),
3597
+
3598
+ ('inet:tls:ja4s:sample', {}, (
3599
+
3600
+ ('ja4s', ('inet:tls:ja4s', {}), {
3601
+ 'ro': True,
3602
+ 'doc': 'The JA4S TLS server fingerprint.'}),
3603
+
3604
+ ('server', ('inet:server', {}), {
3605
+ 'ro': True,
3606
+ 'doc': 'The server which responded to the TLS handshake with a JA4S fingerprint.'}),
3607
+ )),
3608
+
3553
3609
  ('inet:tls:handshake', {}, (
3610
+
3554
3611
  ('time', ('time', {}), {
3555
3612
  'doc': 'The time the handshake was initiated.'}),
3613
+
3556
3614
  ('flow', ('inet:flow', {}), {
3557
3615
  'doc': 'The raw inet:flow associated with the handshake.'}),
3616
+
3558
3617
  ('server', ('inet:server', {}), {
3559
3618
  'doc': 'The TLS server during the handshake.'}),
3619
+
3560
3620
  ('server:cert', ('crypto:x509:cert', {}), {
3561
3621
  'doc': 'The x509 certificate sent by the server during the handshake.'}),
3562
- ('server:fingerprint:ja3', ('hash:md5', {}), {
3563
- 'doc': 'The JA3S finger of the server.'}),
3622
+
3623
+ ('server:ja3s', ('hash:md5', {}), {
3624
+ 'doc': 'The JA3S fingerprint of the server response.'}),
3625
+
3626
+ ('server:ja4s', ('inet:tls:ja4s', {}), {
3627
+ 'doc': 'The JA4S fingerprint of the server response.'}),
3628
+
3564
3629
  ('client', ('inet:client', {}), {
3565
3630
  'doc': 'The TLS client during the handshake.'}),
3631
+
3566
3632
  ('client:cert', ('crypto:x509:cert', {}), {
3567
3633
  'doc': 'The x509 certificate sent by the client during the handshake.'}),
3634
+
3635
+ ('client:ja3', ('hash:md5', {}), {
3636
+ 'doc': 'The JA3 fingerprint of the client request.'}),
3637
+
3638
+ ('client:ja4', ('inet:tls:ja4', {}), {
3639
+ 'doc': 'The JA4 fingerprint of the client request.'}),
3640
+
3568
3641
  ('client:fingerprint:ja3', ('hash:md5', {}), {
3569
- 'doc': 'The JA3 fingerprint of the client.'}),
3642
+ 'deprecated': True,
3643
+ 'doc': 'Deprecated. Please use :client:ja3.'}),
3644
+
3645
+ ('server:fingerprint:ja3', ('hash:md5', {}), {
3646
+ 'deprecated': True,
3647
+ 'doc': 'Deprecated. Please use :server:ja3s.'}),
3570
3648
  )),
3571
3649
 
3572
3650
  ('inet:tls:ja3s:sample', {}, (
@@ -3608,12 +3686,22 @@ class InetModule(s_module.CoreModule):
3608
3686
 
3609
3687
  ('url', ('inet:url', {}), {
3610
3688
  'ex': 'https://twitter.com',
3689
+ 'alts': ('urls',),
3611
3690
  'doc': 'The primary URL of the platform.'}),
3612
3691
 
3692
+ ('urls', ('array', {'type': 'inet:url', 'sorted': True, 'uniq': True}), {
3693
+ 'doc': 'An array of alternate URLs for the platform.'}),
3694
+
3613
3695
  ('name', ('str', {'onespace': True, 'lower': True}), {
3614
3696
  'ex': 'twitter',
3697
+ 'alts': ('names',),
3615
3698
  'doc': 'A friendly name for the platform.'}),
3616
3699
 
3700
+ ('names', ('array', {'type': 'str',
3701
+ 'typeopts': {'onespace': True, 'lower': True},
3702
+ 'sorted': True, 'uniq': True}), {
3703
+ 'doc': 'An array of alternate names for the platform.'}),
3704
+
3617
3705
  ('desc', ('str', {}), {
3618
3706
  'disp': {'hint': 'text'},
3619
3707
  'doc': 'A description of the service platform.'}),
@@ -3662,6 +3750,22 @@ class InetModule(s_module.CoreModule):
3662
3750
  'doc': 'The tenant which contains the instance.'}),
3663
3751
  )),
3664
3752
 
3753
+ ('inet:service:app', {}, (
3754
+
3755
+ ('name', ('str', {'lower': True, 'onespace': True}), {
3756
+ 'alts': ('names',),
3757
+ 'doc': 'The name of the platform specific application.'}),
3758
+
3759
+ ('names', ('array', {'type': 'str',
3760
+ 'typeopts': {'onespace': True, 'lower': True},
3761
+ 'sorted': True, 'uniq': True}), {
3762
+ 'doc': 'An array of alternate names for the application.'}),
3763
+
3764
+ ('desc', ('str', {}), {
3765
+ 'disp': {'hint': 'text'},
3766
+ 'doc': 'A description of the platform specific application.'}),
3767
+ )),
3768
+
3665
3769
  ('inet:service:account', {}, (
3666
3770
 
3667
3771
  ('user', ('inet:user', {}), {
@@ -3937,6 +4041,9 @@ class InetModule(s_module.CoreModule):
3937
4041
 
3938
4042
  ('inet:service:access', {}, (
3939
4043
 
4044
+ ('action', ('inet:service:access:action:taxonomy', {}), {
4045
+ 'doc': 'The platform specific action which this access records.'}),
4046
+
3940
4047
  ('resource', ('inet:service:resource', {}), {
3941
4048
  'doc': 'The resource which the account attempted to access.'}),
3942
4049
 
synapse/models/orgs.py CHANGED
@@ -1241,7 +1241,6 @@ class OuModule(s_module.CoreModule):
1241
1241
  )),
1242
1242
  ('ou:conference:event', {}, (
1243
1243
  ('conference', ('ou:conference', {}), {
1244
- 'ro': True,
1245
1244
  'doc': 'The conference to which the event is associated.',
1246
1245
  }),
1247
1246
  ('organizer', ('ps:contact', {}), {
@@ -86,6 +86,11 @@ class BaseTest(s_t_utils.SynTest):
86
86
  await Hehe.anit(-1)
87
87
  self.eq(cm.exception.get('mesg'), 'boom')
88
88
 
89
+ if __debug__:
90
+ with self.raises(AssertionError) as cm:
91
+ Hehe()
92
+ self.eq(str(cm.exception), 'Objects from Base must be constructed solely via "anit"')
93
+
89
94
  async def test_coro_fini(self):
90
95
 
91
96
  event = asyncio.Event()
@@ -164,8 +164,8 @@ class ConfTest(s_test.SynTest):
164
164
  # We can ensure that certain vars are loaded
165
165
  self.eq('Funky string time!', conf.req('key:string'))
166
166
  # And throw if they are not, or if the requested key isn't even schema valid
167
- self.raises(s_exc.NeedConfValu, conf.reqConfValu, 'key:bool:nodefval')
168
- self.raises(s_exc.BadArg, conf.reqConfValu, 'key:newp')
167
+ self.raises(s_exc.NeedConfValu, conf.req, 'key:bool:nodefval')
168
+ self.raises(s_exc.BadArg, conf.req, 'key:newp')
169
169
 
170
170
  # Since we're an Mutable mapping, we have some dict methods available to us
171
171
  self.len(8, conf) # __len__
@@ -380,6 +380,12 @@ class ConfTest(s_test.SynTest):
380
380
  self.eq(item['key:number'], 123)
381
381
  self.notin('key:string', item)
382
382
 
383
+ item = validator({'key:multi': 123})
384
+ self.eq(item['key:multi'], 123)
385
+
386
+ item = validator({'key:multi': '123'})
387
+ self.eq(item['key:multi'], '123')
388
+
383
389
  async def test_config_ref_handler(self):
384
390
 
385
391
  filename = pathlib.Path(s_data.path(
@@ -1399,8 +1399,8 @@ class LayerTest(s_t_utils.SynTest):
1399
1399
  self.len(1, nodes)
1400
1400
  self.eq(nodes[0].ndef, ('inet:ipv4', 0x01020304))
1401
1401
  self.eq(nodes[0].get('asn'), 33)
1402
- self.true(nodes[0].getTag('foo.bar'), (None, None))
1403
- self.true(nodes[0].getTagProp('foo.bar', 'confidence'), 22)
1402
+ self.eq(nodes[0].getTag('foo.bar'), (None, None))
1403
+ self.eq(nodes[0].getTagProp('foo.bar', 'confidence'), 100)
1404
1404
 
1405
1405
  self.eq(10004, await core.count('.created'))
1406
1406
  self.len(2, await core.nodes('syn:tag~=foo'))
@@ -2251,16 +2251,18 @@ class StormTest(s_t_utils.SynTest):
2251
2251
  nodes = [m[1] for m in msgs if m[0] == 'node']
2252
2252
 
2253
2253
  node = nodes[0]
2254
+ self.eq('inet:asn', node[1]['embeds']['asn']['$form'])
2254
2255
  self.eq('hehe', node[1]['embeds']['asn']['name'])
2255
- self.eq('796d67b92a6ffe9b88fa19d115b46ab6712d673a06ae602d41de84b1464782f2', node[1]['embeds']['asn']['*'])
2256
+ self.eq('796d67b92a6ffe9b88fa19d115b46ab6712d673a06ae602d41de84b1464782f2', node[1]['embeds']['asn']['$iden'])
2256
2257
 
2257
2258
  opts = {'embeds': {'ou:org': {'hq::email': ('user',)}}}
2258
2259
  msgs = await core.stormlist('[ ou:org=* :country=* :hq=* ] { -> ps:contact [ :email=visi@vertex.link ] }', opts=opts)
2259
2260
  nodes = [m[1] for m in msgs if m[0] == 'node']
2260
2261
  node = nodes[0]
2261
2262
 
2263
+ self.eq('inet:email', node[1]['embeds']['hq::email']['$form'])
2262
2264
  self.eq('visi', node[1]['embeds']['hq::email']['user'])
2263
- self.eq('2346d7bed4b0fae05e00a413bbf8716c9e08857eb71a1ecf303b8972823f2899', node[1]['embeds']['hq::email']['*'])
2265
+ self.eq('2346d7bed4b0fae05e00a413bbf8716c9e08857eb71a1ecf303b8972823f2899', node[1]['embeds']['hq::email']['$iden'])
2264
2266
 
2265
2267
  fork = await core.callStorm('return($lib.view.get().fork().iden)')
2266
2268
 
@@ -2373,10 +2375,17 @@ class StormTest(s_t_utils.SynTest):
2373
2375
  self.eq(['inet:service:rule', 'risk:vulnerable'], [n[0][0] for n in nodes])
2374
2376
 
2375
2377
  embeds = nodes[0][1]['embeds']
2378
+
2379
+ self.nn(embeds['object']['$iden'])
2380
+ self.eq('risk:vulnerable', embeds['object']['$form'])
2376
2381
  self.eq(1, embeds['object']['mitigated'])
2377
2382
  self.eq(None, embeds['object']['newp'])
2383
+
2384
+ self.nn(embeds['object::node']['$iden'])
2385
+ self.eq('it:prod:hardware', embeds['object::node']['$form'])
2378
2386
  self.eq('foohw', embeds['object::node']['name'])
2379
2387
  self.eq(None, embeds['object::node']['newp'])
2388
+ self.eq('inet:service:account', embeds['grantee']['$form'])
2380
2389
  self.eq('foocon', embeds['grantee']['id'])
2381
2390
  self.eq(None, embeds['grantee']['newp'])
2382
2391
 
@@ -2384,6 +2393,26 @@ class StormTest(s_t_utils.SynTest):
2384
2393
  self.eq('barvuln', embeds['vuln']['name'])
2385
2394
  self.eq('foohw', embeds['node']['name'])
2386
2395
 
2396
+ # embed through `econ:pay:instrument` type that extends from `ndef`
2397
+ await core.nodes('''
2398
+ [ econ:acct:payment=* :from:instrument={ [ econ:pay:card=(testcard,) :name=infime ] } ]
2399
+ ''')
2400
+
2401
+ opts = {
2402
+ 'embeds': {
2403
+ 'econ:acct:payment': {
2404
+ 'from:instrument': ['name'],
2405
+ }
2406
+ }
2407
+ }
2408
+ msgs = await core.stormlist('econ:acct:payment', opts=opts)
2409
+ node = [m[1] for m in msgs if m[0] == 'node'][0]
2410
+ self.eq('econ:acct:payment', node[0][0])
2411
+
2412
+ embeds = node[1]['embeds']
2413
+ self.eq('86caf7a47348d56b2f6bec3e767a9fc7eaaaf5a80d7bbaa235fab763c7dcc560', embeds['from:instrument']['*'])
2414
+ self.eq('infime', embeds['from:instrument']['name'])
2415
+
2387
2416
  async def test_storm_wget(self):
2388
2417
 
2389
2418
  async def _getRespFromSha(core, mesgs):
@@ -642,9 +642,9 @@ class StormHttpTest(s_test.SynTest):
642
642
  self.isin('connect to proxy 127.0.0.1:1', resp['mesg'])
643
643
 
644
644
  q = '$resp=$lib.inet.http.get("http://vertex.link") return(($resp.code, $resp.err))'
645
- code, (errname, _) = await core.callStorm(q)
645
+ code, (errname, errinfo) = await core.callStorm(q)
646
646
  self.eq(code, -1)
647
- self.eq('ProxyConnectionError', errname)
647
+ self.isin("connect to proxy 127.0.0.1:1", errinfo.get('mesg'))
648
648
 
649
649
  msgs = await core.stormlist('$resp=$lib.inet.http.get("http://vertex.link", proxy=(null)) $lib.print($resp.err)')
650
650
  self.stormIsInWarn('HTTP proxy argument to $lib.null is deprecated', msgs)
@@ -669,7 +669,7 @@ class StormHttpTest(s_test.SynTest):
669
669
  self.stormIsInErr(errmsg.format(perm='storm.lib.inet.http.proxy'), msgs)
670
670
 
671
671
  resp = await core.callStorm('return($lib.inet.http.get(http://vertex.link, proxy=socks5://user:pass@127.0.0.1:1))')
672
- self.eq('ProxyConnectionError', resp['err'][0])
672
+ self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
673
673
 
674
674
  # test $lib.axon proxy API
675
675
  asvisi = {'user': visi.iden}
@@ -748,13 +748,13 @@ class StormHttpTest(s_test.SynTest):
748
748
  opts = {'vars': {'proxy': 'socks5://user:pass@127.0.0.1:1'}, 'user': visi.iden}
749
749
 
750
750
  resp = await core.callStorm(q1, opts=opts)
751
- self.eq('ProxyConnectionError', resp['err'][0])
751
+ self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
752
752
 
753
753
  resp = await core.callStorm(q2, opts=opts)
754
- self.eq('ProxyConnectionError', resp['err'][0])
754
+ self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
755
755
 
756
756
  resp = await core.callStorm(q3, opts=opts)
757
- self.eq('ProxyConnectionError', resp['err'][0])
757
+ self.isin("connect to proxy 127.0.0.1:1", resp['err'][1].get('mesg'))
758
758
 
759
759
  opts = {'vars': {'proxy': False}, 'user': visi.iden}
760
760
 
@@ -46,11 +46,13 @@ class JsonTest(s_test.SynTest):
46
46
  q = '''$schemaObj = $lib.json.schema($schema)
47
47
  $item=({})
48
48
  $item."key:integer"=(4)
49
+ $item."key:multi"=(4)
49
50
  return ( $schemaObj.validate($item) )
50
51
  '''
51
52
  isok, valu = await core.callStorm(q, opts=opts)
52
53
  self.true(isok)
53
54
  self.eq(4, valu.get('key:integer'))
55
+ self.eq(4, valu.get('key:multi'))
54
56
  self.eq('Default string!', valu.get('key:string'))
55
57
 
56
58
  q = '''$schemaObj = $lib.json.schema($schema)
@@ -68,12 +70,13 @@ class JsonTest(s_test.SynTest):
68
70
 
69
71
  q = '''
70
72
  $schemaObj = $lib.json.schema($schema, use_default=$lib.false)
71
- $item = ({"key:integer": 4})
73
+ $item = ({"key:integer": 4, "key:multi": "4"})
72
74
  return($schemaObj.validate($item))
73
75
  '''
74
76
  isok, valu = await core.callStorm(q, opts={'vars': {'schema': s_test.test_schema}})
75
77
  self.true(isok)
76
78
  self.eq(4, valu.get('key:integer'))
79
+ self.eq('4', valu.get('key:multi'))
77
80
  self.notin('key:string', valu)
78
81
 
79
82
  # Print a json schema obj
@@ -1291,35 +1291,33 @@ class StormTypesTest(s_test.SynTest):
1291
1291
  self.len(1, nodes)
1292
1292
  self.eq('visi@vertex.link', nodes[0].ndef[1])
1293
1293
 
1294
- nodes = await core.nodes('$s = woot [ test:int=$s.startswith(w) ]')
1295
- self.eq(1, nodes[0].ndef[1])
1294
+ self.true(await core.callStorm('$s = woot return($s.startswith(w))'))
1296
1295
 
1297
- nodes = await core.nodes('$s = woot [ test:int=$s.endswith(visi) ]')
1298
- self.eq(0, nodes[0].ndef[1])
1296
+ self.false(await core.callStorm('$s = woot return($s.endswith(visi))'))
1299
1297
 
1300
- nodes = await core.nodes('$s = woot [ test:str=$s.rjust(10) ]')
1301
- self.eq(' woot', nodes[0].ndef[1])
1298
+ valu = await core.callStorm('$s = woot return($s.rjust(10))')
1299
+ self.eq(' woot', valu)
1302
1300
 
1303
- nodes = await core.nodes('$s = woot [ test:str=$s.rjust(10, x) ]')
1304
- self.eq('xxxxxxwoot', nodes[0].ndef[1])
1301
+ valu = await core.callStorm('$s = woot return($s.rjust(10, x))')
1302
+ self.eq('xxxxxxwoot', valu)
1305
1303
 
1306
- nodes = await core.nodes('$s = woot [ test:str=$s.ljust(10) ]')
1307
- self.eq('woot ', nodes[0].ndef[1])
1304
+ valu = await core.callStorm('$s = woot return($s.ljust(10))')
1305
+ self.eq('woot ', valu)
1308
1306
 
1309
- nodes = await core.nodes('$s = woot [ test:str=$s.ljust(10, x) ]')
1310
- self.eq('wootxxxxxx', nodes[0].ndef[1])
1307
+ valu = await core.callStorm('$s = woot return($s.ljust(10, x))')
1308
+ self.eq('wootxxxxxx', valu)
1311
1309
 
1312
1310
  sobj = s_stormtypes.Str('beepbeep')
1313
1311
  self.len(8, sobj)
1314
1312
 
1315
- nodes = await core.nodes("$s = (foo, bar, baz) [ test:str=('.').join($s) ]")
1316
- self.eq('foo.bar.baz', nodes[0].ndef[1])
1313
+ valu = await core.callStorm('$s = (foo, bar, baz) return((".").join($s))')
1314
+ self.eq('foo.bar.baz', valu)
1317
1315
 
1318
- nodes = await core.nodes('$s = foo-bar-baz [ test:str=$s.replace("-", ".") ]')
1319
- self.eq('foo.bar.baz', nodes[0].ndef[1])
1316
+ valu = await core.callStorm('$s = foo-bar-baz return($s.replace("-", "."))')
1317
+ self.eq('foo.bar.baz', valu)
1320
1318
 
1321
- nodes = await core.nodes('$s = foo-bar-baz [ test:str=$s.replace("-", ".", 1) ]')
1322
- self.eq('foo.bar-baz', nodes[0].ndef[1])
1319
+ valu = await core.callStorm('$s = foo-bar-baz return($s.replace("-", ".", 1))')
1320
+ self.eq('foo.bar-baz', valu)
1323
1321
 
1324
1322
  q = '$foo=" foo " return ( $foo.strip() )'
1325
1323
  self.eq('foo', await core.callStorm(q))
@@ -332,6 +332,20 @@ class ViewTest(s_t_utils.SynTest):
332
332
  self.len(100, nodeedit[0][2])
333
333
  self.len(2, nodeedit[1][2])
334
334
 
335
+ await core.nodes('[ test:str=lowertag +#a.b=2020]')
336
+
337
+ vdef2 = await core.view.fork()
338
+ opts = {'view': vdef2['iden']}
339
+ await core.nodes('test:str=lowertag [ +#a.b.c ]', opts=opts)
340
+
341
+ retn = await core.callStorm('test:str=lowertag return($node.getStorNodes())', opts=opts)
342
+
343
+ # Only leaf tag is added in our top layer
344
+ self.isin('a.b.c', retn[0].get('tags'))
345
+ self.notin('a.b', retn[0].get('tags'))
346
+
347
+ self.isin('a.b', retn[1].get('tags'))
348
+
335
349
  async def test_view_merge_ival(self):
336
350
 
337
351
  async with self.getTestCore() as core:
@@ -2908,10 +2908,10 @@ class InetModelTest(s_t_utils.SynTest):
2908
2908
  :flow=*
2909
2909
  :server=$server
2910
2910
  :server:cert=*
2911
- :server:fingerprint:ja3=$ja3s
2911
+ :server:ja3s=$ja3s
2912
2912
  :client=$client
2913
2913
  :client:cert=*
2914
- :client:fingerprint:ja3=$ja3
2914
+ :client:ja3=$ja3
2915
2915
  ]
2916
2916
  ''', opts={'vars': props})
2917
2917
  self.len(1, nodes)
@@ -2920,8 +2920,8 @@ class InetModelTest(s_t_utils.SynTest):
2920
2920
  self.nn(nodes[0].get('server:cert'))
2921
2921
  self.nn(nodes[0].get('client:cert'))
2922
2922
 
2923
- self.eq(props['ja3'], nodes[0].get('client:fingerprint:ja3'))
2924
- self.eq(props['ja3s'], nodes[0].get('server:fingerprint:ja3'))
2923
+ self.eq(props['ja3'], nodes[0].get('client:ja3'))
2924
+ self.eq(props['ja3s'], nodes[0].get('server:ja3s'))
2925
2925
 
2926
2926
  self.eq(props['client'], nodes[0].get('client'))
2927
2927
  self.eq(props['server'], nodes[0].get('server'))
@@ -2971,7 +2971,9 @@ class InetModelTest(s_t_utils.SynTest):
2971
2971
  q = '''
2972
2972
  [ inet:service:platform=(slack,)
2973
2973
  :url="https://slack.com"
2974
+ :urls=(https://slacker.com,)
2974
2975
  :name=Slack
2976
+ :names=("slack chat",)
2975
2977
  :provider={ ou:org:name=$provname }
2976
2978
  :provider:name=$provname
2977
2979
  ]
@@ -2980,11 +2982,19 @@ class InetModelTest(s_t_utils.SynTest):
2980
2982
  self.len(1, nodes)
2981
2983
  self.eq(nodes[0].ndef, ('inet:service:platform', s_common.guid(('slack',))))
2982
2984
  self.eq(nodes[0].get('url'), 'https://slack.com')
2985
+ self.eq(nodes[0].get('urls'), ('https://slacker.com',))
2983
2986
  self.eq(nodes[0].get('name'), 'slack')
2987
+ self.eq(nodes[0].get('names'), ('slack chat',))
2984
2988
  self.eq(nodes[0].get('provider'), provider.ndef[1])
2985
2989
  self.eq(nodes[0].get('provider:name'), provname.lower())
2986
2990
  platform = nodes[0]
2987
2991
 
2992
+ nodes = await core.nodes('[ inet:service:platform=({"name": "slack chat"}) ]')
2993
+ self.eq(nodes[0].ndef, platform.ndef)
2994
+
2995
+ nodes = await core.nodes('[ inet:service:platform=({"url": "https://slacker.com"}) ]')
2996
+ self.eq(nodes[0].ndef, platform.ndef)
2997
+
2988
2998
  q = '''
2989
2999
  [ inet:service:instance=(vertex, slack)
2990
3000
  :id='T2XK1223Y'
@@ -3383,12 +3393,15 @@ class InetModelTest(s_t_utils.SynTest):
3383
3393
 
3384
3394
  q = '''
3385
3395
  [ inet:service:access=(api, blackout, 1715856900000, vertex, slack)
3396
+ :action=foo.bar
3386
3397
  :account=$blckiden
3387
3398
  :instance=$instiden
3388
3399
  :platform=$platiden
3389
3400
  :resource=$rsrciden
3390
3401
  :success=$lib.true
3391
3402
  :time=(1715856900000)
3403
+ :app={[ inet:service:app=({"name": "slack web"}) ]}
3404
+ :client:app={[ inet:service:app=({"name": "slack web"}) :desc="The slack web application"]}
3392
3405
  ]
3393
3406
  '''
3394
3407
  opts = {'vars': {
@@ -3400,12 +3413,14 @@ class InetModelTest(s_t_utils.SynTest):
3400
3413
  }}
3401
3414
  nodes = await core.nodes(q, opts=opts)
3402
3415
  self.len(1, nodes)
3416
+ self.eq(nodes[0].get('action'), 'foo.bar.')
3403
3417
  self.eq(nodes[0].get('account'), blckacct.ndef[1])
3404
3418
  self.eq(nodes[0].get('instance'), platinst.ndef[1])
3405
3419
  self.eq(nodes[0].get('platform'), platform.ndef[1])
3406
3420
  self.eq(nodes[0].get('resource'), resource.ndef[1])
3407
3421
  self.true(nodes[0].get('success'))
3408
3422
  self.eq(nodes[0].get('time'), 1715856900000)
3423
+ self.eq(nodes[0].get('app'), nodes[0].get('client:app'))
3409
3424
 
3410
3425
  q = '''
3411
3426
  [ inet:service:message=(visi, says, relax)
@@ -3483,3 +3498,41 @@ class InetModelTest(s_t_utils.SynTest):
3483
3498
  self.len(1, await core.nodes('inet:service:subscription -> inet:service:subscription:level:taxonomy'))
3484
3499
  self.len(1, await core.nodes('inet:service:subscription :pay:instrument -> econ:bank:account'))
3485
3500
  self.len(1, await core.nodes('inet:service:subscription :subscriber -> inet:service:tenant'))
3501
+
3502
+ async def test_model_inet_tls_ja4(self):
3503
+
3504
+ async with self.getTestCore() as core:
3505
+
3506
+ nodes = await core.nodes('[ inet:tls:ja4:sample=(1.2.3.4, t13d190900_9dc949149365_97f8aa674fd9) ]')
3507
+ self.len(1, nodes)
3508
+ self.eq(nodes[0].get('ja4'), 't13d190900_9dc949149365_97f8aa674fd9')
3509
+ self.eq(nodes[0].get('client'), 'tcp://1.2.3.4')
3510
+ self.len(1, await core.nodes('inet:tls:ja4:sample -> inet:client'))
3511
+ self.len(1, await core.nodes('inet:tls:ja4:sample -> inet:tls:ja4'))
3512
+
3513
+ nodes = await core.nodes('[ inet:tls:ja4s:sample=(1.2.3.4:443, t130200_1301_a56c5b993250) ]')
3514
+ self.len(1, nodes)
3515
+ self.eq(nodes[0].get('ja4s'), 't130200_1301_a56c5b993250')
3516
+ self.eq(nodes[0].get('server'), 'tcp://1.2.3.4:443')
3517
+ self.len(1, await core.nodes('inet:tls:ja4s:sample -> inet:server'))
3518
+ self.len(1, await core.nodes('inet:tls:ja4s:sample -> inet:tls:ja4s'))
3519
+
3520
+ nodes = await core.nodes('''[
3521
+ inet:tls:handshake=*
3522
+ :client:ja4=t13d190900_9dc949149365_97f8aa674fd9
3523
+ :server:ja4s=t130200_1301_a56c5b993250
3524
+ ]''')
3525
+ self.len(1, nodes)
3526
+ self.eq(nodes[0].get('client:ja4'), 't13d190900_9dc949149365_97f8aa674fd9')
3527
+ self.eq(nodes[0].get('server:ja4s'), 't130200_1301_a56c5b993250')
3528
+ self.len(1, await core.nodes('inet:tls:handshake :client:ja4 -> inet:tls:ja4'))
3529
+ self.len(1, await core.nodes('inet:tls:handshake :server:ja4s -> inet:tls:ja4s'))
3530
+
3531
+ ja4_t = core.model.type('inet:tls:ja4')
3532
+ ja4s_t = core.model.type('inet:tls:ja4s')
3533
+ self.eq('t13d1909Tg_9dc949149365_97f8aa674fd9', ja4_t.norm(' t13d1909Tg_9dc949149365_97f8aa674fd9 ')[0])
3534
+ self.eq('t1302Tg_1301_a56c5b993250', ja4s_t.norm(' t1302Tg_1301_a56c5b993250 ')[0])
3535
+ with self.raises(s_exc.BadTypeValu):
3536
+ ja4_t.norm('t13d190900_9dc949149365_97f8aa674fD9')
3537
+ with self.raises(s_exc.BadTypeValu):
3538
+ ja4s_t.norm('t130200_1301_a56c5B993250')
@@ -455,8 +455,24 @@ class OuModelTest(s_t_utils.SynTest):
455
455
  'place': place0,
456
456
  'url': 'http://arrowcon.org/2018/dinner',
457
457
  }
458
- q = '''[(ou:conference:event=$valu :name=$p.name :desc=$p.desc :start=$p.start :end=$p.end
459
- :conference=$p.conference :contact=$p.contact :place=$p.place :url=$p.url)]'''
458
+ q = '''
459
+ [ ou:conference:event=$valu
460
+ :name=$p.name
461
+ :desc=$p.desc
462
+ :start=$p.start
463
+ :end=$p.end
464
+ :conference=$p.conference
465
+ :contact=$p.contact
466
+ :place=$p.place
467
+ :url=$p.url
468
+ ]
469
+
470
+ // :conference should not be RO
471
+ [ -:conference ]
472
+
473
+ // Put the value back
474
+ [ :conference=$p.conference ]
475
+ '''
460
476
  nodes = await core.nodes(q, opts={'vars': {'valu': c0, 'p': props}})
461
477
  self.len(1, nodes)
462
478
  node = nodes[0]
@@ -3,6 +3,9 @@ import stat
3
3
 
4
4
  import synapse.exc as s_exc
5
5
  import synapse.common as s_common
6
+
7
+ import synapse.lib.version as s_version
8
+
6
9
  import synapse.tests.utils as s_test
7
10
  import synapse.tests.files as s_files
8
11
 
@@ -159,6 +162,12 @@ class GenPkgTest(s_test.SynTest):
159
162
  wflow = pdef['optic']['workflows']['testpkg-baz']
160
163
  self.eq(wflow, {'name': 'real-baz', 'desc': 'this is the real baz desc'})
161
164
 
165
+ build = pdef.get('build')
166
+ self.nn(build)
167
+ self.nn(build.get('time'))
168
+ self.eq(build.get('synapse:version'), s_version.verstring)
169
+ self.eq(build.get('synapse:commit'), s_version.commit)
170
+
162
171
  # nodocs
163
172
  nodocspath = s_common.genpath(core.dirn, 'testpkg_nodocs.json')
164
173
  argv = ('--no-docs', '--save', nodocspath, ymlpath)
synapse/tests/utils.py CHANGED
@@ -987,6 +987,10 @@ test_schema = {
987
987
  'description': 'Foo String',
988
988
  'type': 'string',
989
989
  },
990
+ 'key:multi': {
991
+ 'description': 'String or integer',
992
+ 'type': ['string', 'integer'],
993
+ }
990
994
  },
991
995
  'type': 'object',
992
996
  }
synapse/tools/autodoc.py CHANGED
@@ -12,6 +12,7 @@ import synapse.common as s_common
12
12
  import synapse.cortex as s_cortex
13
13
  import synapse.telepath as s_telepath
14
14
 
15
+ import synapse.lib.coro as s_coro
15
16
  import synapse.lib.json as s_json
16
17
  import synapse.lib.storm as s_storm
17
18
  import synapse.lib.config as s_config
@@ -1041,6 +1042,11 @@ def makeargparser():
1041
1042
 
1042
1043
  return pars
1043
1044
 
1044
- if __name__ == '__main__': # pragma: no cover
1045
+ async def _main(argv, outp=None): # pragma: no cover
1045
1046
  s_common.setlogging(logger, 'DEBUG')
1046
- asyncio.run(main(sys.argv[1:]))
1047
+ ret = await main(argv, outp=outp)
1048
+ await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
1049
+ return ret
1050
+
1051
+ if __name__ == '__main__': # pragma: no cover
1052
+ asyncio.run(_main(sys.argv[1:]))
synapse/tools/genpkg.py CHANGED
@@ -18,6 +18,7 @@ import synapse.lib.output as s_output
18
18
  import synapse.lib.certdir as s_certdir
19
19
  import synapse.lib.dyndeps as s_dyndeps
20
20
  import synapse.lib.schemas as s_schemas
21
+ import synapse.lib.version as s_version
21
22
 
22
23
  logger = logging.getLogger(__name__)
23
24
 
@@ -122,6 +123,12 @@ def loadPkgProto(path, opticdir=None, no_docs=False, readonly=False):
122
123
 
123
124
  genopts = pkgdef.pop('genopts', {})
124
125
 
126
+ # Stamp build info into the pkgdef if it doesn't already exist
127
+ pkgdef.setdefault('build', {})
128
+ pkgdef['build'].setdefault('time', s_common.now())
129
+ pkgdef['build'].setdefault('synapse:version', s_version.verstring)
130
+ pkgdef['build'].setdefault('synapse:commit', s_version.commit)
131
+
125
132
  logodef = pkgdef.get('logo')
126
133
  if logodef is not None:
127
134
 
@@ -265,8 +272,6 @@ async def main(argv, outp=s_output.stdout):
265
272
  else:
266
273
  pkgdef = loadPkgProto(opts.pkgfile, opticdir=opts.optic, no_docs=opts.no_docs)
267
274
 
268
- pkgdef['build'] = {'time': s_common.now()}
269
-
270
275
  if opts.signas is not None:
271
276
 
272
277
  s_certdir.addCertPath(opts.certdir)
@@ -283,6 +288,8 @@ async def main(argv, outp=s_output.stdout):
283
288
  'sign': sign,
284
289
  }
285
290
 
291
+ s_schemas.reqValidPkgdef(pkgdef)
292
+
286
293
  if not opts.save and not opts.push:
287
294
  outp.printf('Neither --push nor --save provided. Nothing to do.')
288
295
  return 1
synapse/tools/rstorm.py CHANGED
@@ -5,6 +5,7 @@ import argparse
5
5
 
6
6
  import synapse.common as s_common
7
7
 
8
+ import synapse.lib.coro as s_coro
8
9
  import synapse.lib.output as s_output
9
10
  import synapse.lib.rstorm as s_rstorm
10
11
 
@@ -32,6 +33,11 @@ async def main(argv, outp=s_output.stdout):
32
33
  for line in lines:
33
34
  outp.printf(line, addnl=False)
34
35
 
35
- if __name__ == '__main__':
36
+ async def _main(argv, outp=s_output.stdout): # pragma: no cover
36
37
  s_common.setlogging(logger)
37
- sys.exit(asyncio.run(main(sys.argv[1:])))
38
+ ret = await main(argv, outp=outp)
39
+ await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
40
+ return ret
41
+
42
+ if __name__ == '__main__':
43
+ sys.exit(asyncio.run(_main(sys.argv[1:])))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse
3
- Version: 2.210.0
3
+ Version: 2.212.0
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License-Expression: Apache-2.0
@@ -89,7 +89,7 @@ synapse/lib/aha.py,sha256=ll03EXHmOV4ZmG_KmkgdmU6uaMnFR9uhiDvQJj_79T4,56234
89
89
  synapse/lib/ast.py,sha256=fLVJwGFTtRUZWdKcxzd2PPCErDHfzt47aLT1wALwUSI,166296
90
90
  synapse/lib/auth.py,sha256=B7-Ji3MzPlW6pvRNtb0ciJKDru54QC-_yvznGraZCJs,54400
91
91
  synapse/lib/autodoc.py,sha256=tM2OCPrV7yeth8Cx-wx-_VXBmBfzJS52vaubg_7BqCI,23217
92
- synapse/lib/base.py,sha256=m6gQB_PhSg-7-GJlNVgBQQJNseGEEBCwiZesk62l5Kg,23464
92
+ synapse/lib/base.py,sha256=yJVfv7SiZhnzAP9LWKHlFOsY_l6ztUDNtt2TDT22U4Q,23422
93
93
  synapse/lib/boss.py,sha256=UvYIbUS32B70rK-5pPOeCKEKg2cR8ymedhuTYo_31Ik,2248
94
94
  synapse/lib/cache.py,sha256=N8BoNFQXOaYQU33LLYQcVkdV6IYjSNaUoaKue55y7H0,6275
95
95
  synapse/lib/cell.py,sha256=no45zKA9hZIzoElYg298pUxcOY6kCEoR_Prq9wuq9TI,184737
@@ -125,7 +125,7 @@ synapse/lib/modules.py,sha256=xHNrGBWLOSTSqn7GMMnm6iiw3Df-Q11h5gOUw84Ax7E,1282
125
125
  synapse/lib/msgpack.py,sha256=IEYF1sv0UoYq1BpqfZUzf30bAlWveC6ZArXBeY68vuI,7895
126
126
  synapse/lib/multislabseqn.py,sha256=cxNN1UdQPD3TDvGnNJcITkssAk5Y3pBsbd89sVd8qJw,15221
127
127
  synapse/lib/nexus.py,sha256=CrdOco9bcAzV1-93h1DlvZeqLP_kCIJvZRvb1Rwxgfk,23687
128
- synapse/lib/node.py,sha256=C4oiRjaLAYEiv5eETOYAROwQGg-EqhhtJCAZUtRBkI0,31251
128
+ synapse/lib/node.py,sha256=XwcgKbouFHMt79Hmju3vo6xd3jTrLu5Ai5zFqpU_HuA,31474
129
129
  synapse/lib/oauth.py,sha256=xgJNXyt4uWymt5xaoXpCAeZmrSiJV7XVwl9h3Pm92zg,20367
130
130
  synapse/lib/output.py,sha256=MARscREHja4h8PQN7GZxHGvF36RoOkUyw3vfhmFzMTk,890
131
131
  synapse/lib/parser.py,sha256=Tjk1aYa5ucQLzGGUf14dmNFpxfLiKu00ZWj8SgAf324,29471
@@ -133,13 +133,13 @@ synapse/lib/queue.py,sha256=omMtqD4HWg2mLOhhtIe4pA_evz234lJ9uhlAhC_xbW4,3879
133
133
  synapse/lib/ratelimit.py,sha256=BIeFPZb9Bk5GFIVvhM43Uw1s0abY6z7NgTuBorVajz4,1124
134
134
  synapse/lib/reflect.py,sha256=j7Y522UzAwNswUehyfi9kHFNkTxuHXsFuEKY4ATXWTQ,2783
135
135
  synapse/lib/rstorm.py,sha256=z5RdqNI0EkjWuU1oWbGXZrgxcBF32mFJGPA-_sdd6EM,19895
136
- synapse/lib/schemas.py,sha256=L4NooZyVHjPgG0f40MOEe66k_EThiuEzIV12JAuWB5c,40736
136
+ synapse/lib/schemas.py,sha256=gmjiPlA-7jHudG1Dq-TROh18NDxRjdu4-oCCdBUtDn8,41106
137
137
  synapse/lib/scope.py,sha256=0CuSXLG_7pNleC1BcJ8_WbA50DswrX4DNjW5MyGGGNo,5496
138
138
  synapse/lib/scrape.py,sha256=-TLjUrerHCGiuCOeuGOGA6IpQdaFGW6LvwZtp1xOCnw,23785
139
- synapse/lib/share.py,sha256=HDQR7nb4IOleHB1kIFe6prZQVW7PjPAivSAkPuhNn5A,663
139
+ synapse/lib/share.py,sha256=wE0WE77QxJTbfcZmVLn_9hHbXMsptj6e2I4KbTho9_Q,605
140
140
  synapse/lib/slaboffs.py,sha256=Fd0RrIRBMjh159aQz5y1ONmzw0NvV040kVX_jZjQW6I,815
141
141
  synapse/lib/slabseqn.py,sha256=LJ2SZEsZlROBAD3mdS-3JxNVVPXXkBW8GIJXsW0OGG8,10287
142
- synapse/lib/snap.py,sha256=pO-_HKY9juB2ZtecnFIMx9aXTdDzsMfXVmW6uMZHucQ,63626
142
+ synapse/lib/snap.py,sha256=NbFCkISq_UZPjdRUzxAG_You0_rLP9_USAgYi3wAE44,63709
143
143
  synapse/lib/spooled.py,sha256=BQHIW-qZvEcvhEf8PpXhbDDGzq1go4TH63D6kn-1anM,6021
144
144
  synapse/lib/storm.lark,sha256=8RxsM4xYhBpJbGpS2Yfft74eQyvFvD0FbSbaSkLcL20,27412
145
145
  synapse/lib/storm.py,sha256=zda0wgsophZ52T9hgLbiORJHcZHiS2nU3opGoeL5F88,205526
@@ -147,7 +147,7 @@ synapse/lib/storm_format.py,sha256=9cE8WNPYTcqgRakIqkmIQzOr16Hqbj_sM1QabHug3i0,4
147
147
  synapse/lib/stormctrl.py,sha256=3UC2LOHClC17JwYNuo8NeyntuAvIXphjenXEzVP33mY,2523
148
148
  synapse/lib/stormhttp.py,sha256=3BdaZM6wC3iuYc4ryxtroyTdGhGhei40EoKiH4qSwIE,28877
149
149
  synapse/lib/stormsvc.py,sha256=FURIsQUVNJmY8Z5TmhTF1O__DGXPiVg5pUiOoPM8r3g,7573
150
- synapse/lib/stormtypes.py,sha256=dS7jv3aL8yt_tm4UNUX9rO_biF1OMsDyO30066bdiNw,402209
150
+ synapse/lib/stormtypes.py,sha256=R_kRMtJda1h0IPzMN7Rit9mP8Kk62jm1zx4I2ngxHPA,402228
151
151
  synapse/lib/stormwhois.py,sha256=w7N2oCyMljNvi_sRt_bZb5BJwWwYkVGcRd7H_0oHY8Q,2554
152
152
  synapse/lib/structlog.py,sha256=v5MK5jtJIRSF-E4y4fQuzEVKmbocu8ByFLDTY8Ybjpk,1336
153
153
  synapse/lib/task.py,sha256=82by24W-g_PhijFBN97AtvMLHMwlJIsP37fDS2f572Y,6235
@@ -158,7 +158,7 @@ synapse/lib/time.py,sha256=bk_1F6_MDuCWJ1ToPJ-XHkeTWVw5b4SE7cCixBqVxXo,9435
158
158
  synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
159
159
  synapse/lib/types.py,sha256=plPuYWNaJmCWjYIOWIkDhh8NhTONATZD6d85qf2NUfM,69740
160
160
  synapse/lib/urlhelp.py,sha256=ljhnF91z9ihyOLdZZ6OoQYCN1WYjOj1imukD45xiKU0,3320
161
- synapse/lib/version.py,sha256=3sugPlUtaYCItlaNd8dP2k4ygvYtkoPMi_FIC1PO6fI,7162
161
+ synapse/lib/version.py,sha256=2X2VgCdTdapLJHREDFMzUWioAzaYw_MTPVwCZRgAbMM,7162
162
162
  synapse/lib/view.py,sha256=lidWNualB8Imtz1x6aWo70bntdv9Sf9tpG78cliDKjI,62682
163
163
  synapse/lib/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
164
  synapse/lib/crypto/coin.py,sha256=_dhlkzIrHT8BvHdJOWK7PDThz3sK3dDRnWAUqjRpZJc,4910
@@ -194,7 +194,7 @@ synapse/lib/stormlib/index.py,sha256=f92Yn3nhojFhxbp7SUu9T-lRTGw-_miazfwMqG7QO14
194
194
  synapse/lib/stormlib/infosec.py,sha256=sV3kKfQuu832--rXUSENXA3n6TrfhynxUZE-WlZQCVM,30377
195
195
  synapse/lib/stormlib/ipv6.py,sha256=Ik50Hpd6T-XCc7gVzJqmYqGQF8jfIwFIQvNCDPCMtLs,1557
196
196
  synapse/lib/stormlib/iters.py,sha256=TnceDb1bTCpDT2RgaFJ3rpXETZp2GyPzlId6iyah0Os,3159
197
- synapse/lib/stormlib/json.py,sha256=jo-UkqzQc2FcsI4iDUndjl2_KsqKou2EovvIIKooebQ,5984
197
+ synapse/lib/stormlib/json.py,sha256=QR9ytaGbAnKv7qsxnXa3v3yO5cI-jZi1uuwLmcjyG6g,5999
198
198
  synapse/lib/stormlib/log.py,sha256=wdV-lqzQMM0C3GXNJKJKvkSKjk0CBsUfjd-Cl06LOtE,7034
199
199
  synapse/lib/stormlib/macro.py,sha256=7iQ18mCaNZcslmfXGQvOmGQ71HxD7JeDp0HDmu5-EKM,8807
200
200
  synapse/lib/stormlib/math.py,sha256=3RKHj40GkYFiJSINa2AZZOAA-GqqeEP98bWw2JNity8,1149
@@ -239,13 +239,13 @@ synapse/models/entity.py,sha256=loHKByGwv2xyz6cYWWUpwk12mxWNzC06BKgDgWfX6ek,1617
239
239
  synapse/models/files.py,sha256=4nA0LGK2gKEjErzTnFfIX7kxNn8c_C7xWAfiwWFz5zY,34396
240
240
  synapse/models/geopol.py,sha256=1DGxLJ60QlnSIe3WxxViYQ3KFSwm89vvGc534bbSNBo,11304
241
241
  synapse/models/geospace.py,sha256=Ix54xGdGRZNqLI0r6r9OA1t6vqB3XM1lkoy86Vjt5XA,21155
242
- synapse/models/inet.py,sha256=XE_fILzEiG0KrlWAH9DA6HrliXLr030ve9OPsBjywVk,175471
242
+ synapse/models/inet.py,sha256=FadF1-21JUjOJfPXJluTzYHNnJgQdKitTFbKDMzOrrs,180518
243
243
  synapse/models/infotech.py,sha256=Hrv51zXxXGRLiitgbByM7BK_Y_mX18uL5mizZXn2lZA,153163
244
244
  synapse/models/language.py,sha256=hBVVIf5kc_FSIV7HZhWnberoc9ssxuqeff4fqC9iz4o,3640
245
245
  synapse/models/material.py,sha256=UvmnBEkbhBbdbnvWtTlgGJAJlKDrx9E-YSQ3K49ws5M,5405
246
246
  synapse/models/math.py,sha256=5zDLSwGbOcWI6T5-KspPL20sR8Bcs59pnRK2nEELzss,1775
247
247
  synapse/models/media.py,sha256=wdXNzLrHb4YYRZ3NlGombNwZsphwfH20oZQQ9ICq7ZQ,3604
248
- synapse/models/orgs.py,sha256=1zAIdOA0mf5O-6RGMcf5oDmLM7kkIjWxZN3voThOAnc,71526
248
+ synapse/models/orgs.py,sha256=0q7TDvDIDUvPzu-a2ZX1w7G6vUMLgbR2_-0MKIJfU6k,71490
249
249
  synapse/models/person.py,sha256=HiZy_zT0Q1AoeXbpogEJWuJe436bOo_Ai4kkmA9c2ZU,28568
250
250
  synapse/models/planning.py,sha256=vmrY4d3WRxizrNU1YBe36NGZTuuu4lhGS8KI5lCZ5yQ,7302
251
251
  synapse/models/proj.py,sha256=vl-2uZouiWSey8t4lTNA4BxUKhX94rqm3SuLrodQUP8,9904
@@ -286,14 +286,14 @@ synapse/tests/test_lib_aha.py,sha256=gpO-B6C-w_YtrqZlsaKsnpsDIEtAYSJZ3un25rAHTmU
286
286
  synapse/tests/test_lib_ast.py,sha256=_HA-7HozurJHmSFlamEYCWt3iiqd9Zs8fzW8MxtJNd4,192475
287
287
  synapse/tests/test_lib_auth.py,sha256=yuuOnBje8At7EN_DVEkqE_jsYirZYTIOaGa2VcKrckk,45011
288
288
  synapse/tests/test_lib_autodoc.py,sha256=Iz-VuUhwxvQ3ojK-cemSo7CdCUAyFVJ8MfJ2KbFDcjQ,8354
289
- synapse/tests/test_lib_base.py,sha256=dG6KZTXA_CjcqIiUTI5d_Xl_1iqI78hKodB7h3YgY1g,14555
289
+ synapse/tests/test_lib_base.py,sha256=F9tq0G-KgJluob0Np3fBdByOlHxizciAoqAhrGGwe2U,14751
290
290
  synapse/tests/test_lib_boss.py,sha256=xLmfoFFS8-dreIegA_vTJ5_c4-S9UHp48MWLH6_8P0M,1917
291
291
  synapse/tests/test_lib_cache.py,sha256=oQgEBhm8pZFCEvMfcD3znTDQgl8Gv91fEOB-3eb2IIg,8594
292
292
  synapse/tests/test_lib_cell.py,sha256=FbeM8WiKx-jXUZsPvESfLO1GvOZ4xGz7kGWgZlLL5pQ,157097
293
293
  synapse/tests/test_lib_certdir.py,sha256=d5X1lvp0DnBRigXYLbofZAXakZp440-bjaMH30PlGsI,42728
294
294
  synapse/tests/test_lib_chop.py,sha256=LkrM_pQU_KS88aVRPD4DI97qSdhxmw6EUA_jb-UJpww,6238
295
295
  synapse/tests/test_lib_cli.py,sha256=B8qGx9KtTWp31RlCMtfFMzhJ0TzaaO9ph7RCK2jHtx4,9283
296
- synapse/tests/test_lib_config.py,sha256=Uh-LXagjYZyQd1u00aN1SJRo2qjwAD5XdCN2TVEksA4,16531
296
+ synapse/tests/test_lib_config.py,sha256=a_c6MuFaVaMa3cIhOLzqfs39tCc0CsyRp1CeaocawGc,16691
297
297
  synapse/tests/test_lib_const.py,sha256=qatZeo6C9WbpXPoV3dxvbLyDOnsj1U05tEJVrHGnkVc,873
298
298
  synapse/tests/test_lib_coro.py,sha256=tQ8RiLml0hF5K_4s9DEdVSuRn-jfZMcnt6kZPhwsPTI,6132
299
299
  synapse/tests/test_lib_crypto_coin.py,sha256=gMhkItWv4P3JVGlqEt5T35O6aHUMeSyX_vEetP73sZY,419
@@ -313,7 +313,7 @@ synapse/tests/test_lib_httpapi.py,sha256=fJcnNWMtBEOlU5be5-Zji8wgvEAZUqu1kggGhDk
313
313
  synapse/tests/test_lib_interval.py,sha256=PNEU24XXEGdlW7WkiYJGbhGljwBJpAWen9yTOqlNikQ,839
314
314
  synapse/tests/test_lib_json.py,sha256=Xno2FVQDsOeGLWLNvU76VskxvmJHtQufJpW0Cg3IMqQ,8757
315
315
  synapse/tests/test_lib_jsonstor.py,sha256=ToLp5xdCOfqi1bWrPRxMsNewtGOd89zyX9Zn3VT5o9I,5950
316
- synapse/tests/test_lib_layer.py,sha256=NUkm2psAY7LZ4_qp-Dadw9WNg1CeRtZ0MhzTjyemc2g,94548
316
+ synapse/tests/test_lib_layer.py,sha256=FPPN-5fzPya8DYtJJ8-LQzJ3tGwe_YjvaVakKTQRd1I,94545
317
317
  synapse/tests/test_lib_link.py,sha256=NkNPvfWaO22IoVRkmPPLtrHrK2gluFp1gipr1fbSbWE,10297
318
318
  synapse/tests/test_lib_lmdbslab.py,sha256=2R80A17AoErvrt5cW5KattFlAdQrxMXzG02o82uD5So,67693
319
319
  synapse/tests/test_lib_modelrev.py,sha256=DK9ueo4WCUFagGFBP2xqEHvLqA9gnQLdbJTuKQmJs5k,81055
@@ -334,10 +334,10 @@ synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hM
334
334
  synapse/tests/test_lib_slabseqn.py,sha256=74V6jU7DRTsy_hqUFDuT4C6dPlJ6ObNnjmI9qhbbyVc,5230
335
335
  synapse/tests/test_lib_snap.py,sha256=OviJtj9N5LhBV-56TySkWvRly7f8VH9d-VBcNFLAtmg,27805
336
336
  synapse/tests/test_lib_spooled.py,sha256=Ki9UnzTPUtw7devwN_M0a8uwOst81fGQtGSVqSSh1u8,4002
337
- synapse/tests/test_lib_storm.py,sha256=hWKLtjyZQAI5BYTcVfWkyleU-DVM8jL1KYvjp6sjfDk,244001
337
+ synapse/tests/test_lib_storm.py,sha256=GLLbgQ7sztaykAcM5p_n9uyDZ3qad1thG5719sBBjB8,245310
338
338
  synapse/tests/test_lib_storm_format.py,sha256=tEZgQMmKAeG8FQZE5HUjOT7bnKawVTpNaVQh_3Wa630,277
339
339
  synapse/tests/test_lib_stormctrl.py,sha256=1vY7PGjgmz3AibgSiGcp_G4NSYl9YNifWdjPB0CDf1g,2877
340
- synapse/tests/test_lib_stormhttp.py,sha256=l0MsH5zKFMThASs4XGyryOhJNql1yL8hcxlfaqGSYpE,45940
340
+ synapse/tests/test_lib_stormhttp.py,sha256=rhZ9xLTIzLm4GlJUFDieFqAcrhE0EFTDi2erGltPm0I,46056
341
341
  synapse/tests/test_lib_stormlib_aha.py,sha256=XhBokRnanwe2vWZf0PcwyZgJE3mu-7V4xKNhFf7Go4U,17782
342
342
  synapse/tests/test_lib_stormlib_auth.py,sha256=-y7bZwmeM8Qz-hqw115UdBT_c2m-wIUS26Oau-IJuH8,61338
343
343
  synapse/tests/test_lib_stormlib_backup.py,sha256=3ZYE3swQ4A8aYJyVueFXzbekCdoKMC7jsHLoq0hTKGI,1644
@@ -358,7 +358,7 @@ synapse/tests/test_lib_stormlib_index.py,sha256=qz2pIJ1oZAyN3IEpIqYewiB4FVvKSfVL
358
358
  synapse/tests/test_lib_stormlib_infosec.py,sha256=uDaJ5WjTsujvALShSf-RDAOP4HhuddQcXfANTyIJkp4,27375
359
359
  synapse/tests/test_lib_stormlib_ipv6.py,sha256=sJDIM4lKayYct2qAGjRwgadmxzgegzSn8I3UxNRFF4M,877
360
360
  synapse/tests/test_lib_stormlib_iters.py,sha256=cL4YZ1D8lsoMI1LF3_HcbdQbsEGTVk9Sv-qFVSg_G1E,4452
361
- synapse/tests/test_lib_stormlib_json.py,sha256=K98bU_8EsStEyPBsfA9KUo9RbzF5yl2HkL52zMOVNA0,3813
361
+ synapse/tests/test_lib_stormlib_json.py,sha256=ULqYofzDYHPfjSDVBsI3w0DGbTPf6WpaupCwLgjiUtA,3959
362
362
  synapse/tests/test_lib_stormlib_log.py,sha256=1utRgbOcLYGE70fIBubffgTg-vFPq-Xqq6Y4I3QIw1c,2778
363
363
  synapse/tests/test_lib_stormlib_macro.py,sha256=LJwjSXmX5BuoBsfp3uOhUODCdSpt5_F92XuV6ImswtM,18514
364
364
  synapse/tests/test_lib_stormlib_mime.py,sha256=ozBJ70XxdrErOmycStWdh1xkBHVnM0BTPHvaP4faC0g,1510
@@ -379,7 +379,7 @@ synapse/tests/test_lib_stormlib_vault.py,sha256=pE_nDisXiyb-4Zm1hOrfsuEz3bjYwR8c
379
379
  synapse/tests/test_lib_stormlib_xml.py,sha256=asF-Y1LVpLoqHRK71_LWy727XJvsTNpf8qRSK-CynMM,3659
380
380
  synapse/tests/test_lib_stormlib_yaml.py,sha256=egTVXk8wW31V2msF__9WxP3THcqfysG1mYhc7hQG8rw,1358
381
381
  synapse/tests/test_lib_stormsvc.py,sha256=zeaC4De4_osl5uA2OgEp5M2CIQlW8d6PogMzFqEhfqg,43970
382
- synapse/tests/test_lib_stormtypes.py,sha256=7wQTvSFWzryDrUvfefS9Qz8O8z3t0DAJfAm6dLSigIM,321819
382
+ synapse/tests/test_lib_stormtypes.py,sha256=YnrqZaAjxQmaeIfmZ7qFT-Yf05Uv88VDvTQ5pNz5g-c,321644
383
383
  synapse/tests/test_lib_stormwhois.py,sha256=AWMUYEgZ5yqvDfPC_rM4evmhgfOA_Fv5aoTjmKmN1_0,4818
384
384
  synapse/tests/test_lib_structlog.py,sha256=BxglFqOsJFPE2RsZ8dQyTBCEe1frQrHWWXmUBO2fPJs,3898
385
385
  synapse/tests/test_lib_task.py,sha256=UQi14LdQ0rxDRCSy4TAxyq2OXDOXPQqnvp-nCK_aoBE,2454
@@ -389,7 +389,7 @@ synapse/tests/test_lib_trigger.py,sha256=IxKkVxfQLrCz6Qy6yIrLw5-57KmTmuE6rqKztcj
389
389
  synapse/tests/test_lib_types.py,sha256=4hC-NmKh_8oG-vrV7dxg62yN1sGrV7g3uV6P0VF2H38,78350
390
390
  synapse/tests/test_lib_urlhelp.py,sha256=7H_IY0dNQPVV17iuL9KK7Q128A3_J4sRzJ573D5RpQc,3747
391
391
  synapse/tests/test_lib_version.py,sha256=yDczjNi60hXXNZ-pYVntDblGNcekFZU6DdDsjUTkGtM,8164
392
- synapse/tests/test_lib_view.py,sha256=T1oUzJ0y6o9HAHU5pXp_9bWVbZpFqw90yF42ihcj9Pk,41192
392
+ synapse/tests/test_lib_view.py,sha256=jljS79RvgD2owpPotIXvuG_9IwwmLt3t8g2MkbIsBco,41728
393
393
  synapse/tests/test_lookup_iso3166.py,sha256=Xd2K0r0P5s-Towx_3qjDbJRd16Gr-ItMTIkYn0OU-Rk,375
394
394
  synapse/tests/test_lookup_phonenum.py,sha256=t9lWLGtalmDYVH5C0JMC1E8QdtO4AGW4F8l4jekSJeE,290
395
395
  synapse/tests/test_mindmeld.py,sha256=TiijGH7wX2zdXIFSBUlN40CPOvYaFlw6Wxi66XZuB_M,26
@@ -408,13 +408,13 @@ synapse/tests/test_model_geospace.py,sha256=8ATsx662mrcKzurMpQGbshnQPYOWqO7wxOWp
408
408
  synapse/tests/test_model_gov_cn.py,sha256=FnfKNM_wnvmScLm4cYFSQXZ21kVaTPPDusiCD79awBA,675
409
409
  synapse/tests/test_model_gov_intl.py,sha256=mHYK056C2R0aDH-5-TnUxtH0ZlKnEOoSd9ODIMasmow,780
410
410
  synapse/tests/test_model_gov_us.py,sha256=kvZ9DudBrbKtZmqGm8X-b_IOw4oJ7XZMnvTgiDkzsrY,1525
411
- synapse/tests/test_model_inet.py,sha256=qgLatbaWdxQpRmSiXmOf31tNRZsPILOq7sQ4ErD_uE0,156348
411
+ synapse/tests/test_model_inet.py,sha256=Q6z0mC0yr-F57BryaxcvKahwIFEd9ULVnefBO0bH-aM,159269
412
412
  synapse/tests/test_model_infotech.py,sha256=utLzSeQc7ZOcC0HrXPkMh8pUmustP_Kb6u19EkUjHr8,114072
413
413
  synapse/tests/test_model_language.py,sha256=49stF1B8_EwWJB67Xa5VXCG563Zfbr6S85iKN9Iom48,3046
414
414
  synapse/tests/test_model_material.py,sha256=Hkd8BJh6FdQE0RuFMV2NO6fGqw9kOCb5AeIuTYtwCEM,2723
415
415
  synapse/tests/test_model_math.py,sha256=x-rHBfm-59ueZdHXXzSi53eshldvVURoJeLeexWTL2U,826
416
416
  synapse/tests/test_model_media.py,sha256=OhMb3OwmZ7hXfoQYGeUBlnsqIk0sAohSodCLML2_yVk,2655
417
- synapse/tests/test_model_orgs.py,sha256=DTCjdRi8lyHLIaEcK8X-F-sBPp2vbUllJBBWInE5cew,47402
417
+ synapse/tests/test_model_orgs.py,sha256=UKx0CBScjAir2R1L1Ev5MFNp1Wutc8Nv0D5xlafF2uw,47699
418
418
  synapse/tests/test_model_person.py,sha256=CKfOtp7iCPAHQEfjlduDxPXLbFbi2LdVqExRyVwoxAc,19170
419
419
  synapse/tests/test_model_planning.py,sha256=U2kkE0uBO6CqtTfy7wlnhEIu_NFdSri4I_I5b-mRjBE,5615
420
420
  synapse/tests/test_model_proj.py,sha256=hCuM-CTyCAvqVPy7klP6NXOEtgJ61OyyT0x8mcJsjns,23238
@@ -442,7 +442,7 @@ synapse/tests/test_tools_csvtool.py,sha256=mZWZgHYD7S7eQ_SlBczS3UufuAgdOFE0ccq4I
442
442
  synapse/tests/test_tools_docker_validate.py,sha256=iFkbJE98au96a3u9NTCukvebXfbh1WsacuuvtgVNLTU,3667
443
443
  synapse/tests/test_tools_easycert.py,sha256=K3Sf8E5mDdL19uMFi55OYyzH_hvP3R3Z1XqCJlMxQLw,8854
444
444
  synapse/tests/test_tools_feed.py,sha256=a-kR3UvaitKzMSH_cXQZnbbfz_39Evpf1SmOlj6Me4c,6082
445
- synapse/tests/test_tools_genpkg.py,sha256=BZ_3WLtEKbclANzHrbKIwiEPTW8VH9MsIFent4BfcF8,12898
445
+ synapse/tests/test_tools_genpkg.py,sha256=u68vdSzmzZDzniA_7uXOT_dsTyFWFp1SNvKE6pd8-4o,13183
446
446
  synapse/tests/test_tools_guid.py,sha256=9NgdtIDMta9qwM8vsU5Gckv0llBibNXaEv0zpUrBPX8,314
447
447
  synapse/tests/test_tools_healthcheck.py,sha256=VdOoDUG1XtsOH3jyV-2Z2DbEeWKs6o2rty5Gy67aCX4,3543
448
448
  synapse/tests/test_tools_hiveload.py,sha256=d-2cCVNOFGpUcW2aO6gY_HcVgL9M0rTxlc8HfCkcZCI,3992
@@ -461,7 +461,7 @@ synapse/tests/test_tools_storm.py,sha256=xCDr3RumtBpFsxq0BhI0rRd6S83zoFI0oHeb6Vl
461
461
  synapse/tests/test_utils.py,sha256=L77-3no2UIZcBFx9kI2j-uUidILGPNUpnLiytayB0ig,9948
462
462
  synapse/tests/test_utils_getrefs.py,sha256=Cv0LT0DF-tCGwBmOXsYUVNIJdXQA73yRBgdSWxFL3oA,2623
463
463
  synapse/tests/test_utils_stormcov.py,sha256=H9p1vFH8kNE6qMLrGzSV0eH7KOgdZFh7QuarFe47FtU,6149
464
- synapse/tests/utils.py,sha256=8baLTq_GK3NNUj_LCdZY8fdthV1-ukNCs96Widn1fXw,78536
464
+ synapse/tests/utils.py,sha256=C7zqziOYwnX1samDcccDJZSaEg5L9_MjKLZ_MIrRy-o,78676
465
465
  synapse/tests/files/TestUtilsGetrefs.test_basics.yaml,sha256=Ch8cEGFYfDUCZTEvzAqW5Ir79OnYb49pq4i9OJ7K9T0,8257
466
466
  synapse/tests/files/__init__.py,sha256=G0DpSelVbC5S6PncHNL3QjgFvjCfaq7Kb1GgksJgEO4,1774
467
467
  synapse/tests/files/cpedata.json,sha256=e_wajnxn4ZClQ3-hwlOxK-2MWzLQwrqgtWVUV5dUVF4,13799445
@@ -529,7 +529,7 @@ synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml,sha256=zoN8HxrO1QNumYZJy
529
529
  synapse/tests/files/testcore/cell.yaml,sha256=fBUjBfX1L-0nGQD-VhLMy_IjrDepI9zRzbmgsVFJSYY,46
530
530
  synapse/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
531
531
  synapse/tools/apikey.py,sha256=K9EbxMXGVU3oQ45vS_-CuMCUbdyTzsO4C1P7XIp4f6U,3624
532
- synapse/tools/autodoc.py,sha256=-lH4TtIS3LCfSaxZrTuiANZZSRWkPFgXQN-XP8UVKas,35581
532
+ synapse/tools/autodoc.py,sha256=pQoNrOIDim1p-lxqDfmE8211fLqQIXKaMp1qJtMiemg,35788
533
533
  synapse/tools/axon2axon.py,sha256=lM3AOxKGdGwQ3XsEj-pyUjZ04s2rj0qSu6MlHCHhCWw,1872
534
534
  synapse/tools/backup.py,sha256=Cz3OSaYMRND7gE55FdyjrBr3C1_qd68yJ23O4-mukCM,5969
535
535
  synapse/tools/cellauth.py,sha256=-i6Fq2P9e-cXf69SWGnVc2TwGoW-vHED3D3oNEgTSog,12239
@@ -538,7 +538,7 @@ synapse/tools/cmdr.py,sha256=xnW_EAzQ7fnpWZ0SpNvthDBCcTn2ahMXxveBd4AuSd4,1789
538
538
  synapse/tools/csvtool.py,sha256=mqCXRR2JLI4Xz9ScPR6sYkRAKfhTP2yWQFBWAk7vg24,7631
539
539
  synapse/tools/easycert.py,sha256=naoYnWfg0m6NrBraKUVk3FK5OW53yVBZH8rv6RrXRH8,4531
540
540
  synapse/tools/feed.py,sha256=ohqhWAPaLCTj7oVl1_Lom8xvYvExQnFs3EkuzEbQfgk,6063
541
- synapse/tools/genpkg.py,sha256=Gs1Y1ft_A6smHRyYwtl5qz0wBVsXthBAhtICGs3r-SM,10185
541
+ synapse/tools/genpkg.py,sha256=PjbCtkIEgjTr0HQPUBYMA5CsRfo5lBI9RN9k7E5wxNg,10511
542
542
  synapse/tools/guid.py,sha256=UCBFqUSBdXt5WJYcoP0Vme_oOUXU040DZJEpay4uZHk,300
543
543
  synapse/tools/healthcheck.py,sha256=KfZDyU-VPzUhg1F4VLl5o7qUbmwMG2Ubu4sWoXlD0wk,3532
544
544
  synapse/tools/json2mpk.py,sha256=Q8RtWw4xav6WiCg5ty8ctTm-O1oDbsybFuXRacjrN28,1384
@@ -549,7 +549,7 @@ synapse/tools/promote.py,sha256=x_pB4PqFtDsn-oTZ637OMyijo0XuXTsOiOPXk-0H-Pc,1854
549
549
  synapse/tools/pullfile.py,sha256=JdealCDQetOdgB_MuhnhZ2OeaaVqva3LsJKx6nLScT4,2259
550
550
  synapse/tools/pushfile.py,sha256=D3r0zQsVzAGLqKoe-6LQuQkmAGiRzwwrgbMTFHnmK9o,4420
551
551
  synapse/tools/reload.py,sha256=QayPeftB4JEyVEKKp5ijeveRx0DuGUuNzu8fTvZKR-o,2895
552
- synapse/tools/rstorm.py,sha256=E6ggQYlsD7j4VqwunrVBVRfsLJpVcTBCigZfu3PWJqA,1057
552
+ synapse/tools/rstorm.py,sha256=AqW2qQ3bI5ZZCBVq2IZlpyAN-pn6gXurXDGXEtc-8RA,1275
553
553
  synapse/tools/snapshot.py,sha256=ZoP-VRr9CAAorbGevrHObIx-FjwhjUiuMZw26b2Er2s,2372
554
554
  synapse/tools/storm.py,sha256=i8Y13Ovhf9ksCrSLjpe6sPMODY50lMC03rni7PmMrAk,20967
555
555
  synapse/tools/aha/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -619,8 +619,8 @@ synapse/vendor/xrpl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
619
619
  synapse/vendor/xrpl/tests/test_codec.py,sha256=Zwq6A5uZUK_FWDL3BA932c5b-rL3hnC6efobWHSLC4o,6651
620
620
  synapse/vendor/xrpl/tests/test_main.py,sha256=kZQwWk7I6HrP-PMvLdsUUN4POvWD9I-iXDHOwdeF090,4299
621
621
  synapse/vendor/xrpl/tests/test_main_test_cases.py,sha256=vTlUM4hJD2Hd2wCIdd9rfsvcMZZZQmNHWdCTTFeGz2Y,4221
622
- synapse-2.210.0.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
623
- synapse-2.210.0.dist-info/METADATA,sha256=zyTIVaDdYthQGkHbjLg3cLI41iQK5b8abepOeGBqor4,4623
624
- synapse-2.210.0.dist-info/WHEEL,sha256=0C6Q6ZHEVcP8W8MQkRg-CTqf9ao0-GRLLM0uaK5MIlg,93
625
- synapse-2.210.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
626
- synapse-2.210.0.dist-info/RECORD,,
622
+ synapse-2.212.0.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
623
+ synapse-2.212.0.dist-info/METADATA,sha256=uu4iQLjVHqvjrVyCxz7C-OP7Y6Ruh4G-KHxKxYh9xcg,4623
624
+ synapse-2.212.0.dist-info/WHEEL,sha256=cRWFNt_CJSuf6BnJKAdKunDXUJxjAbWvbt_kstDCs1I,93
625
+ synapse-2.212.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
626
+ synapse-2.212.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py311-none-any
5
5