synapse 2.170.0__py311-none-any.whl → 2.172.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.

Files changed (58) hide show
  1. synapse/common.py +20 -0
  2. synapse/cortex.py +98 -6
  3. synapse/lib/agenda.py +13 -7
  4. synapse/lib/ast.py +9 -8
  5. synapse/lib/cache.py +2 -2
  6. synapse/lib/cell.py +7 -3
  7. synapse/lib/coro.py +12 -0
  8. synapse/lib/layer.py +124 -84
  9. synapse/lib/lmdbslab.py +34 -10
  10. synapse/lib/node.py +1 -1
  11. synapse/lib/slabseqn.py +11 -5
  12. synapse/lib/storm.py +7 -71
  13. synapse/lib/stormhttp.py +1 -1
  14. synapse/lib/stormlib/auth.py +19 -0
  15. synapse/lib/stormlib/cell.py +42 -4
  16. synapse/lib/stormlib/compression.py +6 -6
  17. synapse/lib/stormlib/env.py +50 -0
  18. synapse/lib/stormlib/gen.py +1 -1
  19. synapse/lib/stormlib/model.py +1 -1
  20. synapse/lib/stormtypes.py +35 -11
  21. synapse/lib/types.py +7 -7
  22. synapse/lib/version.py +2 -2
  23. synapse/lib/view.py +13 -13
  24. synapse/models/base.py +13 -0
  25. synapse/models/biz.py +14 -0
  26. synapse/models/economic.py +3 -0
  27. synapse/models/inet.py +474 -4
  28. synapse/models/infotech.py +163 -22
  29. synapse/models/orgs.py +17 -0
  30. synapse/models/risk.py +15 -1
  31. synapse/models/transport.py +1 -1
  32. synapse/tests/test_common.py +15 -0
  33. synapse/tests/test_cortex.py +9 -0
  34. synapse/tests/test_lib_ast.py +2 -1
  35. synapse/tests/test_lib_cell.py +1 -1
  36. synapse/tests/test_lib_layer.py +168 -59
  37. synapse/tests/test_lib_lmdbslab.py +49 -0
  38. synapse/tests/test_lib_stormlib_auth.py +22 -0
  39. synapse/tests/test_lib_stormlib_cell.py +47 -0
  40. synapse/tests/test_lib_stormlib_env.py +25 -0
  41. synapse/tests/test_lib_stormtypes.py +12 -1
  42. synapse/tests/test_lib_types.py +1 -0
  43. synapse/tests/test_lib_view.py +9 -9
  44. synapse/tests/test_model_base.py +5 -3
  45. synapse/tests/test_model_economic.py +4 -0
  46. synapse/tests/test_model_files.py +1 -0
  47. synapse/tests/test_model_inet.py +405 -1
  48. synapse/tests/test_model_infotech.py +135 -3
  49. synapse/tests/test_model_orgs.py +6 -0
  50. synapse/tests/test_model_risk.py +8 -0
  51. synapse/tests/test_tools_storm.py +46 -8
  52. synapse/tests/utils.py +30 -9
  53. synapse/tools/storm.py +14 -6
  54. {synapse-2.170.0.dist-info → synapse-2.172.0.dist-info}/METADATA +1 -1
  55. {synapse-2.170.0.dist-info → synapse-2.172.0.dist-info}/RECORD +58 -56
  56. {synapse-2.170.0.dist-info → synapse-2.172.0.dist-info}/WHEEL +1 -1
  57. {synapse-2.170.0.dist-info → synapse-2.172.0.dist-info}/LICENSE +0 -0
  58. {synapse-2.170.0.dist-info → synapse-2.172.0.dist-info}/top_level.txt +0 -0
synapse/lib/types.py CHANGED
@@ -507,7 +507,7 @@ class Comp(Type):
507
507
  fields = self.opts.get('fields')
508
508
  if len(fields) != len(valu):
509
509
  raise s_exc.BadTypeValu(name=self.name, fields=fields, numitems=len(valu),
510
- mesg=f'invalid number of fields given for norming: {repr(valu)[:256]}')
510
+ mesg=f'invalid number of fields given for norming: {s_common.trimText(repr(valu))}')
511
511
 
512
512
  subs = {}
513
513
  adds = []
@@ -1589,7 +1589,7 @@ class Data(Type):
1589
1589
  if self.validator is not None:
1590
1590
  self.validator(valu)
1591
1591
  except (s_exc.MustBeJsonSafe, s_exc.SchemaViolation) as e:
1592
- raise s_exc.BadTypeValu(name=self.name, mesg=f'{e}: {repr(valu)[:256]}') from None
1592
+ raise s_exc.BadTypeValu(name=self.name, mesg=f'{e}: {s_common.trimText(repr(valu))}') from None
1593
1593
  byts = s_msgpack.en(valu)
1594
1594
  return s_msgpack.un(byts), {}
1595
1595
 
@@ -1608,7 +1608,7 @@ class NodeProp(Type):
1608
1608
 
1609
1609
  def _normPyTuple(self, valu):
1610
1610
  if len(valu) != 2:
1611
- mesg = f'Must be a 2-tuple: {repr(valu)[:256]}'
1611
+ mesg = f'Must be a 2-tuple: {s_common.trimText(repr(valu))}'
1612
1612
  raise s_exc.BadTypeValu(name=self.name, numitems=len(valu), mesg=mesg) from None
1613
1613
 
1614
1614
  propname, propvalu = valu
@@ -1650,7 +1650,7 @@ class Range(Type):
1650
1650
 
1651
1651
  def _normPyTuple(self, valu):
1652
1652
  if len(valu) != 2:
1653
- mesg = f'Must be a 2-tuple of type {self.subtype.name}: {repr(valu)[:256]}'
1653
+ mesg = f'Must be a 2-tuple of type {self.subtype.name}: {s_common.trimText(repr(valu))}'
1654
1654
  raise s_exc.BadTypeValu(numitems=len(valu), name=self.name, mesg=mesg)
1655
1655
 
1656
1656
  minv = self.subtype.norm(valu[0])[0]
@@ -1762,7 +1762,7 @@ class Str(Type):
1762
1762
 
1763
1763
  def _normPyFloat(self, valu):
1764
1764
  deci = s_common.hugectx.create_decimal(str(valu))
1765
- return format(deci, 'f'), {}
1765
+ return self._normPyStr(format(deci, 'f'))
1766
1766
 
1767
1767
  def _normPyStr(self, valu):
1768
1768
 
@@ -2262,11 +2262,11 @@ class Time(IntBase):
2262
2262
  '''
2263
2263
 
2264
2264
  if not isinstance(vals, (list, tuple)):
2265
- mesg = f'Must be a 2-tuple: {repr(vals)[:256]}'
2265
+ mesg = f'Must be a 2-tuple: {s_common.trimText(repr(vals))}'
2266
2266
  raise s_exc.BadCmprValu(itemtype=type(vals), cmpr='range=', mesg=mesg)
2267
2267
 
2268
2268
  if len(vals) != 2:
2269
- mesg = f'Must be a 2-tuple: {repr(vals)[:256]}'
2269
+ mesg = f'Must be a 2-tuple: {s_common.trimText(repr(vals))}'
2270
2270
  raise s_exc.BadCmprValu(itemtype=type(vals), cmpr='range=', mesg=mesg)
2271
2271
 
2272
2272
  tick, tock = self.getTickTock(vals)
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, 170, 0)
226
+ version = (2, 172, 0)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = '0e74d28df290e631963a8e06c8e605531a96aeab'
228
+ commit = '3e33d8a8cbdfd0f4f6f9a31d664578d817d9ccb8'
synapse/lib/view.py CHANGED
@@ -708,7 +708,10 @@ class View(s_nexus.Pusher): # type: ignore
708
708
  layers.extend(view.layers)
709
709
 
710
710
  self.layers = layers
711
- await self.info.set('layers', [layr.iden for layr in layers])
711
+ layridens = [layr.iden for layr in layers]
712
+ await self.info.set('layers', layridens)
713
+
714
+ await self.core.feedBeholder('view:setlayers', {'iden': self.iden, 'layers': layridens}, gates=[self.iden, layridens[0]])
712
715
 
713
716
  async def pack(self):
714
717
  d = {'iden': self.iden}
@@ -1300,6 +1303,9 @@ class View(s_nexus.Pusher): # type: ignore
1300
1303
  self.parent = self.core.reqView(forkiden)
1301
1304
  await self.info.set('parent', forkiden)
1302
1305
 
1306
+ mesg = {'iden': self.iden, 'name': 'parent', 'valu': forkiden}
1307
+ await self.core.feedBeholder('view:set', mesg, gates=[self.iden, self.layers[0].iden])
1308
+
1303
1309
  await self._calcForkLayers()
1304
1310
 
1305
1311
  for view in self.core.views.values():
@@ -1438,11 +1444,7 @@ class View(s_nexus.Pusher): # type: ignore
1438
1444
  if user is None or user.isAdmin() or user.isAdmin(gateiden=parentlayr.iden):
1439
1445
  return
1440
1446
 
1441
- async with await self.parent.snap(user=user) as snap:
1442
- async for nodeedit in fromlayr.iterLayerNodeEdits():
1443
- for offs, perm in s_layer.getNodeEditPerms([nodeedit]):
1444
- self.parent._confirm(user, perm)
1445
- await asyncio.sleep(0)
1447
+ await fromlayr.confirmLayerEditPerms(user, parentlayr.iden)
1446
1448
 
1447
1449
  async def wipeAllowed(self, user=None):
1448
1450
  '''
@@ -1451,10 +1453,8 @@ class View(s_nexus.Pusher): # type: ignore
1451
1453
  if user is None or user.isAdmin():
1452
1454
  return
1453
1455
 
1454
- async for nodeedit in self.layers[0].iterWipeNodeEdits():
1455
- for offs, perm in s_layer.getNodeEditPerms([nodeedit]):
1456
- self._confirm(user, perm)
1457
- await asyncio.sleep(0)
1456
+ layer = self.layers[0]
1457
+ await layer.confirmLayerEditPerms(user, layer.iden, delete=True)
1458
1458
 
1459
1459
  async def runTagAdd(self, node, tag, valu):
1460
1460
 
@@ -1558,14 +1558,14 @@ class View(s_nexus.Pusher): # type: ignore
1558
1558
  async def getTrigger(self, iden):
1559
1559
  trig = self.triggers.get(iden)
1560
1560
  if trig is None:
1561
- raise s_exc.NoSuchIden("Trigger not found")
1561
+ raise s_exc.NoSuchIden(mesg=f"Trigger not found {iden=}", iden=iden)
1562
1562
 
1563
1563
  return trig
1564
1564
 
1565
1565
  async def delTrigger(self, iden):
1566
1566
  trig = self.triggers.get(iden)
1567
1567
  if trig is None:
1568
- raise s_exc.NoSuchIden("Trigger not found")
1568
+ raise s_exc.NoSuchIden(mesg=f"Trigger not found {iden=}", iden=iden)
1569
1569
 
1570
1570
  return await self._push('trigger:del', iden)
1571
1571
 
@@ -1586,7 +1586,7 @@ class View(s_nexus.Pusher): # type: ignore
1586
1586
  async def setTriggerInfo(self, iden, name, valu):
1587
1587
  trig = self.triggers.get(iden)
1588
1588
  if trig is None:
1589
- raise s_exc.NoSuchIden("Trigger not found")
1589
+ raise s_exc.NoSuchIden(mesg=f"Trigger not found {iden=}", iden=iden)
1590
1590
  await trig.set(name, valu)
1591
1591
 
1592
1592
  await self.core.feedBeholder('trigger:set', {'iden': trig.iden, 'view': trig.view.iden, 'name': name, 'valu': valu}, gates=[trig.iden])
synapse/models/base.py CHANGED
@@ -195,8 +195,12 @@ class BaseModule(s_module.CoreModule):
195
195
 
196
196
  ('created', ('time', {}), {
197
197
  'doc': 'The time the note was created.'}),
198
+
198
199
  ('updated', ('time', {}), {
199
200
  'doc': 'The time the note was updated.'}),
201
+
202
+ ('replyto', ('meta:note', {}), {
203
+ 'doc': 'The note is a reply to the specified note.'}),
200
204
  )),
201
205
 
202
206
  ('meta:timeline', {}, (
@@ -213,17 +217,26 @@ class BaseModule(s_module.CoreModule):
213
217
  ('meta:timeline:taxonomy', {}, ()),
214
218
 
215
219
  ('meta:event', {}, (
220
+
216
221
  ('timeline', ('meta:timeline', {}), {
217
222
  'doc': 'The timeline containing the event.'}),
223
+
218
224
  ('title', ('str', {}), {
219
225
  'doc': 'A title for the event.'}),
226
+
220
227
  ('summary', ('str', {}), {
221
228
  'disp': {'hint': 'text'},
222
229
  'doc': 'A prose summary of the event.'}),
230
+
223
231
  ('time', ('time', {}), {
224
232
  'doc': 'The time that the event occurred.'}),
233
+
234
+ ('index', ('int', {}), {
235
+ 'doc': 'The index of this event in a timeline without exact times.'}),
236
+
225
237
  ('duration', ('duration', {}), {
226
238
  'doc': 'The duration of the event.'}),
239
+
227
240
  ('type', ('meta:event:taxonomy', {}), {
228
241
  'doc': 'Type of event.'}),
229
242
  )),
synapse/models/biz.py CHANGED
@@ -175,22 +175,36 @@ class BizModule(s_module.CoreModule):
175
175
  }),
176
176
  )),
177
177
  ('biz:listing', {}, (
178
+
178
179
  ('seller', ('ps:contact', {}), {
179
180
  'doc': 'The contact information for the seller.'}),
181
+
180
182
  ('product', ('biz:product', {}), {
181
183
  'doc': 'The product being offered.'}),
184
+
182
185
  ('service', ('biz:service', {}), {
183
186
  'doc': 'The service being offered.'}),
187
+
184
188
  ('current', ('bool', {}), {
185
189
  'doc': 'Set to true if the offer is still current.'}),
190
+
186
191
  ('time', ('time', {}), {
187
192
  'doc': 'The first known offering of this product/service by the organization for the asking price.'}),
193
+
188
194
  ('expires', ('time', {}), {
189
195
  'doc': 'Set if the offer has a known expiration date.'}),
196
+
190
197
  ('price', ('econ:price', {}), {
191
198
  'doc': 'The asking price of the product or service.'}),
199
+
192
200
  ('currency', ('econ:currency', {}), {
193
201
  'doc': 'The currency of the asking price.'}),
202
+
203
+ ('count:total', ('int', {'min': 0}), {
204
+ 'doc': 'The number of instances for sale.'}),
205
+
206
+ ('count:remaining', ('int', {'min': 0}), {
207
+ 'doc': 'The current remaining number of instances for sale.'}),
194
208
  )),
195
209
  ('biz:service', {}, (
196
210
  ('provider', ('ps:contact', {}), {
@@ -169,6 +169,9 @@ class EconModule(s_module.CoreModule):
169
169
 
170
170
  ('currency', ('econ:currency', {}), {
171
171
  'doc': 'The econ:price of the purchase'}),
172
+
173
+ ('listing', ('biz:listing', {}), {
174
+ 'doc': 'The purchase was made based on the given listing.'}),
172
175
  )),
173
176
 
174
177
  ('econ:receipt:item', {}, (