synapse 2.187.0__py311-none-any.whl → 2.187.1__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/lmdbslab.py CHANGED
@@ -1931,6 +1931,8 @@ class Scan:
1931
1931
  '''
1932
1932
  Returns if the cursor is at the value in atitem
1933
1933
  '''
1934
+ if not self.dupsort:
1935
+ return self.atitem[0] == self.curs.item()[0]
1934
1936
  return self.atitem == self.curs.item()
1935
1937
 
1936
1938
  class ScanKeys(Scan):
synapse/lib/modelrev.py CHANGED
@@ -1446,7 +1446,7 @@ class ModelMigration_0_2_31:
1446
1446
 
1447
1447
  # Pick up and classify all bad CPE nodes
1448
1448
  for idx, layer in enumerate(self.layers):
1449
- logger.debug(f'Classifying nodes in layer {idx}')
1449
+ logger.debug('Classifying nodes in layer %s %s', idx, layer.iden)
1450
1450
 
1451
1451
  async for buid, sode in layer.getStorNodesByForm('it:sec:cpe'):
1452
1452
 
@@ -1457,6 +1457,7 @@ class ModelMigration_0_2_31:
1457
1457
  if (v2_2 := props.get('v2_2')) is not None:
1458
1458
  propvalu, stortype = v2_2
1459
1459
  if not s_infotech.isValidCpe22(propvalu):
1460
+ logger.debug(f'Queueing invalid v2_2 value for deletion iden={s_common.ehex(buid)} valu={propvalu}')
1460
1461
  await self._queueEdit(
1461
1462
  layer.iden,
1462
1463
  (buid, 'it:sec:cpe', (
@@ -1490,7 +1491,7 @@ class ModelMigration_0_2_31:
1490
1491
 
1491
1492
  # Pick up all related CPE node info. The majority of the work happens in this loop
1492
1493
  for idx, layer in enumerate(self.layers):
1493
- logger.debug(f'Processing nodes in layer {idx}')
1494
+ logger.debug('Processing nodes in layer %s %s', idx, layer.iden)
1494
1495
 
1495
1496
  for buid, node in self.nodes.items():
1496
1497
  await self._loadNode(layer, buid, node=node)
@@ -1532,7 +1533,7 @@ class ModelMigration_0_2_31:
1532
1533
  await self.todos.clear()
1533
1534
 
1534
1535
  for idx, layer in enumerate(self.layers):
1535
- logger.debug(f'Processing references in layer {idx}')
1536
+ logger.debug('Processing references in layer %s %s', idx, layer.iden)
1536
1537
 
1537
1538
  async for entry in todotmp:
1538
1539
  match entry:
@@ -1613,10 +1614,25 @@ class ModelMigration_0_2_31:
1613
1614
  if propvalu is not None:
1614
1615
  break
1615
1616
 
1616
- newvalu, _ = form.type.norm(propvalu)
1617
- await self.moveNode(buid, newvalu)
1617
+ if propvalu is None:
1618
+ # We didn't find a v2_2 value so remove this node
1619
+ await self.removeNode(buid)
1620
+ removed += 1
1621
+
1622
+ else:
1623
+ # We did find a v2_2 value so try to norm it and use that new value to move the node. If this fails,
1624
+ # remove the node.
1625
+ try:
1626
+ newvalu, _ = form.type.norm(propvalu)
1618
1627
 
1619
- migrated += 1
1628
+ except s_exc.BadTypeValu:
1629
+ logger.debug('Unexpectedly encountered invalid v2_2 prop: iden=%s valu=%s', s_common.ehex(buid), propvalu)
1630
+ await self.removeNode(buid)
1631
+ removed += 1
1632
+
1633
+ else:
1634
+ await self.moveNode(buid, newvalu)
1635
+ migrated += 1
1620
1636
 
1621
1637
  elif action == 'remove':
1622
1638
  newvalu = None
@@ -1627,10 +1643,17 @@ class ModelMigration_0_2_31:
1627
1643
  if propvalu is None:
1628
1644
  continue
1629
1645
 
1630
- newvalu, _ = form.type.norm(propvalu)
1631
1646
  # This prop is going to be the new primary value so delete the secondary prop
1632
1647
  await self.editPropDel(layriden, buid, 'it:sec:cpe', 'v2_2', propvalu, stortype)
1633
1648
 
1649
+ # We did find a v2_2 value so try to norm it and use that new value to move the node. If this fails,
1650
+ # remove the node.
1651
+ try:
1652
+ newvalu, _ = form.type.norm(propvalu)
1653
+ except s_exc.BadTypeValu:
1654
+ logger.debug('Unexpectedly encountered invalid v2_2 prop: iden=%s valu=%s', s_common.ehex(buid), propvalu)
1655
+ continue
1656
+
1634
1657
  # Oh yeah! Migrate the node instead of removing it
1635
1658
  await self.moveNode(buid, newvalu)
1636
1659
 
synapse/lib/spooled.py CHANGED
@@ -8,6 +8,7 @@ import synapse.lib.msgpack as s_msgpack
8
8
  import synapse.lib.lmdbslab as s_lmdbslab
9
9
 
10
10
  MAX_SPOOL_SIZE = 10000
11
+ DEFAULT_MAPSIZE = s_const.mebibyte * 32
11
12
 
12
13
  class Spooled(s_base.Base):
13
14
  '''
@@ -48,7 +49,7 @@ class Spooled(s_base.Base):
48
49
 
49
50
  slabpath = tempfile.mkdtemp(dir=dirn, prefix='spooled_', suffix='.lmdb')
50
51
 
51
- self.slab = await s_lmdbslab.Slab.anit(slabpath, map_size=s_const.mebibyte * 32)
52
+ self.slab = await s_lmdbslab.Slab.anit(slabpath, map_size=DEFAULT_MAPSIZE)
52
53
  if self.cell is not None:
53
54
  self.slab.addResizeCallback(self.cell.checkFreeSpace)
54
55
 
@@ -1144,7 +1144,7 @@ class LibModelMigrations_0_2_31(s_stormtypes.Lib):
1144
1144
  await self.runt.printf(f' layer: {layriden}')
1145
1145
  for iden, refinfo in reflist:
1146
1146
  form, prop, *_ = refinfo
1147
- await self.runt.printf(f' - {form}:{prop} (iden: {iden}')
1147
+ await self.runt.printf(f' - {form}:{prop} (iden: {iden})')
1148
1148
 
1149
1149
  n1edges = node['n1edges']
1150
1150
  n2edges = node['n2edges']
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, 187, 0)
226
+ version = (2, 187, 1)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = '5cdabb0eeea74eff019d8bcdc461b48bb5eb6651'
228
+ commit = 'a75f7b990f6350f9d631f1f92ea5063542458aad'
@@ -11,6 +11,7 @@ from unittest.mock import patch
11
11
 
12
12
  import synapse.lib.base as s_base
13
13
  import synapse.lib.const as s_const
14
+ import synapse.lib.msgpack as s_msgpack
14
15
  import synapse.lib.lmdbslab as s_lmdbslab
15
16
  import synapse.lib.thisplat as s_thisplat
16
17
 
@@ -1597,6 +1598,35 @@ class LmdbSlabTest(s_t_utils.SynTest):
1597
1598
  subkv2 = subkv1.getSubKeyVal('pref2')
1598
1599
  self.eq(list(subkv2.keys()), ['wow'])
1599
1600
 
1601
+ async def test_lmdbslab_scan_grow(self):
1602
+ with self.getTestDir() as dirn:
1603
+
1604
+ path = os.path.join(dirn, 'test.lmdb')
1605
+
1606
+ mapsize = s_const.kibibyte * 32
1607
+ async with await s_lmdbslab.Slab.anit(path, map_size=mapsize) as slab:
1608
+
1609
+ self.eq(slab.mapsize, mapsize)
1610
+
1611
+ def slabset(key, valu):
1612
+ slab.replace(s_msgpack.en(key), s_msgpack.en(valu))
1613
+
1614
+ def slabitems():
1615
+ for lkey, lval in slab.scanByFull():
1616
+ yield s_msgpack.un(lkey), s_msgpack.un(lval)
1617
+
1618
+ slabset('one', [1, 2, 3])
1619
+ slabset('two', [2, 3, 4])
1620
+
1621
+ seen = set()
1622
+ for key, valu in slabitems():
1623
+ self.notin(key, seen)
1624
+ seen.add(key)
1625
+
1626
+ valu += ('A' * mapsize,)
1627
+ slabset(key, valu)
1628
+
1629
+ self.gt(slab.mapsize, mapsize)
1600
1630
 
1601
1631
  class LmdbSlabMemLockTest(s_t_utils.SynTest):
1602
1632
 
@@ -1630,14 +1630,14 @@ class ModelRevTest(s_tests.SynTest):
1630
1630
  sources: ['008af0047a8350287cde7abe31a7c706', 'a7a4739e0a52674df0fa3a8226de0c3f']
1631
1631
  refs:
1632
1632
  layer: {fork01layr}
1633
- - it:prod:soft:cpe (iden: 9742664e24fe1a3a37d871b1f62af27453c2945b98f421d753db8436e9a44cc9
1634
- - _ext:model:form:cpe (iden: 16e3289346a258c3e3073affad490c1d6ebf1d01295aacc489cdb24658ebc6e7
1635
- - inet:flow:dst:cpes (iden: 7d4c31f1364aaf0b4cfaf4b57bb60157f2e86248391ce8ec75d6b7e3cd5f35b7
1636
- - inet:flow:src:cpes (iden: 7d4c31f1364aaf0b4cfaf4b57bb60157f2e86248391ce8ec75d6b7e3cd5f35b7
1637
- - meta:seen:node (iden: 81973208bc0f5b99250e4cda7889c66e0573c0573bc2a279083d23426ba3c74d
1638
- - meta:seen:node (iden: 85bfc442d87a64a8e75d4ff2831281fb156317767612eef9b75c271ff162c4d9
1633
+ - it:prod:soft:cpe (iden: 9742664e24fe1a3a37d871b1f62af27453c2945b98f421d753db8436e9a44cc9)
1634
+ - _ext:model:form:cpe (iden: 16e3289346a258c3e3073affad490c1d6ebf1d01295aacc489cdb24658ebc6e7)
1635
+ - inet:flow:dst:cpes (iden: 7d4c31f1364aaf0b4cfaf4b57bb60157f2e86248391ce8ec75d6b7e3cd5f35b7)
1636
+ - inet:flow:src:cpes (iden: 7d4c31f1364aaf0b4cfaf4b57bb60157f2e86248391ce8ec75d6b7e3cd5f35b7)
1637
+ - meta:seen:node (iden: 81973208bc0f5b99250e4cda7889c66e0573c0573bc2a279083d23426ba3c74d)
1638
+ - meta:seen:node (iden: 85bfc442d87a64a8e75d4ff2831281fb156317767612eef9b75c271ff162c4d9)
1639
1639
  layer: {fork00layr}
1640
- - risk:vulnerable:node (iden: 5fddf1b5fa06aa8a39a1eb297712cecf9ca146764c4d6e5c79296b9e9978d2c3
1640
+ - risk:vulnerable:node (iden: 5fddf1b5fa06aa8a39a1eb297712cecf9ca146764c4d6e5c79296b9e9978d2c3)
1641
1641
  edges:
1642
1642
  -(refs)> f0315900f365f45f2e027edc66ed8477d8661dad501d51f3ac8067c36565f07c
1643
1643
  <(seen)- 051d93252abe655e43265b89149b6a2d5a8f5f2df33b56c986ab8671c081e394
@@ -125,6 +125,8 @@ class SpooledTest(s_test.SynTest):
125
125
 
126
126
  async with await s_spooled.Dict.anit(size=2) as sd0:
127
127
  await runtest(sd0)
128
+ self.true(sd0.fallback)
128
129
 
129
130
  async with await s_spooled.Dict.anit(size=1000) as sd1:
130
131
  await runtest(sd1)
132
+ self.false(sd1.fallback)
@@ -1,10 +1,13 @@
1
- import os.path
1
+ import os
2
2
  import pathlib
3
3
 
4
4
  import vcr
5
5
 
6
+ from unittest import mock
7
+
6
8
  import synapse.exc as s_exc
7
9
  import synapse.data as s_data
10
+ import synapse.common as s_common
8
11
 
9
12
  import synapse.lib.config as s_config
10
13
 
@@ -24,7 +27,7 @@ class TestUtilsGetrefs(s_utils.SynTest):
24
27
  cm = myvcr.use_cassette(fp)
25
28
  return cm
26
29
 
27
- async def test_basics(self):
30
+ def test_basics(self):
28
31
 
29
32
  args = s_getrefs.parse_args([
30
33
  s_data.path('attack-flow', 'attack-flow-schema-2.0.0.json')
@@ -45,30 +48,34 @@ class TestUtilsGetrefs(s_utils.SynTest):
45
48
  with self.raises(s_exc.BadArg):
46
49
  s_getrefs.download_refs_handler('http://raw.githubusercontent.com/../../attack-flow/attack-flow-schema-2.0.0.json')
47
50
 
48
- filename = pathlib.Path(s_data.path(
49
- 'jsonschemas',
50
- 'raw.githubusercontent.com',
51
- 'oasis-open',
52
- 'cti-stix2-json-schemas',
53
- 'stix2.1',
54
- 'schemas',
55
- 'common',
56
- 'core.json'
57
- ))
58
-
59
- self.true(filename.exists())
60
- filename.unlink()
61
-
62
- # Clear the cached validator funcs so the ref handlers in s_getrefs get called
63
- s_config._JsValidators = {}
64
-
65
- with self.getLoggerStream('synapse.utils.getrefs') as stream:
66
- with self.getVcr() as cass:
67
- s_getrefs.main(args)
68
-
69
- stream.seek(0)
70
- mesgs = stream.read()
71
- mesg = f'Downloading schema from {CORE_URL}.'
72
- self.true(filename.exists())
73
- self.isin(mesg, mesgs)
74
- self.notin(f'Schema {CORE_URL} already exists in local cache, skipping.', mesgs)
51
+ with self.getTestDir(copyfrom=s_getrefs.BASEDIR) as dirn:
52
+
53
+ filename = pathlib.Path(s_common.genpath(
54
+ dirn,
55
+ 'raw.githubusercontent.com',
56
+ 'oasis-open',
57
+ 'cti-stix2-json-schemas',
58
+ 'stix2.1',
59
+ 'schemas',
60
+ 'common',
61
+ 'core.json'
62
+ ))
63
+
64
+ self.true(filename.exists())
65
+ filename.unlink()
66
+ self.false(filename.exists())
67
+
68
+ # Clear the cached validator funcs so the ref handlers in s_getrefs get called
69
+ s_config._JsValidators = {}
70
+
71
+ with self.getLoggerStream('synapse.utils.getrefs') as stream:
72
+ with mock.patch('synapse.utils.getrefs.BASEDIR', dirn):
73
+ with self.getVcr():
74
+ s_getrefs.main(args)
75
+
76
+ stream.seek(0)
77
+ mesgs = stream.read()
78
+ mesg = f'Downloading schema from {CORE_URL}.'
79
+ self.true(filename.exists())
80
+ self.isin(mesg, mesgs)
81
+ self.notin(f'Schema {CORE_URL} already exists in local cache, skipping.', mesgs)
synapse/utils/getrefs.py CHANGED
@@ -1,11 +1,12 @@
1
1
  import sys
2
2
  import json
3
3
  import urllib
4
+ import asyncio
4
5
  import logging
5
6
  import pathlib
6
7
  import argparse
7
8
 
8
- import requests
9
+ import aiohttp
9
10
 
10
11
  import synapse.exc as s_exc
11
12
  import synapse.data as s_data
@@ -15,23 +16,31 @@ import synapse.lib.config as s_config
15
16
 
16
17
  logger = logging.getLogger(__name__)
17
18
 
19
+ BASEDIR = s_data.path('jsonschemas')
20
+
18
21
  def download_refs_handler(uri):
19
22
  '''
20
23
  This function downloads the JSON schema at the given URI, parses the given
21
24
  URI to get the path component, and then saves the referenced schema to the
22
25
  'jsonschemas' directory of synapse.data.
26
+
27
+ This function runs its own asyncio loop for each URI being requested.
23
28
  '''
29
+ ret = asyncio.run(_download_refs_handler(uri))
30
+ return ret
31
+
32
+ async def _download_refs_handler(uri):
24
33
 
25
34
  try:
26
35
  parts = urllib.parse.urlparse(uri)
27
36
  except ValueError:
28
37
  raise s_exc.BadUrl(mesg=f'Malformed URI: {uri}.') from None
29
38
 
30
- filename = s_data.path('jsonschemas', parts.hostname, *parts.path.split('/'))
39
+ filename = s_data.path(BASEDIR, parts.hostname, *parts.path.split('/'))
31
40
  filepath = pathlib.Path(filename)
32
41
 
33
42
  # Check for path traversal. Unlikely, but still check
34
- if not str(filepath.absolute()).startswith(s_data.path('jsonschemas')):
43
+ if not str(filepath.absolute()).startswith(BASEDIR):
35
44
  raise s_exc.BadArg(mesg=f'Path traversal in schema URL: {uri} ?')
36
45
 
37
46
  # If we already have the file, return it
@@ -45,8 +54,12 @@ def download_refs_handler(uri):
45
54
 
46
55
  # Get the data from the interwebs
47
56
  logger.info(f'Downloading schema from {uri}.')
48
- resp = requests.get(uri)
49
- data = resp.json()
57
+ async with aiohttp.ClientSession() as session:
58
+ async with session.get(uri) as resp:
59
+ resp.raise_for_status()
60
+ buf = await resp.read()
61
+
62
+ data = json.loads(buf.decode())
50
63
 
51
64
  # Save the json schema to disk
52
65
  with filepath.open('w') as fp:
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: synapse
3
- Version: 2.187.0
3
+ Version: 2.187.1
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License: Apache License 2.0
@@ -19,7 +19,7 @@ Classifier: Operating System :: POSIX :: Linux
19
19
  Requires-Python: >=3.11
20
20
  Description-Content-Type: text/x-rst
21
21
  License-File: LICENSE
22
- Requires-Dist: pyOpenSSL<25.0.0,>=24.0.0
22
+ Requires-Dist: pyOpenSSL<24.3.0,>=24.0.0
23
23
  Requires-Dist: cryptography<44.0.0,>=43.0.1
24
24
  Requires-Dist: msgpack<1.1.0,>=1.0.5
25
25
  Requires-Dist: xxhash<3.6.0,>=1.4.4
@@ -63,6 +63,7 @@ Requires-Dist: sphinx<9.0.0,>=8.0.0; extra == "docs"
63
63
  Requires-Dist: sphinx-rtd-theme<4.0.0,>=3.0.0; extra == "docs"
64
64
  Requires-Dist: sphinx-notfound-page<2.0.0,>=1.0.4; extra == "docs"
65
65
  Requires-Dist: jinja2<4.0.0,>=3.1.4; extra == "docs"
66
+ Dynamic: license-file
66
67
 
67
68
  Synapse
68
69
  =======
@@ -117,8 +117,8 @@ synapse/lib/interval.py,sha256=PqpEhMGG6LD9mJxEms0oQWC-NB01H6gwsmLSc5LrDFk,1175
117
117
  synapse/lib/jsonstor.py,sha256=QQVf7Kl90sI_v97UZZAoa6stizDeMyy0ykR3RsHpmi8,19359
118
118
  synapse/lib/layer.py,sha256=9QriT6ikYTQJrpQUw2AGZS887Ndstv61P4UGKK5y1Zo,154151
119
119
  synapse/lib/link.py,sha256=DdCmaJzCqYWSJSxv2CQQiMKmW5q12nm34MYyrzCsL-Y,10216
120
- synapse/lib/lmdbslab.py,sha256=g4_Wh2U1kPlfr0kq7PVDGrBLpPryk2qdJvodr2Fyzxo,60978
121
- synapse/lib/modelrev.py,sha256=kfFBV-rM_rO1jGBleM8630CVmlCaC9hrrFoxrJmZ3oQ,70813
120
+ synapse/lib/lmdbslab.py,sha256=BG-iO5z4syzVePhezpWWdBDCtAtRtTWxqWgvngqiJRk,61064
121
+ synapse/lib/modelrev.py,sha256=IqYFEx_uz8JBpwK7bxQi-DFD-TWrmyQel4SHzj8qe-8,72099
122
122
  synapse/lib/module.py,sha256=0XLFLzuZVmEqulKmdT0uah0oi1t8_f_ghakhqvoKtKI,4686
123
123
  synapse/lib/modules.py,sha256=xHNrGBWLOSTSqn7GMMnm6iiw3Df-Q11h5gOUw84Ax7E,1282
124
124
  synapse/lib/msgpack.py,sha256=I2dc4Py9m5ohGkcsb2Ariqfon6nkam5hC0leEoqADhs,7835
@@ -139,7 +139,7 @@ synapse/lib/share.py,sha256=HDQR7nb4IOleHB1kIFe6prZQVW7PjPAivSAkPuhNn5A,663
139
139
  synapse/lib/slaboffs.py,sha256=Fd0RrIRBMjh159aQz5y1ONmzw0NvV040kVX_jZjQW6I,815
140
140
  synapse/lib/slabseqn.py,sha256=LJ2SZEsZlROBAD3mdS-3JxNVVPXXkBW8GIJXsW0OGG8,10287
141
141
  synapse/lib/snap.py,sha256=QfNtFHV_76ABrm7Zf7WR5kVBB-MvuZmdmDfy0n1Whlo,59880
142
- synapse/lib/spooled.py,sha256=pKPacX-fvZDUTUWPaKgyct_lk_3eoSsF9Ufh_cn_1fQ,5987
142
+ synapse/lib/spooled.py,sha256=BQHIW-qZvEcvhEf8PpXhbDDGzq1go4TH63D6kn-1anM,6021
143
143
  synapse/lib/storm.lark,sha256=ItEIPItfrCT5VmaoS1vm8FWD8Wv7b7B6ZWucCJCdO6s,26517
144
144
  synapse/lib/storm.py,sha256=DDUNmM4c9sB_qPpzgOFpI1r6r3G2xEuARzXeTDvCPI0,215144
145
145
  synapse/lib/storm_format.py,sha256=Q8mf9QWzPljwp70BC4dYv0MGWB_YUJi3Ul4T7ReqjlQ,4818
@@ -157,7 +157,7 @@ synapse/lib/time.py,sha256=FKTYwpdvpuAj8p8sSodRjOxoA7Vu67CIbbXz55gtghk,9231
157
157
  synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
158
158
  synapse/lib/types.py,sha256=u89ukW38oDziRzeA6IWrPwwPD0Ds75u-gwJSXsQ4loY,69708
159
159
  synapse/lib/urlhelp.py,sha256=j-DvWGi-xH0TcO0NbCuwG7guUuiV8wxIxfMyJOzDygo,2523
160
- synapse/lib/version.py,sha256=57HvpCRODByujSSPEEre91DclVaeCWPaWJiChgN0PYI,7162
160
+ synapse/lib/version.py,sha256=3aG_oI2Fc9D0IefysRWnuiqCuGAPi6BozKk6hWwDYYc,7162
161
161
  synapse/lib/view.py,sha256=bP1lMl8Wm0yaMIlc4cfwobm5ojNzMsWguPFnPUkKhoM,60567
162
162
  synapse/lib/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
163
  synapse/lib/crypto/coin.py,sha256=_dhlkzIrHT8BvHdJOWK7PDThz3sK3dDRnWAUqjRpZJc,4910
@@ -197,7 +197,7 @@ synapse/lib/stormlib/log.py,sha256=wdV-lqzQMM0C3GXNJKJKvkSKjk0CBsUfjd-Cl06LOtE,7
197
197
  synapse/lib/stormlib/macro.py,sha256=7iQ18mCaNZcslmfXGQvOmGQ71HxD7JeDp0HDmu5-EKM,8807
198
198
  synapse/lib/stormlib/math.py,sha256=3RKHj40GkYFiJSINa2AZZOAA-GqqeEP98bWw2JNity8,1149
199
199
  synapse/lib/stormlib/mime.py,sha256=WMDAcUiF8RkABKL8EUOScrO77pwi5EHPTko7hI2FPIE,1095
200
- synapse/lib/stormlib/model.py,sha256=6I0JVJUqBnWAo4x-l40SndrynaPjHZ7fxb1VzmXtbDw,53385
200
+ synapse/lib/stormlib/model.py,sha256=3SY7jwBXsoKFQ8bVxq8AJb041QPknPHyvjbmeMAR9Bw,53386
201
201
  synapse/lib/stormlib/modelext.py,sha256=h_uGVK-OjsFXOC--W-2WwTKVWIhDnWatSa2CRAHo4ZE,13073
202
202
  synapse/lib/stormlib/notifications.py,sha256=6y1YuMavQs34WwnW5D_KrLPZ0DQlQKg5VFU56sounSA,3305
203
203
  synapse/lib/stormlib/oauth.py,sha256=hgfjI--w8vbvgNbGvZlzINTOEdQv68nk5mB27CkC93M,13011
@@ -311,8 +311,8 @@ synapse/tests/test_lib_interval.py,sha256=PNEU24XXEGdlW7WkiYJGbhGljwBJpAWen9yTOq
311
311
  synapse/tests/test_lib_jsonstor.py,sha256=1AebkkDAqFhd_mUyjpGviAUq_n0XFUzeuBxPevOu1vc,5866
312
312
  synapse/tests/test_lib_layer.py,sha256=duZUqyqwgRk8RSvVsnV1GCEBOlRl6y84-usWXZdP-Wk,94557
313
313
  synapse/tests/test_lib_link.py,sha256=sTRctDa6s9cmQ6ODoV4ifC3eQhEyXOhX2AkHMQHFHls,10204
314
- synapse/tests/test_lib_lmdbslab.py,sha256=868e9x7HQppILxjQpEcDWto6sjyEyidd5oQEDcVKSX4,65666
315
- synapse/tests/test_lib_modelrev.py,sha256=cP0gokBJJ9yBak6YPO7slfCrwy9DksYXc0jxznj89tE,80480
314
+ synapse/tests/test_lib_lmdbslab.py,sha256=KQ8SnDz0bwiMUrDsWwNIVMrCndf09PYMy3QU5iZOlDQ,66662
315
+ synapse/tests/test_lib_modelrev.py,sha256=E4vNIXjjl-rn3i8CU2_YFm5GB6YJH-QcGFA479t6DWQ,80487
316
316
  synapse/tests/test_lib_module.py,sha256=h2OyCW4HW-ZFiJBNQtZ-sPLjsnrlLdTFHQPaXpA8cds,3923
317
317
  synapse/tests/test_lib_msgpack.py,sha256=_cS-Kzap6InQstBH0nCgFj9HoVO_tB2dj7D2zCa2miU,10056
318
318
  synapse/tests/test_lib_multislabseqn.py,sha256=ujIp3VkFRhPURx3Js9nklXJ4aYup8UTrcLg7X96lrDs,17425
@@ -329,7 +329,7 @@ synapse/tests/test_lib_scrape.py,sha256=ZAbt-obxC9x7WN--pMPq8fU3ZLyKX_aDFSStwJYW
329
329
  synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hMPkD9c,756
330
330
  synapse/tests/test_lib_slabseqn.py,sha256=74V6jU7DRTsy_hqUFDuT4C6dPlJ6ObNnjmI9qhbbyVc,5230
331
331
  synapse/tests/test_lib_snap.py,sha256=OviJtj9N5LhBV-56TySkWvRly7f8VH9d-VBcNFLAtmg,27805
332
- synapse/tests/test_lib_spooled.py,sha256=fkLuujrDqjeJtyByptmGZvJbM9QiETCAu4r_4PdLfZg,3929
332
+ synapse/tests/test_lib_spooled.py,sha256=Ki9UnzTPUtw7devwN_M0a8uwOst81fGQtGSVqSSh1u8,4002
333
333
  synapse/tests/test_lib_storm.py,sha256=2cmkPI_wmmXhURTq-8f_rtq96iajB8mK1EROE2HDP0c,226103
334
334
  synapse/tests/test_lib_storm_format.py,sha256=tEZgQMmKAeG8FQZE5HUjOT7bnKawVTpNaVQh_3Wa630,277
335
335
  synapse/tests/test_lib_stormhttp.py,sha256=ZS8iONsisWjEi2CXx9AttiQ9bOrPs9x4GCwXlJEB_u0,42592
@@ -450,7 +450,7 @@ synapse/tests/test_tools_rstorm.py,sha256=-bIvNCY9Vx702LsNb2vwunZBT6fyXHse28Av6H
450
450
  synapse/tests/test_tools_snapshot.py,sha256=MfMq8ij4Ztxrn0D_iVYXRGSHI1_rQzEybexjlraeSaQ,1750
451
451
  synapse/tests/test_tools_storm.py,sha256=QkyPX4HS67n1q4LbmsCGF9yUSyMLHK4BjNRX3JCgy1w,18437
452
452
  synapse/tests/test_utils.py,sha256=sI-uDhUpkVQHSKHa2-czmWNvyXL2QTsCojtPAV2jueI,8688
453
- synapse/tests/test_utils_getrefs.py,sha256=bBV7yZ9tnOXmjqpsU1YKV5pw0behoKpzpwHJDxLjmLs,2304
453
+ synapse/tests/test_utils_getrefs.py,sha256=Cv0LT0DF-tCGwBmOXsYUVNIJdXQA73yRBgdSWxFL3oA,2623
454
454
  synapse/tests/test_utils_stormcov.py,sha256=H9p1vFH8kNE6qMLrGzSV0eH7KOgdZFh7QuarFe47FtU,6149
455
455
  synapse/tests/utils.py,sha256=7BENTJiU04JpatJjVBjs8O4wXJn62L2MCS55vK98GwM,77934
456
456
  synapse/tests/files/TestUtilsGetrefs.test_basics.yaml,sha256=Ch8cEGFYfDUCZTEvzAqW5Ir79OnYb49pq4i9OJ7K9T0,8257
@@ -558,7 +558,7 @@ synapse/tools/hive/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
558
558
  synapse/tools/hive/load.py,sha256=LpMN14qxtMtUrVwQgW1cr-q5QCanrhrdvncwBqv01Ns,2409
559
559
  synapse/tools/hive/save.py,sha256=179wHdemYXiDnszfvY14_3jSYL7X8BVbXtHFXwpiPk4,1938
560
560
  synapse/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
561
- synapse/utils/getrefs.py,sha256=Lm15J7fdwfZW0HJeGWwZqCIEnef5wwaZC4rU5Si9gEI,2447
561
+ synapse/utils/getrefs.py,sha256=NhHC9uWw7rO08Nj0e86zs2vFCp1gSIe-uie9JP5lemY,2808
562
562
  synapse/utils/stormcov/__init__.py,sha256=81TBw16JwbjeOjegMrJmc5-eY5I4gsks4TrOgyot4CU,163
563
563
  synapse/utils/stormcov/plugin.py,sha256=NUf3SDemVi5Nm7AzJPTvI7TYdg2uc8B1MvXu7thnIqE,8194
564
564
  synapse/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -602,8 +602,8 @@ synapse/vendor/xrpl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
602
602
  synapse/vendor/xrpl/tests/test_codec.py,sha256=Zwq6A5uZUK_FWDL3BA932c5b-rL3hnC6efobWHSLC4o,6651
603
603
  synapse/vendor/xrpl/tests/test_main.py,sha256=kZQwWk7I6HrP-PMvLdsUUN4POvWD9I-iXDHOwdeF090,4299
604
604
  synapse/vendor/xrpl/tests/test_main_test_cases.py,sha256=vTlUM4hJD2Hd2wCIdd9rfsvcMZZZQmNHWdCTTFeGz2Y,4221
605
- synapse-2.187.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
606
- synapse-2.187.0.dist-info/METADATA,sha256=4gFQ4HZha5_h28ATU7M2IFv9GNmqgDUD3mupZFhd2ak,4598
607
- synapse-2.187.0.dist-info/WHEEL,sha256=V9njg5PXytSyv_DtLjFqv-lPwlYJ-pVdrLhmVh7fan0,93
608
- synapse-2.187.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
609
- synapse-2.187.0.dist-info/RECORD,,
605
+ synapse-2.187.1.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
606
+ synapse-2.187.1.dist-info/METADATA,sha256=GHOrBkGkJ9qyUnZNiLL6mdbfbLlbne2uCoI3lV6yXZM,4620
607
+ synapse-2.187.1.dist-info/WHEEL,sha256=ky1wqorHl2SfzZVBwTGUq24xVn07Gwf80XRasCPZT3o,93
608
+ synapse-2.187.1.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
609
+ synapse-2.187.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py311-none-any
5
5