synapse 2.212.0__py311-none-any.whl → 2.213.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/cell.py CHANGED
@@ -3495,13 +3495,16 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
3495
3495
  await user.addRule(rule)
3496
3496
 
3497
3497
  @contextlib.asynccontextmanager
3498
- async def getLocalProxy(self, share='*', user='root'):
3498
+ async def getLocalProxy(self, share=None, user='root'):
3499
3499
  url = self.getLocalUrl(share=share, user=user)
3500
3500
  prox = await s_telepath.openurl(url)
3501
3501
  yield prox
3502
3502
 
3503
- def getLocalUrl(self, share='*', user='root'):
3504
- return f'cell://{user}@{self.dirn}:{share}'
3503
+ def getLocalUrl(self, share=None, user='root'):
3504
+ url = f'cell://{user}@{self.dirn}'
3505
+ if share is not None:
3506
+ url = f'{url}:{share}'
3507
+ return url
3505
3508
 
3506
3509
  def _initCellConf(self, conf):
3507
3510
  '''
synapse/lib/scrape.py CHANGED
@@ -65,6 +65,8 @@ inverse_prefixs = {
65
65
  '<': '>',
66
66
  '{': '}',
67
67
  '(': ')',
68
+ '\u2018': '\u2019', # Unicode Left Single Quotation Mark and Right Single Quotation Mark
69
+ '\u201c': '\u201d', # Unicode Left Double Quotation Mark and Right Double Quotation Mark
68
70
  }
69
71
 
70
72
  cve_dashes = ''.join(('-',) + s_chop.unicode_dashes)
@@ -287,7 +289,7 @@ def url_scheme_check(match: regex.Match):
287
289
  scrape_types = [ # type: ignore
288
290
  ('file:path', linux_path_regex, {'callback': linux_path_check, 'flags': regex.VERBOSE}),
289
291
  ('file:path', windows_path_regex, {'callback': windows_path_check, 'flags': regex.VERBOSE}),
290
- ('inet:url', r'(?P<prefix>[\\{<\(\[]?)(?P<valu>[a-zA-Z][a-zA-Z0-9]*://(?(?=[,.]+[ \'\"\t\n\r\f\v])|[^ \'\"\t\n\r\f\v])+)',
292
+ ('inet:url', r'(?P<prefix>[‘“\\{<\(\[]?)(?P<valu>[a-zA-Z][a-zA-Z0-9]*://(?(?=[,.]+[ \'\"\t\n\r\f\v])|[^ \'\"\t\n\r\f\v])+)',
291
293
  {'callback': url_scheme_check}),
292
294
  ('inet:url', r'(["\'])?(?P<valu>\\[^\n]+?)(?(1)\1|\s)', {'callback': unc_path_check}),
293
295
  ('inet:email', r'(?=(?:[^a-z0-9_.+-]|^)(?P<valu>[a-z0-9_\.\-+]{1,256}@(?:[a-z0-9_-]{1,63}\.){1,10}(?:%s))(?:[^a-z0-9_.-]|[.\s]|$))' % tldcat, {}),
synapse/lib/snap.py CHANGED
@@ -1325,13 +1325,13 @@ class Snap(s_base.Base):
1325
1325
 
1326
1326
  if etyp == s_layer.EDIT_NODE_ADD:
1327
1327
  node.bylayer['ndef'] = wlyr.iden
1328
- callbacks.append((node.form.wasAdded, (node,), {}))
1329
- callbacks.append((self.view.runNodeAdd, (node,), {}))
1328
+ callbacks.append((node.form.wasAdded, (node,)))
1329
+ callbacks.append((self.view.runNodeAdd, (node,)))
1330
1330
  continue
1331
1331
 
1332
1332
  if etyp == s_layer.EDIT_NODE_DEL:
1333
- callbacks.append((node.form.wasDeleted, (node,), {}))
1334
- callbacks.append((self.view.runNodeDel, (node,), {}))
1333
+ callbacks.append((node.form.wasDeleted, (node,)))
1334
+ callbacks.append((self.view.runNodeDel, (node,)))
1335
1335
  continue
1336
1336
 
1337
1337
  if etyp == s_layer.EDIT_PROP_SET:
@@ -1346,8 +1346,8 @@ class Snap(s_base.Base):
1346
1346
  node.props[name] = valu
1347
1347
  node.bylayer['props'][name] = wlyr.iden
1348
1348
 
1349
- callbacks.append((prop.wasSet, (node, oldv), {}))
1350
- callbacks.append((self.view.runPropSet, (node, prop, oldv), {}))
1349
+ callbacks.append((prop.wasSet, (node, oldv)))
1350
+ callbacks.append((self.view.runPropSet, (node, prop, oldv)))
1351
1351
  continue
1352
1352
 
1353
1353
  if etyp == s_layer.EDIT_PROP_DEL:
@@ -1362,8 +1362,8 @@ class Snap(s_base.Base):
1362
1362
  node.props.pop(name, None)
1363
1363
  node.bylayer['props'].pop(name, None)
1364
1364
 
1365
- callbacks.append((prop.wasDel, (node, oldv), {}))
1366
- callbacks.append((self.view.runPropSet, (node, prop, oldv), {}))
1365
+ callbacks.append((prop.wasDel, (node, oldv)))
1366
+ callbacks.append((self.view.runPropSet, (node, prop, oldv)))
1367
1367
  continue
1368
1368
 
1369
1369
  if etyp == s_layer.EDIT_TAG_SET:
@@ -1373,8 +1373,7 @@ class Snap(s_base.Base):
1373
1373
  node.tags[tag] = valu
1374
1374
  node.bylayer['tags'][tag] = wlyr.iden
1375
1375
 
1376
- callbacks.append((self.view.runTagAdd, (node, tag, valu), {}))
1377
- callbacks.append((self.wlyr.fire, ('tag:add', ), {'tag': tag, 'node': node.iden()}))
1376
+ callbacks.append((self.view.runTagAdd, (node, tag, valu)))
1378
1377
  continue
1379
1378
 
1380
1379
  if etyp == s_layer.EDIT_TAG_DEL:
@@ -1384,8 +1383,7 @@ class Snap(s_base.Base):
1384
1383
  node.tags.pop(tag, None)
1385
1384
  node.bylayer['tags'].pop(tag, None)
1386
1385
 
1387
- callbacks.append((self.view.runTagDel, (node, tag, oldv), {}))
1388
- callbacks.append((self.wlyr.fire, ('tag:del', ), {'tag': tag, 'node': node.iden()}))
1386
+ callbacks.append((self.view.runTagDel, (node, tag, oldv)))
1389
1387
  continue
1390
1388
 
1391
1389
  if etyp == s_layer.EDIT_TAGPROP_SET:
@@ -1420,14 +1418,14 @@ class Snap(s_base.Base):
1420
1418
  if etyp == s_layer.EDIT_EDGE_ADD:
1421
1419
  verb, n2iden = parms
1422
1420
  n2 = await self.getNodeByBuid(s_common.uhex(n2iden))
1423
- callbacks.append((self.view.runEdgeAdd, (node, verb, n2), {}))
1421
+ callbacks.append((self.view.runEdgeAdd, (node, verb, n2)))
1424
1422
 
1425
1423
  if etyp == s_layer.EDIT_EDGE_DEL:
1426
1424
  verb, n2iden = parms
1427
1425
  n2 = await self.getNodeByBuid(s_common.uhex(n2iden))
1428
- callbacks.append((self.view.runEdgeDel, (node, verb, n2), {}))
1426
+ callbacks.append((self.view.runEdgeDel, (node, verb, n2)))
1429
1427
 
1430
- [await func(*args, **kwargs) for (func, args, kwargs) in callbacks]
1428
+ [await func(*args) for (func, args) in callbacks]
1431
1429
 
1432
1430
  if actualedits:
1433
1431
  await self.fire('node:edits', edits=actualedits)
@@ -107,3 +107,6 @@ class SpooledSet(s_stormtypes.Set):
107
107
 
108
108
  async def value(self):
109
109
  return set([x async for x in self.valu])
110
+
111
+ async def bool(self):
112
+ return bool(len(self.valu))
synapse/lib/stormtypes.py CHANGED
@@ -4731,6 +4731,9 @@ class Str(Prim):
4731
4731
  return str(self) == str(othr)
4732
4732
  return False
4733
4733
 
4734
+ async def bool(self):
4735
+ return bool(self.valu)
4736
+
4734
4737
  @stormfunc(readonly=True)
4735
4738
  async def _methStrFind(self, valu):
4736
4739
  text = await tostr(valu)
@@ -4970,6 +4973,9 @@ class Bytes(Prim):
4970
4973
  return self.valu == othr.valu
4971
4974
  return False
4972
4975
 
4976
+ async def bool(self):
4977
+ return bool(self.valu)
4978
+
4973
4979
  async def _storm_copy(self):
4974
4980
  item = await s_coro.ornot(self.value)
4975
4981
  return s_msgpack.deepcopy(item, use_list=True)
@@ -5042,6 +5048,9 @@ class Dict(Prim):
5042
5048
  def __len__(self):
5043
5049
  return len(self.valu)
5044
5050
 
5051
+ async def bool(self):
5052
+ return bool(self.valu)
5053
+
5045
5054
  async def _storm_copy(self):
5046
5055
  item = await s_coro.ornot(self.value)
5047
5056
  return s_msgpack.deepcopy(item, use_list=True)
@@ -5194,6 +5203,9 @@ class Set(Prim):
5194
5203
  def __len__(self):
5195
5204
  return len(self.valu)
5196
5205
 
5206
+ async def bool(self):
5207
+ return bool(self.valu)
5208
+
5197
5209
  async def _methSetSize(self):
5198
5210
  return len(self)
5199
5211
 
@@ -5384,6 +5396,9 @@ class List(Prim):
5384
5396
  def __len__(self):
5385
5397
  return len(self.valu)
5386
5398
 
5399
+ async def bool(self):
5400
+ return bool(self.valu)
5401
+
5387
5402
  @stormfunc(readonly=True)
5388
5403
  async def _methListHas(self, valu):
5389
5404
  if valu in self.valu:
@@ -5519,6 +5534,9 @@ class Bool(Prim):
5519
5534
  def __hash__(self):
5520
5535
  return hash((self._storm_typename, self.value()))
5521
5536
 
5537
+ async def bool(self):
5538
+ return bool(self.valu)
5539
+
5522
5540
  @registry.registerType
5523
5541
  class Number(Prim):
5524
5542
  '''
synapse/lib/types.py CHANGED
@@ -651,9 +651,10 @@ class Hex(Type):
651
651
 
652
652
  def postTypeInit(self):
653
653
  self._size = self.opts.get('size')
654
+ self._zeropad = self.opts.get('zeropad')
654
655
 
655
656
  # This is for backward compat with v2.142.x where zeropad was a bool
656
- self._zeropad = self.opts.get('zeropad')
657
+ # TODO: Remove this compat check in 3xx
657
658
  if isinstance(self._zeropad, bool):
658
659
  if self._zeropad:
659
660
  self._zeropad = self._size
@@ -678,6 +679,7 @@ class Hex(Type):
678
679
  if self._size:
679
680
  self._zeropad = min(self._zeropad, self._size)
680
681
 
682
+ self.setNormFunc(int, self._normPyInt)
681
683
  self.setNormFunc(str, self._normPyStr)
682
684
  self.setNormFunc(bytes, self._normPyBytes)
683
685
  self.storlifts.update({
@@ -703,21 +705,47 @@ class Hex(Type):
703
705
  return self._storLiftNorm(cmpr, valu)
704
706
 
705
707
  def _storLiftPref(self, cmpr, valu):
708
+ if not isinstance(valu, str):
709
+ vtyp = type(valu).__name__
710
+ mesg = f'Hex prefix lift values must be str, not {vtyp}.'
711
+ raise s_exc.BadTypeValu(mesg=mesg, type=vtyp, name=self.name)
712
+
706
713
  valu = self._preNormHex(valu)
707
714
  return (
708
715
  ('^=', valu, self.stortype),
709
716
  )
710
717
 
718
+ def _normPyInt(self, valu):
719
+ extra = 7
720
+ if valu < 0:
721
+ # Negative values need a little more space to store the sign
722
+ extra = 8
723
+
724
+ bytelen = max((valu.bit_length() + extra) // 8, self._zeropad // 2)
725
+
726
+ try:
727
+ byts = valu.to_bytes(bytelen, 'big', signed=(valu < 0))
728
+ hexval = s_common.ehex(byts)
729
+
730
+ except OverflowError as e: # pragma: no cover
731
+ mesg = f'Invalid width for {valu}.'
732
+ raise s_exc.BadTypeValu(mesg=mesg, name=self.name)
733
+
734
+ if self._size and len(hexval) != self._size:
735
+ raise s_exc.BadTypeValu(valu=valu, reqwidth=self._size, name=self.name,
736
+ mesg='Invalid width.')
737
+
738
+ return hexval, {}
739
+
711
740
  def _normPyStr(self, valu):
712
- valu = valu.strip().lower()
713
- if valu.startswith('0x'):
714
- valu = valu[2:]
741
+ valu = self._preNormHex(valu)
715
742
 
716
- valu = valu.replace(' ', '').replace(':', '')
743
+ if len(valu) % 2 != 0:
744
+ valu = f'0{valu}'
717
745
 
718
746
  if not valu:
719
- raise s_exc.BadTypeValu(valu=valu, name='hex',
720
- mesg='No string left after stripping')
747
+ raise s_exc.BadTypeValu(valu=valu, name=self.name,
748
+ mesg='No string left after stripping.')
721
749
 
722
750
  if self._zeropad and len(valu) < self._zeropad:
723
751
  padlen = self._zeropad - len(valu)
@@ -732,7 +760,7 @@ class Hex(Type):
732
760
 
733
761
  if self._size and len(valu) != self._size:
734
762
  raise s_exc.BadTypeValu(valu=valu, reqwidth=self._size, name=self.name,
735
- mesg='invalid width')
763
+ mesg='Invalid width.')
736
764
  return valu, {}
737
765
 
738
766
  def _normPyBytes(self, valu):
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, 212, 0)
226
+ version = (2, 213, 0)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = '68ec8184b0e2469fd1ef30cbeb29f5989c60c768'
228
+ commit = 'e3d843a470b137e9d2094b69a7878101afb4f8b1'
synapse/telepath.py CHANGED
@@ -1605,8 +1605,6 @@ async def openinfo(info):
1605
1605
  # cell://rel/path/to/celldir:share
1606
1606
  path = info.get('path')
1607
1607
 
1608
- name = info.get('name', '*')
1609
-
1610
1608
  # support cell://<relpath>/<to>/<cell>
1611
1609
  # by detecting host...
1612
1610
  host = info.get('host')
@@ -1614,9 +1612,12 @@ async def openinfo(info):
1614
1612
  path = path.strip('/')
1615
1613
  path = os.path.join(host, path)
1616
1614
 
1615
+ name = '*'
1617
1616
  if ':' in path:
1618
1617
  path, name = path.split(':')
1619
1618
 
1619
+ name = info.get('name', name)
1620
+
1620
1621
  full = os.path.join(path, 'sock')
1621
1622
  link = await s_link.unixconnect(full)
1622
1623
 
@@ -1626,6 +1627,7 @@ async def openinfo(info):
1626
1627
  path = info.get('path')
1627
1628
  if ':' in path:
1628
1629
  path, name = path.split(':')
1630
+ name = info.get('name', name)
1629
1631
  link = await s_link.unixconnect(path)
1630
1632
 
1631
1633
  elif scheme in ('tcp', 'ssl'):
@@ -194,6 +194,18 @@ testDataSchema_v1 = {
194
194
 
195
195
  class CellTest(s_t_utils.SynTest):
196
196
 
197
+ async def test_cell_getLocalUrl(self):
198
+ with self.getTestDir() as dirn:
199
+ async with self.getTestCell(dirn=dirn) as cell:
200
+ url = cell.getLocalUrl()
201
+ self.eq(url, f'cell://root@{dirn}')
202
+
203
+ url = cell.getLocalUrl(share='*/layer')
204
+ self.eq(url, f'cell://root@{dirn}:*/layer')
205
+
206
+ url = cell.getLocalUrl(user='lowuser', share='*/view')
207
+ self.eq(url, f'cell://lowuser@{dirn}:*/view')
208
+
197
209
  async def test_cell_drive(self):
198
210
 
199
211
  with self.getTestDir() as dirn:
@@ -2580,10 +2592,10 @@ class CellTest(s_t_utils.SynTest):
2580
2592
  viewiden = view.get('iden')
2581
2593
 
2582
2594
  opts = {'view': viewiden}
2583
- with self.getLoggerStream('synapse.lib.lmdbslab',
2595
+ with self.getAsyncLoggerStream('synapse.lib.lmdbslab',
2584
2596
  'Error during slab resize callback - foo') as stream:
2585
- nodes = await core.stormlist('for $x in $lib.range(200) {[inet:ipv4=$x]}', opts=opts)
2586
- self.true(stream.wait(1))
2597
+ msgs = await core.stormlist('for $x in $lib.range(200) {[test:int=$x]}', opts=opts)
2598
+ self.true(await stream.wait(timeout=30))
2587
2599
 
2588
2600
  async with self.getTestCore() as core:
2589
2601
 
@@ -203,6 +203,10 @@ A bunch of prefixed urls
203
203
 
204
204
  https://c2server.com/evil/malware/doesnot[care+]aboutstandards{at-all}
205
205
 
206
+ beep “https://unicode.doublequote.org/test.php” boop
207
+
208
+ x ‘https://unicode.singlequote.org/test.php’ z
209
+
206
210
  '''
207
211
 
208
212
  data3 = '''
@@ -725,6 +729,8 @@ class ScrapeTest(s_t_utils.SynTest):
725
729
  nodes.remove(('inet:url', 'https://www.thingspace.com/blog/giggles.html'))
726
730
  nodes.remove(('inet:url', 'https://testme.org/test.php'))
727
731
  nodes.remove(('inet:url', 'https://c2server.com/evil/malware/doesnot[care+]aboutstandards{at-all}'))
732
+ nodes.remove(('inet:url', 'https://unicode.doublequote.org/test.php'))
733
+ nodes.remove(('inet:url', 'https://unicode.singlequote.org/test.php'))
728
734
 
729
735
  nodes = list(s_scrape.scrape(btc_addresses))
730
736
  self.len(11, nodes)
@@ -1736,6 +1736,8 @@ class StormTest(s_t_utils.SynTest):
1736
1736
  self.stormHasNoErr(await core.stormlist('merge --diff', opts=altview))
1737
1737
 
1738
1738
  oldn = await core.nodes('[ ou:name=readonly ]', opts=altview)
1739
+ # need to pause a moment so the created times differ
1740
+ await asyncio.sleep(0.01)
1739
1741
  newn = await core.nodes('[ ou:name=readonly ]')
1740
1742
  self.ne(oldn[0].props['.created'], newn[0].props['.created'])
1741
1743
 
@@ -124,6 +124,17 @@ class StormlibSpooledTest(s_test.SynTest):
124
124
  msgs = await core.stormlist(q, opts={'vars': {'items': [True, 'neato', False, 9001]}})
125
125
  self.stormIsInPrint("The set is {'neato'}", msgs)
126
126
 
127
+ q = '''
128
+ $set = $lib.spooled.set()
129
+ for $v in $lib.range($n) {
130
+ $set.add($v)
131
+ }
132
+ if $set { return ( (true) ) }
133
+ else { return ( (false) ) }
134
+ '''
135
+ self.false(await core.callStorm(q, opts={'vars': {'n': 0}}))
136
+ self.true(await core.callStorm(q, opts={'vars': {'n': 1}}))
137
+
127
138
  # force a fallback
128
139
  q = '''
129
140
  $set = $lib.spooled.set()
@@ -1902,6 +1902,17 @@ class StormTypesTest(s_test.SynTest):
1902
1902
  self.len(1, nodes)
1903
1903
  self.eq(nodes[0].ndef, ('test:str', 'asdf'))
1904
1904
 
1905
+ q = '''
1906
+ $set = $lib.set()
1907
+ for $v in $lib.range($n) {
1908
+ $set.add($v)
1909
+ }
1910
+ if $set { return ( (true) ) }
1911
+ else { return ( (false) ) }
1912
+ '''
1913
+ self.false(await core.callStorm(q, opts={'vars': {'n': 0}}))
1914
+ self.true(await core.callStorm(q, opts={'vars': {'n': 1}}))
1915
+
1905
1916
  # test that some of the more complex objects we've got uniq down properly
1906
1917
  # Bool
1907
1918
  q = '''
@@ -338,42 +338,80 @@ class TypesTest(s_t_utils.SynTest):
338
338
  t = core.model.type('test:hexa')
339
339
  # Test norming to index values
340
340
  testvectors = [
341
- ('0C', b'\x0c'),
342
- ('0X010001', b'\x01\x00\x01'),
343
- ('0FfF', b'\x0f\xff'),
344
- ('f12A3e', b'\xf1\x2a\x3e'),
345
- (b'\x01\x00\x01', b'\x01\x00\x01'),
341
+ (0xc, '0c'),
342
+ (-0xc, 'f4'),
343
+ ('c', '0c'),
344
+ ('0c', '0c'),
345
+ ('-0c', (s_exc.BadTypeValu, 'Non-hexadecimal digit found')),
346
+ ('0x0c', '0c'),
347
+ ('-0x0c', (s_exc.BadTypeValu, 'Non-hexadecimal digit found')),
348
+ (b'\x0c', '0c'),
349
+
350
+ (0x10001, '010001'),
351
+ ('10001', '010001'),
352
+ ('0x10001', '010001'),
353
+ ('010001', '010001'),
354
+ ('0x010001', '010001'),
355
+ (b'\x01\x00\x01', '010001'),
356
+
357
+ (0xFfF, '0fff'),
358
+ ('FfF', '0fff'),
359
+ ('0FfF', '0fff'),
360
+ ('0x0FfF', '0fff'),
361
+ (b'\x0F\xfF', '0fff'),
362
+
346
363
  (b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~',
347
- b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~'),
348
- (65537, s_exc.BadTypeValu),
364
+ 'd41d8cd98f00b204e9800998ecf8427e'),
365
+
366
+ ('01\udcfe0101', (s_exc.BadTypeValu, 'string argument should contain only ASCII characters')),
349
367
  ]
350
368
 
351
- for v, b in testvectors:
352
- if isinstance(b, bytes):
353
- r, subs = t.norm(v)
354
- self.isinstance(r, str)
369
+ for valu, expected in testvectors:
370
+ if isinstance(expected, str):
371
+ norm, subs = t.norm(valu)
372
+ self.isinstance(norm, str)
355
373
  self.eq(subs, {})
374
+ self.eq(norm, expected)
356
375
  else:
357
- self.raises(b, t.norm, v)
376
+ etype, mesg = expected
377
+ with self.raises(etype) as exc:
378
+ t.norm(valu)
379
+ self.eq(exc.exception.get('mesg'), mesg, f'{valu=}')
358
380
 
359
- # width = 4
381
+ # size = 4
360
382
  testvectors4 = [
361
- ('d41d', b'\xd4\x1d'),
362
- (b'\x10\x01', b'\x10\x01'),
363
- ('01', s_exc.BadTypeValu),
364
- ('010101', s_exc.BadTypeValu),
365
- (b'\x10\x01\xff', s_exc.BadTypeValu),
366
- (b'\xff', s_exc.BadTypeValu),
367
- ('01\udcfe0101', s_exc.BadTypeValu),
383
+ (0xc, (s_exc.BadTypeValu, 'Invalid width.')),
384
+ (-0xc, (s_exc.BadTypeValu, 'Invalid width.')),
385
+ ('0c', (s_exc.BadTypeValu, 'Invalid width.')),
386
+ ('0x0c', (s_exc.BadTypeValu, 'Invalid width.')),
387
+ (b'\x0c', (s_exc.BadTypeValu, 'Invalid width.')),
388
+
389
+ (0xd41d, 'd41d'),
390
+ ('d41d', 'd41d'),
391
+ ('0xd41d', 'd41d'),
392
+ (b'\xd4\x1d', 'd41d'),
393
+
394
+ (0x10001, (s_exc.BadTypeValu, 'Invalid width.')),
395
+ ('10001', (s_exc.BadTypeValu, 'Invalid width.')),
396
+ ('0x10001', (s_exc.BadTypeValu, 'Invalid width.')),
397
+ ('010001', (s_exc.BadTypeValu, 'Invalid width.')),
398
+ ('0x010001', (s_exc.BadTypeValu, 'Invalid width.')),
399
+ (b'\x01\x00\x01', (s_exc.BadTypeValu, 'Invalid width.')),
400
+
401
+ ('01\udcfe0101', (s_exc.BadTypeValu, 'string argument should contain only ASCII characters')),
368
402
  ]
369
403
  t = core.model.type('test:hex4')
370
- for v, b in testvectors4:
371
- if isinstance(b, bytes):
372
- r, subs = t.norm(v)
373
- self.isinstance(r, str)
404
+ for valu, expected in testvectors4:
405
+ if isinstance(expected, str):
406
+ norm, subs = t.norm(valu)
407
+ self.isinstance(norm, str)
374
408
  self.eq(subs, {})
409
+ self.eq(norm, expected)
375
410
  else:
376
- self.raises(b, t.norm, v)
411
+ etype, mesg = expected
412
+ with self.raises(etype) as exc:
413
+ t.norm(valu)
414
+ self.eq(exc.exception.get('mesg'), mesg, f'{valu=}')
377
415
 
378
416
  # size = 8, zeropad = True
379
417
  testvectors = [
@@ -384,29 +422,45 @@ class TypesTest(s_t_utils.SynTest):
384
422
  ('0X12345678', '12345678'),
385
423
  ('56:78', '00005678'),
386
424
  ('12:34:56:78', '12345678'),
387
- ('::', s_exc.BadTypeValu),
388
- ('0x::', s_exc.BadTypeValu),
389
- ('0x1234qwer', s_exc.BadTypeValu),
390
- ('0x123456789a', s_exc.BadTypeValu),
391
- ('::', s_exc.BadTypeValu),
425
+ (-1, 'ffffffff'),
426
+ (-0xff, 'ffffff01'),
427
+ (1234, '000004d2'),
428
+ (0x12345678, '12345678'),
429
+ (0x123456789a, (s_exc.BadTypeValu, 'Invalid width.')),
430
+ ('::', (s_exc.BadTypeValu, 'No string left after stripping.')),
431
+ ('0x::', (s_exc.BadTypeValu, 'No string left after stripping.')),
432
+ ('0x1234qwer', (s_exc.BadTypeValu, 'Non-hexadecimal digit found')),
433
+ ('0x123456789a', (s_exc.BadTypeValu, 'Invalid width.')),
392
434
  (b'\x12', '00000012'),
393
435
  (b'\x12\x34', '00001234'),
394
436
  (b'\x12\x34\x56', '00123456'),
395
437
  (b'\x12\x34\x56\x78', '12345678'),
396
- (b'\x12\x34\x56\x78\x9a', s_exc.BadTypeValu),
438
+ (b'\x12\x34\x56\x78\x9a', (s_exc.BadTypeValu, 'Invalid width.')),
397
439
  ]
398
440
  t = core.model.type('test:hexpad')
399
- for v, b in testvectors:
400
- if isinstance(b, (str, bytes)):
401
- r, subs = t.norm(v)
402
- self.isinstance(r, str)
441
+ for valu, expected in testvectors:
442
+ if isinstance(expected, str):
443
+ norm, subs = t.norm(valu)
444
+ self.isinstance(norm, str)
403
445
  self.eq(subs, {})
404
- self.eq(r, b)
446
+ self.eq(norm, expected)
405
447
  else:
406
- self.raises(b, t.norm, v)
448
+ etype, mesg = expected
449
+ with self.raises(etype) as exc:
450
+ t.norm(valu)
451
+ self.eq(exc.exception.get('mesg'), mesg, f'{valu=}')
407
452
 
408
453
  # zeropad = 20
409
454
  testvectors = [
455
+ (-1, 'ffffffffffffffffffff'),
456
+ (-0xff, 'ffffffffffffffffff01'),
457
+ (0x12, '00000000000000000012'),
458
+ (0x123, '00000000000000000123'),
459
+ (0x1234, '00000000000000001234'),
460
+ (0x123456, '00000000000000123456'),
461
+ (0x12345678, '00000000000012345678'),
462
+ (0x123456789abcdef123456789abcdef, '123456789abcdef123456789abcdef'),
463
+ (-0x123456789abcdef123456789abcdef, 'edcba9876543210edcba9876543211'),
410
464
  ('0x12', '00000000000000000012'),
411
465
  ('0x123', '00000000000000000123'),
412
466
  ('0x1234', '00000000000000001234'),
@@ -421,14 +475,17 @@ class TypesTest(s_t_utils.SynTest):
421
475
  (b'\x12\x34\x56\x78\x9a\xbc\xde\xf1\x23\x45\x67\x89\xab\xcd\xef', '123456789abcdef123456789abcdef'),
422
476
  ]
423
477
  t = core.model.type('test:zeropad')
424
- for v, b in testvectors:
425
- if isinstance(b, (str, bytes)):
426
- r, subs = t.norm(v)
427
- self.isinstance(r, str)
478
+ for valu, expected in testvectors:
479
+ if isinstance(expected, str):
480
+ norm, subs = t.norm(valu)
481
+ self.isinstance(norm, str)
428
482
  self.eq(subs, {})
429
- self.eq(r, b)
483
+ self.eq(norm, expected)
430
484
  else:
431
- self.raises(b, t.norm, v)
485
+ etype, mesg = expected
486
+ with self.raises(etype) as exc:
487
+ t.norm(valu)
488
+ self.eq(exc.exception.get('mesg'), mesg, f'{valu=}')
432
489
 
433
490
  # Do some node creation and lifting
434
491
  nodes = await core.nodes('[test:hexa="01:00 01"]')
@@ -436,8 +493,19 @@ class TypesTest(s_t_utils.SynTest):
436
493
  node = nodes[0]
437
494
  self.eq(node.ndef, ('test:hexa', '010001'))
438
495
  self.len(1, await core.nodes('test:hexa=010001'))
496
+ self.len(1, await core.nodes('test:hexa=(0x10001)'))
439
497
  self.len(1, await core.nodes('test:hexa=$byts', opts={'vars': {'byts': b'\x01\x00\x01'}}))
440
498
 
499
+ nodes = await core.nodes('[test:hexa=(-10)]')
500
+ self.len(1, nodes)
501
+ self.eq(nodes[0].repr(), 'f6')
502
+
503
+ self.len(1, await core.nodes('test:hexa=(-10)'))
504
+
505
+ with self.raises(s_exc.BadTypeValu) as exc:
506
+ await core.callStorm('test:hexa^=(-10)')
507
+ self.eq(exc.exception.get('mesg'), 'Hex prefix lift values must be str, not int.')
508
+
441
509
  # Do some fancy prefix searches for test:hexa
442
510
  valus = ['deadb33f',
443
511
  'deadb33fb33f',
@@ -467,9 +535,25 @@ class TypesTest(s_t_utils.SynTest):
467
535
  self.len(1, await core.nodes('[test:hexa=0xf00fb33b00000000]'))
468
536
  self.len(1, await core.nodes('test:hexa=0xf00fb33b00000000'))
469
537
  self.len(1, await core.nodes('test:hexa^=0xf00fb33b'))
538
+ self.len(1, await core.nodes('test:hexa^=0xf00fb33'))
539
+
540
+ with self.raises(s_exc.BadTypeValu):
541
+ await core.nodes('test:hexa^=(0xf00fb33b)')
542
+
543
+ with self.raises(s_exc.BadTypeValu):
544
+ await core.nodes('test:hexa^=(0xf00fb33)')
470
545
 
471
546
  # Check creating and lifting zeropadded hex types
472
- self.len(3, await core.nodes('[test:zeropad=11 test:zeropad=0x22 test:zeropad=111]'))
547
+ q = '''
548
+ [
549
+ test:zeropad=11
550
+ test:zeropad=0x22
551
+ test:zeropad=111
552
+ test:zeropad=(0x33)
553
+ test:zeropad=(0x444)
554
+ ]
555
+ '''
556
+ self.len(5, await core.nodes(q))
473
557
  self.len(1, await core.nodes('test:zeropad=0x11'))
474
558
  self.len(1, await core.nodes('test:zeropad=0x111'))
475
559
  self.len(1, await core.nodes('test:zeropad=000000000011'))
@@ -479,6 +563,14 @@ class TypesTest(s_t_utils.SynTest):
479
563
  self.len(1, await core.nodes('test:zeropad=000000000022'))
480
564
  self.len(1, await core.nodes('test:zeropad=00000000000000000022')) # len=20
481
565
  self.len(0, await core.nodes('test:zeropad=0000000000000000000022')) # len=22
566
+ self.len(1, await core.nodes('test:zeropad=(0x33)'))
567
+ self.len(1, await core.nodes('test:zeropad=000000000033'))
568
+ self.len(1, await core.nodes('test:zeropad=00000000000000000033')) # len=20
569
+ self.len(0, await core.nodes('test:zeropad=0000000000000000000033')) # len=22
570
+ self.len(1, await core.nodes('test:zeropad=(0x444)'))
571
+ self.len(1, await core.nodes('test:zeropad=000000000444'))
572
+ self.len(1, await core.nodes('test:zeropad=00000000000000000444')) # len=20
573
+ self.len(0, await core.nodes('test:zeropad=0000000000000000000444')) # len=22
482
574
 
483
575
  def test_int(self):
484
576
 
@@ -545,6 +545,14 @@ class CryptoModelTest(s_t_utils.SynTest):
545
545
  self.eq(nodes[0].get('identities:ipv4s'), (0x01020304, 0x05050505))
546
546
  self.eq(nodes[0].get('identities:ipv6s'), ('ff::11', 'ff::aa'))
547
547
 
548
+ nodes = await core.nodes('[ crypto:x509:cert=* :serial=(1234) ]')
549
+ self.len(1, nodes)
550
+ self.eq(nodes[0].get('serial'), '00000000000000000000000000000000000004d2')
551
+
552
+ nodes = await core.nodes('[ crypto:x509:cert=* :serial=(-1234) ]')
553
+ self.len(1, nodes)
554
+ self.eq(nodes[0].get('serial'), 'fffffffffffffffffffffffffffffffffffffb2e')
555
+
548
556
  nodes = await core.nodes('''
549
557
  [
550
558
  crypto:x509:crl=$crl
@@ -316,6 +316,24 @@ class TeleTest(s_t_utils.SynTest):
316
316
  self.true(prox.isfini)
317
317
  await self.asyncraises(s_exc.IsFini, prox.bar((10, 20)))
318
318
 
319
+ async def test_telepath_openinfo_cell(self):
320
+ with self.getTestDir() as dirn:
321
+ async with self.getTestCore(dirn=dirn) as core:
322
+
323
+ layr00 = core.getView().layers[0]
324
+
325
+ async with await s_telepath.openurl(f'cell://root@{dirn}:*', name=f'*/layer/{layr00.iden}') as layer:
326
+ self.eq(layr00.iden, await layer.getIden())
327
+
328
+ async def test_telepath_openinfo_unix(self):
329
+ with self.getTestDir() as dirn:
330
+ async with self.getTestCore(dirn=dirn) as core:
331
+
332
+ layr00 = core.getView().layers[0]
333
+
334
+ async with await s_telepath.openurl(f'unix://root@{dirn}/sock:*', name=f'*/layer/{layr00.iden}') as layer:
335
+ self.eq(layr00.iden, await layer.getIden())
336
+
319
337
  async def test_telepath_sync_genr(self):
320
338
 
321
339
  foo = Foo()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synapse
3
- Version: 2.212.0
3
+ Version: 2.213.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
@@ -9,7 +9,7 @@ synapse/datamodel.py,sha256=Lc8PF4tapY6leXv35M1UZHNQ3nDLxEWbfwS4crGNTV0,40347
9
9
  synapse/exc.py,sha256=JpxmJdYrbihGf7zShC5M1q0kI2JQ6QaMaa89Rjx4SvY,9627
10
10
  synapse/glob.py,sha256=tb6NPtK6Jp6YES9sB1AQi26HP6f-BcEiHrZz2yEyZ90,3210
11
11
  synapse/mindmeld.py,sha256=TiijGH7wX2zdXIFSBUlN40CPOvYaFlw6Wxi66XZuB_M,26
12
- synapse/telepath.py,sha256=0GC2M0kfggfzGInabtPMssGI_7wxQYtYTsO8ki7Z8HM,46914
12
+ synapse/telepath.py,sha256=DbhAr2Mq5sXqhYXlR7aI0SP84uLnoocwQB-qL6HOHC4,46972
13
13
  synapse/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  synapse/cmds/boss.py,sha256=anEKo72bmMV6xTQ1XM-Dz9HFYkNKUX7Ee6Q6jKtkml4,2920
15
15
  synapse/cmds/cortex.py,sha256=dWXrQr99oVM5IkdhVQPnY0xaI3rdtXvw9B6drtEY8hs,15383
@@ -92,7 +92,7 @@ synapse/lib/autodoc.py,sha256=tM2OCPrV7yeth8Cx-wx-_VXBmBfzJS52vaubg_7BqCI,23217
92
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
- synapse/lib/cell.py,sha256=no45zKA9hZIzoElYg298pUxcOY6kCEoR_Prq9wuq9TI,184737
95
+ synapse/lib/cell.py,sha256=2ZaQevXdg1m5hZ9trYYSUaC6EY_w0RpAOY0jq8pot2w,184814
96
96
  synapse/lib/certdir.py,sha256=laGLxgx0gVxXvoaLKKemBQv71OZr9mDaqlAatdESV1A,56176
97
97
  synapse/lib/chop.py,sha256=F0RRLlJ6NlpLW7sBWPNZV9Xw4w6HVbQbxPZPE6VhwVQ,9404
98
98
  synapse/lib/cli.py,sha256=GuyOgj2LkpJCQhtndroTMGG5uL0xQ-CK5lh69_Sg8Mk,15091
@@ -135,11 +135,11 @@ synapse/lib/reflect.py,sha256=j7Y522UzAwNswUehyfi9kHFNkTxuHXsFuEKY4ATXWTQ,2783
135
135
  synapse/lib/rstorm.py,sha256=z5RdqNI0EkjWuU1oWbGXZrgxcBF32mFJGPA-_sdd6EM,19895
136
136
  synapse/lib/schemas.py,sha256=gmjiPlA-7jHudG1Dq-TROh18NDxRjdu4-oCCdBUtDn8,41106
137
137
  synapse/lib/scope.py,sha256=0CuSXLG_7pNleC1BcJ8_WbA50DswrX4DNjW5MyGGGNo,5496
138
- synapse/lib/scrape.py,sha256=-TLjUrerHCGiuCOeuGOGA6IpQdaFGW6LvwZtp1xOCnw,23785
138
+ synapse/lib/scrape.py,sha256=ppUUkobkITN7n2gFov0nfzV3sVKpyPNrZKPtt1zwjjU,23979
139
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=NbFCkISq_UZPjdRUzxAG_You0_rLP9_USAgYi3wAE44,63709
142
+ synapse/lib/snap.py,sha256=ebu_nftl8tCTvo329lS6N1CwQzHeL1iSjn_V5y91afQ,63433
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=R_kRMtJda1h0IPzMN7Rit9mP8Kk62jm1zx4I2ngxHPA,402228
150
+ synapse/lib/stormtypes.py,sha256=JbWu1iVjFI7WtFfbzr9j0tybUcWCN2ddsIDZUORbFuc,402576
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
@@ -156,9 +156,9 @@ synapse/lib/thisplat.py,sha256=kQhj9Iy97zKHCnaxFSBoSnKabfza9vjpg9m6V7w-Xt4,417
156
156
  synapse/lib/threads.py,sha256=TSsC7ryXm_CbM0LQMsvk1vYV4iyvarzWzH59TrUzKuo,164
157
157
  synapse/lib/time.py,sha256=bk_1F6_MDuCWJ1ToPJ-XHkeTWVw5b4SE7cCixBqVxXo,9435
158
158
  synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
159
- synapse/lib/types.py,sha256=plPuYWNaJmCWjYIOWIkDhh8NhTONATZD6d85qf2NUfM,69740
159
+ synapse/lib/types.py,sha256=u59x8-Dnr3WbnRTZ_iCuRaexwKsyQKiIc_wrVrpdRQ8,70767
160
160
  synapse/lib/urlhelp.py,sha256=ljhnF91z9ihyOLdZZ6OoQYCN1WYjOj1imukD45xiKU0,3320
161
- synapse/lib/version.py,sha256=2X2VgCdTdapLJHREDFMzUWioAzaYw_MTPVwCZRgAbMM,7162
161
+ synapse/lib/version.py,sha256=vPlIrnScQmi8c0YgtPyqMBhsHBlmJF4HdmHXMrHvKTE,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
@@ -208,7 +208,7 @@ synapse/lib/stormlib/project.py,sha256=EWigF9lWRMifl408qs3a78JEr_-QtCicCj8x6h220
208
208
  synapse/lib/stormlib/random.py,sha256=tDhp3dCUf6uvIFC-pDIHN0BwKK-uur1zwosc3xPtDBE,4456
209
209
  synapse/lib/stormlib/scrape.py,sha256=Mh3AAPUjSHivaarKUPsGEcZEnJx2GgBlYxLJw9xhnug,6694
210
210
  synapse/lib/stormlib/smtp.py,sha256=xlyLUu3DxXx5RBu_XDltEwmvjeLbsBHNkzpS7lReLDM,7737
211
- synapse/lib/stormlib/spooled.py,sha256=f-JZcZBngTlWQW732mPaZ7IVwPZ9M-e4xqS9wKSYo4U,4106
211
+ synapse/lib/stormlib/spooled.py,sha256=vO_VmZnfx4zC8AQZf6NEwK8Qlyuj0BUpuNW_4kAuoI8,4169
212
212
  synapse/lib/stormlib/stats.py,sha256=pH-pgxn9YUfJ7hw6To8_0aEvfpGWG6pDCs396qGMtr0,8771
213
213
  synapse/lib/stormlib/stix.py,sha256=Grz8RXBR__3PbN9Ef2W1UYq4mtTdTjS8HX7mlE5E_Hw,53548
214
214
  synapse/lib/stormlib/storm.py,sha256=dnPwH6p3DaOaKXfagqu-9szqr1wNzmCySDyzGJ77n74,6246
@@ -289,7 +289,7 @@ synapse/tests/test_lib_autodoc.py,sha256=Iz-VuUhwxvQ3ojK-cemSo7CdCUAyFVJ8MfJ2KbF
289
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
- synapse/tests/test_lib_cell.py,sha256=FbeM8WiKx-jXUZsPvESfLO1GvOZ4xGz7kGWgZlLL5pQ,157097
292
+ synapse/tests/test_lib_cell.py,sha256=vQNaHHOUMon5BLHB2OKl9PmxYDOyJL4qRHqISIRe1ic,157603
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
@@ -329,12 +329,12 @@ synapse/tests/test_lib_ratelimit.py,sha256=2aH3KodVGOEkxbe0hZ1RAQ4p6waF1tueSZP9h
329
329
  synapse/tests/test_lib_reflect.py,sha256=C2GMXUPm705p2ySLRpICWZUNB-oo4NiluT6XU_gY_jA,3104
330
330
  synapse/tests/test_lib_rstorm.py,sha256=ufT5i5ekblVoMblnfH3mMJhATpXKZuqzroV8_eS1XoM,20066
331
331
  synapse/tests/test_lib_scope.py,sha256=0uh6B1mB68kqTsFAL0oPbhDe64mtIAVblfAWNTxo6FQ,6217
332
- synapse/tests/test_lib_scrape.py,sha256=awF1dqgrXKKMFDjFmHZTWjo-rTqn0xbiI6B134HtsUc,48156
332
+ synapse/tests/test_lib_scrape.py,sha256=Mojpt7f9IfFe-nMcCAzzdMb-Qsn1Tg0EPNGfreWXLno,48424
333
333
  synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hMPkD9c,756
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=GLLbgQ7sztaykAcM5p_n9uyDZ3qad1thG5719sBBjB8,245310
337
+ synapse/tests/test_lib_storm.py,sha256=rOt73iQ9stbRW_jFiVu7ywlVh9n39FTTsHi9vkwkb5Y,245413
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
340
  synapse/tests/test_lib_stormhttp.py,sha256=rhZ9xLTIzLm4GlJUFDieFqAcrhE0EFTDi2erGltPm0I,46056
@@ -369,7 +369,7 @@ synapse/tests/test_lib_stormlib_pack.py,sha256=YSb4dErPM3CeU0piqvhIQF_F1m3YjApo3
369
369
  synapse/tests/test_lib_stormlib_random.py,sha256=8bncEY6Unwry7h29CFqIUaAk9lkiNy7Qq9UNINeqpXE,4656
370
370
  synapse/tests/test_lib_stormlib_scrape.py,sha256=Pk29JiuapVs9J-wrs0CbPimKsLAJvkqwNEP_o0B085g,8720
371
371
  synapse/tests/test_lib_stormlib_smtp.py,sha256=cQY3HReNZlRJL9lfAbHfYDoTQZvtSikbkFQhwPnPWKc,4365
372
- synapse/tests/test_lib_stormlib_spooled.py,sha256=UbkUKYw_e4iFdEX-pXJzO42FDd0_QonpNUekZkENizw,6599
372
+ synapse/tests/test_lib_stormlib_spooled.py,sha256=5XftgeNIjy66OJ0kHd3OEzlGudQXHhpNHGvXJuA7Lcc,6983
373
373
  synapse/tests/test_lib_stormlib_stats.py,sha256=aiCAzuvCXPve8kna3sapSt9h0OVW4-ByaSBkj14dnqw,9712
374
374
  synapse/tests/test_lib_stormlib_stix.py,sha256=iY03k9lFwr-SfQLwJ16cdPp7vf3jmTeB0tzjmHhzeG4,25121
375
375
  synapse/tests/test_lib_stormlib_storm.py,sha256=Cxaeh43Bg_37AgIYW4t8mUUER1NlkIC3JfNayXkTK30,7721
@@ -379,14 +379,14 @@ 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=YnrqZaAjxQmaeIfmZ7qFT-Yf05Uv88VDvTQ5pNz5g-c,321644
382
+ synapse/tests/test_lib_stormtypes.py,sha256=gms_GggL5QwDGZBILkJ5RvjAoBQf-FMx9_s4L-1DPbA,322020
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
386
386
  synapse/tests/test_lib_thishost.py,sha256=O6QCENStRuMjWS7qV9rqwW3bSZwzEUn9NcttKnDqXw8,366
387
387
  synapse/tests/test_lib_time.py,sha256=d1mPkN9P3GHNnZ_mhjyOv64tJGQ0yI_ifUjK3x-kmDg,8891
388
388
  synapse/tests/test_lib_trigger.py,sha256=IxKkVxfQLrCz6Qy6yIrLw5-57KmTmuE6rqKztcjGmYw,42626
389
- synapse/tests/test_lib_types.py,sha256=4hC-NmKh_8oG-vrV7dxg62yN1sGrV7g3uV6P0VF2H38,78350
389
+ synapse/tests/test_lib_types.py,sha256=EOuymS20fbbfNXXJpJ6K6Ay7nD9oX42GZLLnWwKN_n0,82830
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
392
  synapse/tests/test_lib_view.py,sha256=jljS79RvgD2owpPotIXvuG_9IwwmLt3t8g2MkbIsBco,41728
@@ -397,7 +397,7 @@ synapse/tests/test_model_auth.py,sha256=AOg85IHsr4fSD3L1ex4vLwG24oicSzEOvcThdqME
397
397
  synapse/tests/test_model_base.py,sha256=HH4_n318MwlRSyqsa7iZ9n3JqpRHThXE7ktm1MnaJaA,20562
398
398
  synapse/tests/test_model_belief.py,sha256=X75PyP_JI4KvN00njr7JmefGXIhBvR83TOZ1uXdCjSE,1644
399
399
  synapse/tests/test_model_biz.py,sha256=73NRxQlu3MqZSH5-nXOhBR0CLpt7Nm2jjl-VwINxJoY,10128
400
- synapse/tests/test_model_crypto.py,sha256=7lm36xN4kPTBbhL2wmrfzc7KK-y2c3Fy0UTTqvUocn8,28220
400
+ synapse/tests/test_model_crypto.py,sha256=JnhXjTflBe60ff9NYToWjf8120LtLec39lrgU-GPWGI,28617
401
401
  synapse/tests/test_model_dns.py,sha256=vIplDlxrFoKYkt4vR9EgqPFGD-az0AA0SJ45MTLw6Ro,18976
402
402
  synapse/tests/test_model_doc.py,sha256=29YGIuXgAllvx7v8pHlPofDRMbLg1lAu32icMW_m8Es,3764
403
403
  synapse/tests/test_model_economic.py,sha256=KwSttYgwHaZ_4Qhf6rKO6W9xXxgLV0gMj20ag3iu0Z0,16398
@@ -428,7 +428,7 @@ synapse/tests/test_servers_cortex.py,sha256=2td41cPfC5-hJ1C6sH5NsN-ixjfXPCpnPllP
428
428
  synapse/tests/test_servers_cryotank.py,sha256=vDxTcF4mUP5QQyf3xD-PKXRsYD0EvLknlkr9S3H2RKc,1185
429
429
  synapse/tests/test_servers_stemcell.py,sha256=TJabX5aQVLbGNLffiVd3B7Uj5dH12Y-0KqAW56GM0G8,2320
430
430
  synapse/tests/test_servers_univ.py,sha256=eXesifJL05IA91f5od-9bjuIDVhNWMdo8qWzaHEr22s,2704
431
- synapse/tests/test_telepath.py,sha256=TkaHxQeQpOwn-0TvPIKC1don6PeWD5-U1296RwzcnwA,47472
431
+ synapse/tests/test_telepath.py,sha256=QeUbrN1sHQz85CwMSC0VB9F6GVHrLshRut19eDg0Za0,48245
432
432
  synapse/tests/test_tools_aha.py,sha256=dWvXn8SJohZSjo2oFlXMH9cX9GynAb7USSBVv7K19Sg,16788
433
433
  synapse/tests/test_tools_apikey.py,sha256=pAjOSAhZiflKksZMHmICWRi0nIO5hS9P5VcT8qUubn0,8909
434
434
  synapse/tests/test_tools_autodoc.py,sha256=1SXQcRwB40VZG3YX8T7vGh2YRnDjnSv5AKMz8fj4V1k,9027
@@ -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.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,,
622
+ synapse-2.213.0.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
623
+ synapse-2.213.0.dist-info/METADATA,sha256=4ufoDlBK-i-ytrFBlz1C47hrq7pyOqvCJcsWgyjXu_g,4623
624
+ synapse-2.213.0.dist-info/WHEEL,sha256=cRWFNt_CJSuf6BnJKAdKunDXUJxjAbWvbt_kstDCs1I,93
625
+ synapse-2.213.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
626
+ synapse-2.213.0.dist-info/RECORD,,