synapse 2.200.0__py311-none-any.whl → 2.201.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/datamodel.py CHANGED
@@ -1160,10 +1160,9 @@ class Model:
1160
1160
  for propname, typedef, propinfo in iface.get('props', ()):
1161
1161
 
1162
1162
  # allow form props to take precedence
1163
- if form.prop(propname) is not None:
1164
- continue
1163
+ if (prop := form.prop(propname)) is None:
1164
+ prop = self._addFormProp(form, propname, typedef, propinfo)
1165
1165
 
1166
- prop = self._addFormProp(form, propname, typedef, propinfo)
1167
1166
  self.ifaceprops[f'{name}:{propname}'].append(prop.full)
1168
1167
 
1169
1168
  if subifaces is not None:
synapse/lib/agenda.py CHANGED
@@ -260,6 +260,7 @@ class _Appt:
260
260
  'created',
261
261
  'enabled',
262
262
  'errcount',
263
+ 'loglevel',
263
264
  'nexttime',
264
265
  'lasterrs',
265
266
  'isrunning',
@@ -269,7 +270,7 @@ class _Appt:
269
270
  'lastfinishtime',
270
271
  }
271
272
 
272
- def __init__(self, stor, iden, recur, indx, query, creator, recs, nexttime=None, view=None, created=None, pool=False):
273
+ def __init__(self, stor, iden, recur, indx, query, creator, recs, nexttime=None, view=None, created=None, pool=False, loglevel=None):
273
274
  self.doc = ''
274
275
  self.name = ''
275
276
  self.task = None
@@ -284,6 +285,7 @@ class _Appt:
284
285
  self._recidxnexttime = None # index of rec who is up next
285
286
  self.view = view
286
287
  self.created = created
288
+ self.loglevel = loglevel
287
289
 
288
290
  if self.recur and not self.recs:
289
291
  raise s_exc.BadTime(mesg='A recurrent appointment with no records')
@@ -364,7 +366,10 @@ class _Appt:
364
366
  if val['ver'] != 1:
365
367
  raise s_exc.BadStorageVersion(mesg=f"Found version {val['ver']}") # pragma: no cover
366
368
  recs = [ApptRec.unpack(tupl) for tupl in val['recs']]
367
- appt = cls(stor, val['iden'], val['recur'], val['indx'], val['query'], val['creator'], recs, nexttime=val['nexttime'], view=val.get('view'))
369
+ # TODO: MOAR INSANITY
370
+ loglevel = val.get('loglevel', 'WARNING')
371
+ appt = cls(stor, val['iden'], val['recur'], val['indx'], val['query'], val['creator'], recs,
372
+ nexttime=val['nexttime'], view=val.get('view'), loglevel=loglevel)
368
373
  appt.doc = val.get('doc', '')
369
374
  appt.name = val.get('name', '')
370
375
  appt.pool = val.get('pool', False)
@@ -373,6 +378,7 @@ class _Appt:
373
378
  appt.lastfinishtime = val['lastfinishtime']
374
379
  appt.lastresult = val['lastresult']
375
380
  appt.enabled = val['enabled']
381
+ appt.lasterrs = list(val.get('lasterrs', []))
376
382
 
377
383
  return appt
378
384
 
@@ -422,8 +428,10 @@ class _Appt:
422
428
  logger.warning('_Appt.edits() Invalid attribute received: %s = %r', name, valu, extra=extra)
423
429
  continue
424
430
 
425
- else:
426
- setattr(self, name, valu)
431
+ if name == 'lasterrs' and not isinstance(valu, list):
432
+ valu = list(valu)
433
+
434
+ setattr(self, name, valu)
427
435
 
428
436
  await self.save()
429
437
 
@@ -559,6 +567,7 @@ class Agenda(s_base.Base):
559
567
  creator = cdef.get('creator')
560
568
  view = cdef.get('view')
561
569
  created = cdef.get('created')
570
+ loglevel = cdef.get('loglevel', 'WARNING')
562
571
 
563
572
  pool = cdef.get('pool', False)
564
573
 
@@ -603,7 +612,9 @@ class Agenda(s_base.Base):
603
612
  incvals = (incvals, )
604
613
  recs.extend(ApptRec(rd, incunit, v) for (rd, v) in itertools.product(reqdicts, incvals))
605
614
 
606
- appt = _Appt(self, iden, recur, indx, query, creator, recs, nexttime=nexttime, view=view, created=created, pool=pool)
615
+ # TODO: this is insane. Make _Appt take the cdef directly...
616
+ appt = _Appt(self, iden, recur, indx, query, creator, recs, nexttime=nexttime, view=view,
617
+ created=created, pool=pool, loglevel=loglevel)
607
618
  self._addappt(iden, appt)
608
619
 
609
620
  appt.doc = cdef.get('doc', '')
@@ -841,7 +852,10 @@ class Agenda(s_base.Base):
841
852
  extra={'synapse': {'iden': appt.iden, 'name': appt.name, 'user': user.iden, 'text': appt.query,
842
853
  'username': user.name, 'view': appt.view}})
843
854
  starttime = self._getNowTick()
855
+
844
856
  success = False
857
+ loglevel = s_common.normLogLevel(appt.loglevel)
858
+
845
859
  try:
846
860
  opts = {
847
861
  'user': user.iden,
@@ -861,6 +875,11 @@ class Agenda(s_base.Base):
861
875
  if mesg[0] == 'node':
862
876
  count += 1
863
877
 
878
+ elif mesg[0] == 'warn' and loglevel <= logging.WARNING:
879
+ text = mesg[1].get('mesg', '<missing message>')
880
+ extra = await self.core.getLogExtra(cron=appt.iden, **mesg[1])
881
+ logger.warning(f'Cron job {appt.iden} issued warning: {text}', extra=extra)
882
+
864
883
  elif mesg[0] == 'err':
865
884
  excname, errinfo = mesg[1]
866
885
  errinfo.pop('eline', None)
synapse/lib/ast.py CHANGED
@@ -217,13 +217,10 @@ class Query(AstNode):
217
217
  genr = await stack.enter_async_context(contextlib.aclosing(oper.run(runt, genr)))
218
218
 
219
219
  async for node, path in genr:
220
- runt.tick()
221
220
  yield node, path
222
221
 
223
222
  async def iterNodePaths(self, runt, genr=None):
224
223
 
225
- count = 0
226
-
227
224
  self.optimize()
228
225
  self.validate(runt)
229
226
 
@@ -231,18 +228,18 @@ class Query(AstNode):
231
228
  if genr is None:
232
229
  genr = runt.getInput()
233
230
 
231
+ count = 0
232
+ limit = runt.getOpt('limit')
233
+
234
234
  async with contextlib.aclosing(self.run(runt, genr)) as agen:
235
235
  async for node, path in agen:
236
236
 
237
- runt.tick()
238
-
239
237
  yield node, path
240
238
 
241
- count += 1
242
-
243
- limit = runt.getOpt('limit')
244
- if limit is not None and count >= limit:
245
- break
239
+ if limit is not None:
240
+ count += 1
241
+ if count >= limit:
242
+ break
246
243
 
247
244
  class Lookup(Query):
248
245
  '''
synapse/lib/schemas.py CHANGED
@@ -97,6 +97,7 @@ _CronJobSchema = {
97
97
  'name': {'type': 'string'},
98
98
  'pool': {'type': 'boolean'},
99
99
  'doc': {'type': 'string'},
100
+ 'loglevel': {'type': 'string', 'enum': list(s_const.LOG_LEVEL_CHOICES.keys())},
100
101
  'incunit': {
101
102
  'oneOf': [
102
103
  {'type': 'null'},
synapse/lib/storm.py CHANGED
@@ -1,7 +1,6 @@
1
1
  import types
2
2
  import pprint
3
3
  import asyncio
4
- import hashlib
5
4
  import logging
6
5
  import argparse
7
6
  import contextlib
@@ -22,13 +21,10 @@ import synapse.lib.snap as s_snap
22
21
  import synapse.lib.cache as s_cache
23
22
  import synapse.lib.layer as s_layer
24
23
  import synapse.lib.scope as s_scope
25
- import synapse.lib.config as s_config
26
24
  import synapse.lib.autodoc as s_autodoc
27
- import synapse.lib.grammar as s_grammar
28
25
  import synapse.lib.msgpack as s_msgpack
29
26
  import synapse.lib.schemas as s_schemas
30
27
  import synapse.lib.spooled as s_spooled
31
- import synapse.lib.version as s_version
32
28
  import synapse.lib.hashitem as s_hashitem
33
29
  import synapse.lib.stormctrl as s_stormctrl
34
30
  import synapse.lib.stormtypes as s_stormtypes
@@ -1726,9 +1722,6 @@ class Runtime(s_base.Base):
1726
1722
  async def warnonce(self, mesg, **info):
1727
1723
  return await self.snap.warnonce(mesg, **info)
1728
1724
 
1729
- def tick(self):
1730
- pass
1731
-
1732
1725
  def cancel(self):
1733
1726
  self.task.cancel()
1734
1727
 
@@ -1964,7 +1957,6 @@ class Runtime(s_base.Base):
1964
1957
  nodegenr = subgraph.run(self, nodegenr)
1965
1958
 
1966
1959
  async for item in nodegenr:
1967
- self.tick()
1968
1960
  yield item
1969
1961
 
1970
1962
  except RecursionError:
@@ -2847,7 +2839,8 @@ class BatchCmd(Cmd):
2847
2839
  mesg = f'Specified batch size ({size}) is above the maximum (10000).'
2848
2840
  raise s_exc.StormRuntimeError(mesg=mesg)
2849
2841
 
2850
- query = await runt.getStormQuery(self.opts.query)
2842
+ _query = await s_stormtypes.tostr(self.opts.query)
2843
+ query = await runt.getStormQuery(_query)
2851
2844
  doyield = await s_stormtypes.tobool(self.opts.cond)
2852
2845
 
2853
2846
  async with runt.getSubRuntime(query, opts={'vars': {'nodes': []}}) as subr:
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, 200, 0)
226
+ version = (2, 201, 0)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = 'ab9ca513fe33d52df7a3122c0bf4eab6951b53d3'
228
+ commit = 'eed8c13ff316a77ae835539215c862d052d31994'
synapse/models/dns.py CHANGED
@@ -147,7 +147,7 @@ class DnsModule(s_module.CoreModule):
147
147
 
148
148
  ('inet:dns:txt', ('comp', {'fields': (('fqdn', 'inet:fqdn'), ('txt', 'str'))}), {
149
149
  'ex': '(hehe.vertex.link,"fancy TXT record")',
150
- 'doc': 'The result of a DNS MX record lookup.'}),
150
+ 'doc': 'The result of a DNS TXT record lookup.'}),
151
151
 
152
152
  ('inet:dns:type', ('int', {}), {
153
153
  'doc': 'A DNS query/answer type integer.'}),
@@ -67,10 +67,10 @@ class EconModule(s_module.CoreModule):
67
67
  'doc': 'A financial security which is typically traded on an exchange.'}),
68
68
 
69
69
  ('econ:fin:bar', ('guid', {}), {
70
- 'doc': 'A sample of the open, close, high, low prices of a security in a specific time window'}),
70
+ 'doc': 'A sample of the open, close, high, low prices of a security in a specific time window.'}),
71
71
 
72
72
  ('econ:fin:tick', ('guid', {}), {
73
- 'doc': 'A sample of the price of a security at a single moment in time'}),
73
+ 'doc': 'A sample of the price of a security at a single moment in time.'}),
74
74
 
75
75
  ('econ:bank:account:type:taxonomy', ('taxonomy', {}), {
76
76
  'doc': 'A bank account type taxonomy.'}),
@@ -192,10 +192,10 @@ class EconModule(s_module.CoreModule):
192
192
  'doc': 'The campaign that the purchase was in support of.'}),
193
193
 
194
194
  ('price', ('econ:price', {}), {
195
- 'doc': 'The econ:price of the purchase'}),
195
+ 'doc': 'The econ:price of the purchase.'}),
196
196
 
197
197
  ('currency', ('econ:currency', {}), {
198
- 'doc': 'The econ:price of the purchase'}),
198
+ 'doc': 'The econ:price of the purchase.'}),
199
199
 
200
200
  ('listing', ('biz:listing', {}), {
201
201
  'doc': 'The purchase was made based on the given listing.'}),
@@ -283,10 +283,10 @@ class EconModule(s_module.CoreModule):
283
283
  'doc': 'The purchase which the payment was paying for.'}),
284
284
 
285
285
  ('amount', ('econ:price', {}), {
286
- 'doc': 'The amount of money transferred in the payment'}),
286
+ 'doc': 'The amount of money transferred in the payment.'}),
287
287
 
288
288
  ('currency', ('econ:currency', {}), {
289
- 'doc': 'The currency of the payment'}),
289
+ 'doc': 'The currency of the payment.'}),
290
290
 
291
291
  ('memo', ('str', {}), {
292
292
  'doc': 'A small note specified by the payer common in financial transactions.'}),
@@ -339,66 +339,66 @@ class EconModule(s_module.CoreModule):
339
339
  ('econ:fin:exchange', {}, (
340
340
 
341
341
  ('name', ('str', {'lower': True, 'strip': True}), {
342
- 'doc': 'A simple name for the exchange',
342
+ 'doc': 'A simple name for the exchange.',
343
343
  'ex': 'nasdaq'}),
344
344
 
345
345
  ('org', ('ou:org', {}), {
346
- 'doc': 'The organization that operates the exchange'}),
346
+ 'doc': 'The organization that operates the exchange.'}),
347
347
 
348
348
  ('currency', ('econ:currency', {}), {
349
- 'doc': 'The currency used for all transactions in the exchange',
349
+ 'doc': 'The currency used for all transactions in the exchange.',
350
350
  'ex': 'usd'}),
351
351
  )),
352
352
 
353
353
  ('econ:fin:security', {}, (
354
354
 
355
355
  ('exchange', ('econ:fin:exchange', {}), {
356
- 'doc': 'The exchange on which the security is traded'}),
356
+ 'doc': 'The exchange on which the security is traded.'}),
357
357
 
358
358
  ('ticker', ('str', {'lower': True, 'strip': True}), {
359
- 'doc': 'The identifier for this security within the exchange'}),
359
+ 'doc': 'The identifier for this security within the exchange.'}),
360
360
 
361
361
  ('type', ('str', {'lower': True, 'strip': True}), {
362
- 'doc': 'A user defined type such as stock, bond, option, future, or forex'}),
362
+ 'doc': 'A user defined type such as stock, bond, option, future, or forex.'}),
363
363
 
364
364
  ('price', ('econ:price', {}), {
365
- 'doc': 'The last known/available price of the security'}),
365
+ 'doc': 'The last known/available price of the security.'}),
366
366
 
367
367
  ('time', ('time', {}), {
368
- 'doc': 'The time of the last know price sample'}),
368
+ 'doc': 'The time of the last know price sample.'}),
369
369
  )),
370
370
 
371
371
  ('econ:fin:tick', {}, (
372
372
 
373
373
  ('security', ('econ:fin:security', {}), {
374
- 'doc': 'The security measured by the tick'}),
374
+ 'doc': 'The security measured by the tick.'}),
375
375
 
376
376
  ('time', ('time', {}), {
377
- 'doc': 'The time the price was sampled'}),
377
+ 'doc': 'The time the price was sampled.'}),
378
378
 
379
379
  ('price', ('econ:price', {}), {
380
- 'doc': 'The price of the security at the time'}),
380
+ 'doc': 'The price of the security at the time.'}),
381
381
  )),
382
382
 
383
383
  ('econ:fin:bar', {}, (
384
384
 
385
385
  ('security', ('econ:fin:security', {}), {
386
- 'doc': 'The security measured by the bar'}),
386
+ 'doc': 'The security measured by the bar.'}),
387
387
 
388
388
  ('ival', ('ival', {}), {
389
- 'doc': 'The interval of measurement'}),
389
+ 'doc': 'The interval of measurement.'}),
390
390
 
391
391
  ('price:open', ('econ:price', {}), {
392
- 'doc': 'The opening price of the security'}),
392
+ 'doc': 'The opening price of the security.'}),
393
393
 
394
394
  ('price:close', ('econ:price', {}), {
395
- 'doc': 'The closing price of the security'}),
395
+ 'doc': 'The closing price of the security.'}),
396
396
 
397
397
  ('price:low', ('econ:price', {}), {
398
- 'doc': 'The low price of the security'}),
398
+ 'doc': 'The low price of the security.'}),
399
399
 
400
400
  ('price:high', ('econ:price', {}), {
401
- 'doc': 'The high price of the security'}),
401
+ 'doc': 'The high price of the security.'}),
402
402
  )),
403
403
 
404
404
  ('econ:acct:invoice', {}, (
synapse/models/files.py CHANGED
@@ -270,7 +270,7 @@ class FileModule(s_module.CoreModule):
270
270
  ('file', ('file:bytes', {}), {
271
271
  'doc': 'The Mach-O file containing the load command.'}),
272
272
  ('type', ('int', {'enums': s_l_macho.getLoadCmdTypes()}), {
273
- 'doc': 'The type of the load command'}),
273
+ 'doc': 'The type of the load command.'}),
274
274
  ('size', ('int', {}), {
275
275
  'doc': 'The size of the load command structure in bytes.'}),
276
276
  ),
@@ -724,7 +724,7 @@ class FileModule(s_module.CoreModule):
724
724
  ('sha256', ('hash:sha256', {}), {
725
725
  'doc': 'The sha256 hash of the bytes of the Mach-O section.'}),
726
726
  ('offset', ('int', {}), {
727
- 'doc': 'The file offset to the beginning of the section'}),
727
+ 'doc': 'The file offset to the beginning of the section.'}),
728
728
  )),
729
729
 
730
730
  ('file:mime:lnk', {}, (
synapse/models/inet.py CHANGED
@@ -1332,7 +1332,7 @@ class InetModule(s_module.CoreModule):
1332
1332
 
1333
1333
  ('inet:ssl:cert', ('comp', {'fields': (('server', 'inet:server'), ('file', 'file:bytes'))}), {
1334
1334
  'deprecated': True,
1335
- 'doc': 'Deprecated. Please use inet:tls:servercert or inet:tls:clientcert',
1335
+ 'doc': 'Deprecated. Please use inet:tls:servercert or inet:tls:clientcert.',
1336
1336
  }),
1337
1337
 
1338
1338
  ('inet:port', ('int', {'min': 0, 'max': 0xffff}), {
@@ -3802,7 +3802,7 @@ class InetModule(s_module.CoreModule):
3802
3802
 
3803
3803
  ('client:address', ('inet:client', {}), {
3804
3804
  'deprecated': True,
3805
- 'doc': 'Deprecated. Please use :client'}),
3805
+ 'doc': 'Deprecated. Please use :client.'}),
3806
3806
 
3807
3807
  ('client:software', ('it:prod:softver', {}), {
3808
3808
  'doc': 'The client software version used to send the message.'}),
@@ -641,10 +641,10 @@ class ItModule(s_module.CoreModule):
641
641
  'doc': 'Semantic Version type.',
642
642
  }),
643
643
  ('it:sec:cpe', 'synapse.models.infotech.Cpe23Str', {}, {
644
- 'doc': 'A NIST CPE 2.3 Formatted String',
644
+ 'doc': 'A NIST CPE 2.3 Formatted String.',
645
645
  }),
646
646
  ('it:sec:cpe:v2_2', 'synapse.models.infotech.Cpe22Str', {}, {
647
- 'doc': 'A NIST CPE 2.2 Formatted String',
647
+ 'doc': 'A NIST CPE 2.2 Formatted String.',
648
648
  }),
649
649
  ),
650
650
  'types': (
@@ -697,7 +697,7 @@ class ItModule(s_module.CoreModule):
697
697
  'ex': 'cve-2012-0158'
698
698
  }),
699
699
  ('it:sec:cwe', ('str', {'regex': r'^CWE-[0-9]{1,8}$'}), {
700
- 'doc': 'NIST NVD Common Weaknesses Enumeration Specification',
700
+ 'doc': 'NIST NVD Common Weaknesses Enumeration Specification.',
701
701
  'ex': 'CWE-120',
702
702
  }),
703
703
 
@@ -1297,7 +1297,7 @@ class ItModule(s_module.CoreModule):
1297
1297
  )),
1298
1298
  ('it:account', {}, (
1299
1299
  ('user', ('inet:user', {}), {
1300
- 'doc': 'The username associated with the account',
1300
+ 'doc': 'The username associated with the account.',
1301
1301
  }),
1302
1302
  ('contact', ('ps:contact', {}), {
1303
1303
  'doc': 'Additional contact information associated with this account.',
@@ -1977,7 +1977,7 @@ class ItModule(s_module.CoreModule):
1977
1977
  'doc': 'The commit that produced this diff.'}),
1978
1978
 
1979
1979
  ('file', ('file:bytes', {}), {
1980
- 'doc': 'The file after the commit has been applied'}),
1980
+ 'doc': 'The file after the commit has been applied.'}),
1981
1981
 
1982
1982
  ('path', ('file:path', {}), {
1983
1983
  'doc': 'The path to the file in the repo that the diff is being applied to.'}),
@@ -2272,7 +2272,7 @@ class ItModule(s_module.CoreModule):
2272
2272
  'disp': {'hint': 'text'},
2273
2273
  }),
2274
2274
  ('cpe', ('it:sec:cpe', {}), {
2275
- 'doc': 'The NIST CPE 2.3 string specifying this software version',
2275
+ 'doc': 'The NIST CPE 2.3 string specifying this software version.',
2276
2276
  }),
2277
2277
  ('cves', ('array', {'type': 'it:sec:cve', 'uniq': True, 'sorted': True}), {
2278
2278
  'doc': 'A list of CVEs that apply to this software version.',
@@ -2420,7 +2420,7 @@ class ItModule(s_module.CoreModule):
2420
2420
  'doc': 'Set if this result was part of running multiple scanners.'}),
2421
2421
 
2422
2422
  ('multi:count', ('int', {'min': 0}), {
2423
- 'doc': 'The total number of scanners which were run by a multi-scanner'}),
2423
+ 'doc': 'The total number of scanners which were run by a multi-scanner.'}),
2424
2424
 
2425
2425
  ('multi:count:benign', ('int', {'min': 0}), {
2426
2426
  'doc': 'The number of scanners which returned a benign verdict.'}),
synapse/models/person.py CHANGED
@@ -198,7 +198,7 @@ class PsModule(s_module.CoreModule):
198
198
  'doc': 'The last date the student attended a class.',
199
199
  }),
200
200
  ('classes', ('array', {'type': 'edu:class', 'uniq': True, 'sorted': True}), {
201
- 'doc': 'The classes attended by the student',
201
+ 'doc': 'The classes attended by the student.',
202
202
  }),
203
203
  ('achievement', ('ps:achievement', {}), {
204
204
  'doc': 'The achievement awarded to the individual.',
synapse/models/proj.py CHANGED
@@ -173,7 +173,7 @@ class ProjectModule(s_module.CoreModule):
173
173
  'doc': 'The ticket the comment was added to.'}),
174
174
 
175
175
  ('text', ('str', {}), {
176
- 'doc': 'The text of the comment'}),
176
+ 'doc': 'The text of the comment.'}),
177
177
  # -(refs)> thing comment is about
178
178
  )),
179
179
 
@@ -244,7 +244,8 @@ class ProjectModule(s_module.CoreModule):
244
244
  'doc': 'The sprint that contains the ticket.'}),
245
245
 
246
246
  ('type', ('str', {'lower': True, 'strip': True}), {
247
- 'doc': 'The type of ticket. (eg story / bug)'}),
247
+ 'doc': 'The type of ticket.',
248
+ 'ex': 'bug'}),
248
249
  )),
249
250
  ),
250
251
  }),
synapse/models/risk.py CHANGED
@@ -97,7 +97,7 @@ class RiskModule(s_module.CoreModule):
97
97
  },
98
98
  }),
99
99
  ('risk:mitigation:type:taxonomy', ('taxonomy', {}), {
100
- 'interaces': ('taxonomy',),
100
+ 'interfaces': ('meta:taxonomy',),
101
101
  'doc': 'A taxonomy of mitigation types.',
102
102
  }),
103
103
  ('risk:mitigation', ('guid', {}), {
@@ -102,7 +102,7 @@ class TransportModule(s_module.CoreModule):
102
102
  'doc': 'An individual sea vessel.'}),
103
103
 
104
104
  ('transport:sea:mmsi', ('str', {'regex': '[0-9]{9}'}), {
105
- 'doc': 'A Maritime Mobile Service Identifier'}),
105
+ 'doc': 'A Maritime Mobile Service Identifier.'}),
106
106
 
107
107
  ('transport:sea:imo', ('str', {'lower': True, 'strip': True, 'replace': ((' ', ''),), 'regex': '^imo[0-9]{7}$'}), {
108
108
  'doc': 'An International Maritime Organization registration number.'}),
@@ -349,7 +349,7 @@ class TransportModule(s_module.CoreModule):
349
349
  )),
350
350
  ('transport:air:port', {}, (
351
351
  ('name', ('str', {'lower': True, 'onespace': True}), {
352
- 'doc': 'The name of the airport'}),
352
+ 'doc': 'The name of the airport.'}),
353
353
  ('place', ('geo:place', {}), {
354
354
  'doc': 'The place where the IATA airport code is assigned.'}),
355
355
  )),
@@ -462,7 +462,7 @@ class TransportModule(s_module.CoreModule):
462
462
  'doc': 'Deprecated. Please use :phys:length.'}),
463
463
 
464
464
  ('beam', ('geo:dist', {}), {
465
- 'doc': 'The official overall vessel beam'}),
465
+ 'doc': 'The official overall vessel beam.'}),
466
466
 
467
467
  ('flag', ('iso:3166:cc', {}), {
468
468
  'doc': 'The country the vessel is flagged to.'}),
@@ -7397,6 +7397,9 @@ class CortexBasicTest(s_t_utils.SynTest):
7397
7397
  self.len(1, await core.nodes('media:news -(refs)> *', opts={'view': altview}))
7398
7398
  self.eq(2, await proxy.feedFromAxon(sha256))
7399
7399
 
7400
+ opts['limit'] = 1
7401
+ self.len(1, await alist(proxy.exportStorm('media:news inet:email', opts=opts)))
7402
+
7400
7403
  async with self.getHttpSess(port=port) as sess:
7401
7404
  resp = await sess.post(f'https://localhost:{port}/api/v1/storm/export')
7402
7405
  self.eq(401, resp.status)
@@ -1098,6 +1098,15 @@ class AgendaTest(s_t_utils.SynTest):
1098
1098
  self.gt(cdef00['laststarttime'], 0)
1099
1099
  self.eq(cdef00['laststarttime'], cdef01['laststarttime'])
1100
1100
 
1101
+ async def test_agenda_warnings(self):
1102
+
1103
+ async with self.getTestCore() as core:
1104
+ with self.getAsyncLoggerStream('synapse.lib.agenda', 'issued warning: oh hai') as stream:
1105
+ q = '$lib.warn("oh hai")'
1106
+ msgs = await core.stormlist('cron.at --now $q', opts={'vars': {'q': q}})
1107
+ self.stormHasNoWarnErr(msgs)
1108
+ self.true(await stream.wait(timeout=6))
1109
+
1101
1110
  async def test_agenda_graceful_promotion_with_running_cron(self):
1102
1111
 
1103
1112
  async with self.getTestAha() as aha:
@@ -1221,3 +1230,35 @@ class AgendaTest(s_t_utils.SynTest):
1221
1230
 
1222
1231
  crons = await core.callStorm('return($lib.cron.list())')
1223
1232
  self.len(1, crons)
1233
+
1234
+ async def test_agenda_lasterrs(self):
1235
+
1236
+ async with self.getTestCore() as core:
1237
+
1238
+ cdef = {
1239
+ 'iden': 'test',
1240
+ 'creator': core.auth.rootuser.iden,
1241
+ 'storm': '[ test:str=foo ]',
1242
+ 'reqs': {},
1243
+ 'incunit': s_tu.MINUTE,
1244
+ 'incvals': 1
1245
+ }
1246
+
1247
+ await core.agenda.add(cdef)
1248
+ appt = await core.agenda.get('test')
1249
+
1250
+ self.true(isinstance(appt.lasterrs, list))
1251
+ self.eq(appt.lasterrs, [])
1252
+
1253
+ edits = {
1254
+ 'lasterrs': ('error1', 'error2'),
1255
+ }
1256
+ await appt.edits(edits)
1257
+
1258
+ self.true(isinstance(appt.lasterrs, list))
1259
+ self.eq(appt.lasterrs, ['error1', 'error2'])
1260
+
1261
+ await core.agenda._load_all()
1262
+ appt = await core.agenda.get('test')
1263
+ self.true(isinstance(appt.lasterrs, list))
1264
+ self.eq(appt.lasterrs, ['error1', 'error2'])
@@ -1077,6 +1077,9 @@ class AstTest(s_test.SynTest):
1077
1077
  self.len(1, await core.nodes('inet:proto:request:sandbox:file'))
1078
1078
  self.len(1, await core.nodes('it:host:activity:sandbox:file'))
1079
1079
 
1080
+ self.len(1, await core.nodes('[ it:exec:reg:get=* :host=(host,) ]'))
1081
+ self.len(4, await core.nodes('it:host:activity:host=(host,)'))
1082
+
1080
1083
  async def test_ast_edge_walknjoin(self):
1081
1084
 
1082
1085
  async with self.getTestCore() as core:
@@ -5038,7 +5038,7 @@ class StormTest(s_t_utils.SynTest):
5038
5038
  q = '''
5039
5039
  for $i in $lib.range(12) {[ test:str=$i ]}
5040
5040
 
5041
- batch $lib.true --size 5 {
5041
+ batch $lib.true --size 5 ${
5042
5042
  $vals=([])
5043
5043
  for $n in $nodes { $vals.append($n.repr()) }
5044
5044
  $lib.print($lib.str.join(',', $vals))
@@ -610,6 +610,10 @@ class RiskModelTest(s_t_utils.SynTest):
610
610
  self.len(1, await core.nodes('risk:mitigation -> it:mitre:attack:mitigation'))
611
611
  self.len(1, await core.nodes('risk:mitigation -> risk:mitigation:type:taxonomy'))
612
612
 
613
+ nodes = await core.nodes('risk:mitigation:type:taxonomy=foo.bar [ :desc="foo that bars"]')
614
+ self.len(1, nodes)
615
+ self.eq('foo that bars', nodes[0].get('desc'))
616
+
613
617
  async def test_model_risk_tool_software(self):
614
618
 
615
619
  async with self.getTestCore() as core:
@@ -40,6 +40,11 @@ class TestAutoDoc(s_t_utils.SynTest):
40
40
  self.isin('+==========+', s)
41
41
  self.isin('+deprecated+', s)
42
42
 
43
+ self.isin('''This type implements the following interfaces:
44
+
45
+ * ``inet:service:object``
46
+ * ``phys:object``''', s)
47
+
43
48
  with s_common.genfile(path, 'datamodel_forms.rst') as fd:
44
49
  buf = fd.read()
45
50
 
synapse/tests/utils.py CHANGED
@@ -341,10 +341,10 @@ testmodel = {
341
341
  ('foo', 'test:int'),
342
342
  ('bar', ('str', {'lower': True}),),
343
343
  )}), {'doc': 'A complex comp type.'}),
344
- ('test:hexa', ('hex', {}), {'doc': 'anysize test hex type'}),
345
- ('test:hex4', ('hex', {'size': 4}), {'doc': 'size 4 test hex type'}),
346
- ('test:hexpad', ('hex', {'size': 8, 'zeropad': True}), {'doc': 'size 8 test hex type, zero padded'}),
347
- ('test:zeropad', ('hex', {'zeropad': 20}), {'doc': 'test hex type, zero padded to 40 bytes'}),
344
+ ('test:hexa', ('hex', {}), {'doc': 'anysize test hex type.'}),
345
+ ('test:hex4', ('hex', {'size': 4}), {'doc': 'size 4 test hex type.'}),
346
+ ('test:hexpad', ('hex', {'size': 8, 'zeropad': True}), {'doc': 'size 8 test hex type, zero padded.'}),
347
+ ('test:zeropad', ('hex', {'zeropad': 20}), {'doc': 'test hex type, zero padded to 40 bytes.'}),
348
348
 
349
349
  ('test:pivtarg', ('str', {}), {}),
350
350
  ('test:pivcomp', ('comp', {'fields': (('targ', 'test:pivtarg'), ('lulz', 'test:str'))}), {}),
@@ -365,7 +365,7 @@ testmodel = {
365
365
  'interfaces': ('file:mime:msoffice',)
366
366
  }), {}),
367
367
 
368
- ('test:runt', ('str', {'lower': True, 'strip': True}), {'doc': 'A Test runt node'}),
368
+ ('test:runt', ('str', {'lower': True, 'strip': True}), {'doc': 'A Test runt node.'}),
369
369
  ('test:hasiface', ('str', {}), {'interfaces': ('test:interface',)}),
370
370
  ('test:hasiface2', ('str', {}), {'interfaces': ('test:interface',)}),
371
371
  ),
@@ -503,8 +503,8 @@ testmodel = {
503
503
  )),
504
504
 
505
505
  ('test:ro', {}, (
506
- ('writeable', ('str', {}), {'doc': 'writeable property'}),
507
- ('readable', ('str', {}), {'doc': 'ro property', 'ro': True}),
506
+ ('writeable', ('str', {}), {'doc': 'writeable property.'}),
507
+ ('readable', ('str', {}), {'doc': 'ro property.', 'ro': True}),
508
508
  )),
509
509
 
510
510
  ('test:hasiface', {}, ()),
synapse/tools/autodoc.py CHANGED
@@ -43,6 +43,9 @@ info_ignores = (
43
43
  'stortype',
44
44
  'bases',
45
45
  'custom',
46
+ 'template',
47
+ 'display',
48
+ 'deprecated',
46
49
  )
47
50
 
48
51
  raw_back_slash_colon = r'\:'
@@ -177,6 +180,12 @@ def processTypes(rst, dochelp, types):
177
180
  rst.addLines(doc,
178
181
  f'The ``{name}`` type is derived from the base type: ``{ttyp}``.')
179
182
 
183
+ ifaces = info.pop('interfaces', None)
184
+ if ifaces:
185
+ rst.addLines('', 'This type implements the following interfaces:', '')
186
+ for iface in ifaces:
187
+ rst.addLines(f' * ``{iface}``')
188
+
180
189
  _ = info.pop('doc', None)
181
190
  ex = info.pop('ex', None)
182
191
  if ex:
@@ -188,7 +197,7 @@ def processTypes(rst, dochelp, types):
188
197
 
189
198
  if topt:
190
199
  rst.addLines('',
191
- f'The type ``{name}`` has the following options set:',
200
+ f'This type has the following options set:',
192
201
  ''
193
202
  )
194
203
 
@@ -410,6 +419,9 @@ def processFormsProps(rst, dochelp, forms, univ_names, alledges):
410
419
  if dst is None:
411
420
  dst = '*'
412
421
 
422
+ for key in info_ignores:
423
+ enfo.pop(key, None)
424
+
413
425
  if enfo:
414
426
  logger.warning(f'{name} => Light edge {enam} has unhandled info: {enfo}')
415
427
  _edges.append((src, enam, dst, doc))
@@ -447,6 +459,9 @@ def processFormsProps(rst, dochelp, forms, univ_names, alledges):
447
459
  if dst is None:
448
460
  dst = '*'
449
461
 
462
+ for key in info_ignores:
463
+ enfo.pop(key, None)
464
+
450
465
  if enfo:
451
466
  logger.warning(f'{name} => Light edge {enam} has unhandled info: {enfo}')
452
467
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: synapse
3
- Version: 2.200.0
3
+ Version: 2.201.0
4
4
  Summary: Synapse Intelligence Analysis Framework
5
5
  Author-email: The Vertex Project LLC <root@vertex.link>
6
6
  License: Apache License 2.0
@@ -5,7 +5,7 @@ synapse/common.py,sha256=dY9zEDHkJyUH6DT1wPPBxJYzcgh03rzR2R0760F5eyM,37847
5
5
  synapse/cortex.py,sha256=nvI8IbdCMMA_mFdumL8D_dIctzuVwKWUkr8jHolVdJc,261218
6
6
  synapse/cryotank.py,sha256=2-MzdTZ1AofkBp2ew3ZrZLo33rHRtNVTlr4YlXEfdrc,12130
7
7
  synapse/daemon.py,sha256=hSD0-sXPGwblcbnCKRvsx9DCd-2cplB89dLWIlAN4UU,17051
8
- synapse/datamodel.py,sha256=6z8Aa5T2a5WQKQqh3loR0kn83hKiC0jvMPFA7Mig1To,40362
8
+ 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
@@ -83,9 +83,9 @@ synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-sch
83
83
  synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/relationship.json,sha256=9X6FOE_f31GFlZEXjlgqlfRLN96ZlnxZew_rn7fVxVQ,2839
84
84
  synapse/data/jsonschemas/raw.githubusercontent.com/oasis-open/cti-stix2-json-schemas/stix2.1/schemas/sros/sighting.json,sha256=f1T3r4CRcJP0743qmAlVCdNvi5ASrOU42PSoiDNlRqc,3575
85
85
  synapse/lib/__init__.py,sha256=qLS7nt8-Iot8jnD2Xss_6wZi5lJoyv2rqxF9kkektT0,129
86
- synapse/lib/agenda.py,sha256=7t7qWkflLyeiaI-tADFsM7xUk9sLDhkagdI6sE-kR14,33566
86
+ synapse/lib/agenda.py,sha256=v3g6LC7lD9i1V5sngnmpw9AYZTar6LwBu1or2qQ8QXc,34429
87
87
  synapse/lib/aha.py,sha256=atfXvPg4fqhEBIdpMdV2ctS6gYvP6SBfcgOrq19Tn7s,55717
88
- synapse/lib/ast.py,sha256=UnJX5VWHK0_fjfFSkgCxeM9l7ka4cnTgLaBBg2IvXxk,166334
88
+ synapse/lib/ast.py,sha256=fLVJwGFTtRUZWdKcxzd2PPCErDHfzt47aLT1wALwUSI,166296
89
89
  synapse/lib/auth.py,sha256=xa4f3TkFuoNLL0H14dPGTfqnHAXLEEPyrEqn__8ouSc,54305
90
90
  synapse/lib/autodoc.py,sha256=eTwyKM0msJFmLmZR1OxKFVAb8wcMgJ2q72Ccphsi-u8,23226
91
91
  synapse/lib/base.py,sha256=FfS6k30ZcS1CVfHPa5LNKog1f48rJ0xE14PI89vW7tM,23634
@@ -131,7 +131,7 @@ synapse/lib/queue.py,sha256=omMtqD4HWg2mLOhhtIe4pA_evz234lJ9uhlAhC_xbW4,3879
131
131
  synapse/lib/ratelimit.py,sha256=BIeFPZb9Bk5GFIVvhM43Uw1s0abY6z7NgTuBorVajz4,1124
132
132
  synapse/lib/reflect.py,sha256=j7Y522UzAwNswUehyfi9kHFNkTxuHXsFuEKY4ATXWTQ,2783
133
133
  synapse/lib/rstorm.py,sha256=zZPC3sB2zDqdjhgpXwA1aka7CLTDYaeieTxIDfmwRBY,19656
134
- synapse/lib/schemas.py,sha256=ptWc4rpfCTxIcquZ-seczFiedBtw7B_va7061EBgoD4,37286
134
+ synapse/lib/schemas.py,sha256=yQytzVbNRolrfbEqblzdA2740vo8XYIRqwaaDUO94sc,37374
135
135
  synapse/lib/scope.py,sha256=0CuSXLG_7pNleC1BcJ8_WbA50DswrX4DNjW5MyGGGNo,5496
136
136
  synapse/lib/scrape.py,sha256=2jU8q79RWUctti1gr4mJ9ZCSAwlbMQzt9iU-yXWQ814,23467
137
137
  synapse/lib/share.py,sha256=HDQR7nb4IOleHB1kIFe6prZQVW7PjPAivSAkPuhNn5A,663
@@ -140,7 +140,7 @@ synapse/lib/slabseqn.py,sha256=LJ2SZEsZlROBAD3mdS-3JxNVVPXXkBW8GIJXsW0OGG8,10287
140
140
  synapse/lib/snap.py,sha256=VUzwMshj_nQkKMb6DnLgL-2JQ4J1ruRlnFDTEti2Cs0,63594
141
141
  synapse/lib/spooled.py,sha256=pKPacX-fvZDUTUWPaKgyct_lk_3eoSsF9Ufh_cn_1fQ,5987
142
142
  synapse/lib/storm.lark,sha256=kdablHB_guDvL_Ob6-JU86ypZ0rLP0QeO_DLKaPf_Ik,27364
143
- synapse/lib/storm.py,sha256=NC-O7fsnHut4NES0ZkyvxghukZdQsqzk2IzLlGBud0k,205408
143
+ synapse/lib/storm.py,sha256=vVRHuNofQ4W50pC-MPO1beWqJstH4oHqwY2NAZIlhdc,205259
144
144
  synapse/lib/storm_format.py,sha256=PrF8Az3GgJ5iu8C2Z4N5hdEnvkWV4EvqRCvWg1X7iT8,4880
145
145
  synapse/lib/stormctrl.py,sha256=3UC2LOHClC17JwYNuo8NeyntuAvIXphjenXEzVP33mY,2523
146
146
  synapse/lib/stormhttp.py,sha256=GwSmdKbY3yFe8tgNazkUAPhmEwP2U2PJTbByPkHAXmk,28846
@@ -156,7 +156,7 @@ synapse/lib/time.py,sha256=FKTYwpdvpuAj8p8sSodRjOxoA7Vu67CIbbXz55gtghk,9231
156
156
  synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
157
157
  synapse/lib/types.py,sha256=u89ukW38oDziRzeA6IWrPwwPD0Ds75u-gwJSXsQ4loY,69708
158
158
  synapse/lib/urlhelp.py,sha256=0B4a0Zzcq4mVsC4MqqU-PkftdRPZsG4Ey_-HzbBzqo0,2528
159
- synapse/lib/version.py,sha256=Vv16Aw6JRNiZyR609JECvuaO7PpqqxEbmdhMPpvIDzw,7162
159
+ synapse/lib/version.py,sha256=th5XM_0QjoFgfK4Sd56lXhqCvvUIfVXbcefcrCkXoao,7162
160
160
  synapse/lib/view.py,sha256=fKRyTCtG2hj0vYnN-ERWQ98euQcLs-n0nvniGG1q_oM,61882
161
161
  synapse/lib/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
162
  synapse/lib/crypto/coin.py,sha256=_dhlkzIrHT8BvHdJOWK7PDThz3sK3dDRnWAUqjRpZJc,4910
@@ -230,28 +230,28 @@ synapse/models/base.py,sha256=KseeDE4qsvBuY8L3oQ7ZnQJYkVyo8fSwSyMQ8-iaQtw,17261
230
230
  synapse/models/belief.py,sha256=lB61Wvp2cgaPlrwqBU2JTU-BOutAVOEKD597sTu0juo,2928
231
231
  synapse/models/biz.py,sha256=01i9qnxrWwWt712dNUCAOHqdL1N0TY84P1utx_O5G8g,14909
232
232
  synapse/models/crypto.py,sha256=dEgg3n6cY1hiBfnL8QbgJW7hQw-DWOKhbLWkq4hyXzQ,30160
233
- synapse/models/dns.py,sha256=S-iU4ScUOKTOy6-bthPYeDrry20crDkcm165MVRF3Q0,15362
233
+ synapse/models/dns.py,sha256=gKAOqoBxL3-wIEgkOEJ7Ycz1SCjy2yzNgKcLuW43wKY,15363
234
234
  synapse/models/doc.py,sha256=dygQ5zskiyRHwEQHGjoUOgS9Dt1KOUbimRoWBji0vbw,6577
235
- synapse/models/economic.py,sha256=7yL15q8a1Q_ARb_BYDJGqrQfB1sDxHbr1_oR8RqEOhM,22703
235
+ synapse/models/economic.py,sha256=oA1E7X86_DqBLjUke5-xpfB_vXn2OsbQbx9MAav68FA,22726
236
236
  synapse/models/entity.py,sha256=vwjx5iVDpxdkGlII5GulgIHuDRX9kJIcO7Ge-XanQ58,415
237
- synapse/models/files.py,sha256=SMoHdlazPBsWM7BE6b2S6kB3xOh4yYPUTljUCxi30TE,34394
237
+ synapse/models/files.py,sha256=4nA0LGK2gKEjErzTnFfIX7kxNn8c_C7xWAfiwWFz5zY,34396
238
238
  synapse/models/geopol.py,sha256=1DGxLJ60QlnSIe3WxxViYQ3KFSwm89vvGc534bbSNBo,11304
239
239
  synapse/models/geospace.py,sha256=Ix54xGdGRZNqLI0r6r9OA1t6vqB3XM1lkoy86Vjt5XA,21155
240
- synapse/models/inet.py,sha256=0b6zGFeU63H9o9YDrhz7RyfHLHNlpAseK2hsmsEYpHg,174558
241
- synapse/models/infotech.py,sha256=G7RKgGny7vOTA281eXafuxkqzgoKZPGrksaNOj_-6vI,152660
240
+ synapse/models/inet.py,sha256=CajAF1E9c0CvjpMruR7Nl66-kDpFJgTuE4ugBarMHOs,174560
241
+ synapse/models/infotech.py,sha256=CtmmBtM_40wvG9SqQl4GGwZFafk9oBGwgQrgvtbzT0E,152667
242
242
  synapse/models/language.py,sha256=hBVVIf5kc_FSIV7HZhWnberoc9ssxuqeff4fqC9iz4o,3640
243
243
  synapse/models/material.py,sha256=UvmnBEkbhBbdbnvWtTlgGJAJlKDrx9E-YSQ3K49ws5M,5405
244
244
  synapse/models/math.py,sha256=5zDLSwGbOcWI6T5-KspPL20sR8Bcs59pnRK2nEELzss,1775
245
245
  synapse/models/media.py,sha256=wdXNzLrHb4YYRZ3NlGombNwZsphwfH20oZQQ9ICq7ZQ,3604
246
246
  synapse/models/orgs.py,sha256=1zAIdOA0mf5O-6RGMcf5oDmLM7kkIjWxZN3voThOAnc,71526
247
- synapse/models/person.py,sha256=IC9dccP0hfzdxl2ZeSnVEfvdte9bxQR_O9C-FJJCIj0,27780
247
+ synapse/models/person.py,sha256=y6ffCN42b9A20jwhfD5cJ6tfvUW2kf3YnTBj4xH7Phc,27781
248
248
  synapse/models/planning.py,sha256=vmrY4d3WRxizrNU1YBe36NGZTuuu4lhGS8KI5lCZ5yQ,7302
249
- synapse/models/proj.py,sha256=VLqeQGaOT_ZqN5Lh6aTsOvDfBUM4FCUGCgC0jfACA68,9879
250
- synapse/models/risk.py,sha256=CuhwyJlnnhiP18aIuV4YaESfwuu-dVGhVoVM9Ayr-cE,57943
249
+ synapse/models/proj.py,sha256=vl-2uZouiWSey8t4lTNA4BxUKhX94rqm3SuLrodQUP8,9904
250
+ synapse/models/risk.py,sha256=knVsNKQrJkgGuihVwWV_qQfO5dvLNvuu98f8zc5g5kI,57949
251
251
  synapse/models/science.py,sha256=oSkKbjmVncYcVkVgx8rhM08XtcsgDgjf3mpunz5kL30,4329
252
252
  synapse/models/syn.py,sha256=u6-EB_2nMCD2LEo3Ir5Iduay2JBl2a2TF1TE26jmr1c,14789
253
253
  synapse/models/telco.py,sha256=S6wGvwK5WikFwwrru9kE10KreQ-RubU288J7atVH-cc,15676
254
- synapse/models/transport.py,sha256=UHWzQjGIRmppV7hFNtkbdiLpLPJj0hqX4Csds0FPGGY,29754
254
+ synapse/models/transport.py,sha256=GVyytNyhp6sB28x1x0bUBETaOXpWyR_JawVvMTlmz5M,29757
255
255
  synapse/models/gov/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
256
  synapse/models/gov/cn.py,sha256=NX0QBac_edA3B1WfWVi2UO6ZGeFEJ6nW2Rzq8t8Rrvg,876
257
257
  synapse/models/gov/intl.py,sha256=rYF_1LHnrWS96sTTVJpa4VYktxUvUmIttmowdcsxMb4,1032
@@ -271,7 +271,7 @@ synapse/tests/test_cmds_boss.py,sha256=SdBwM2qJHFzzfrjWYiZOLBKeye8uru7KeJ3NU_YSk
271
271
  synapse/tests/test_cmds_cortex.py,sha256=LWFz8HyuvsIGjtz2DqXYh-R-5QbiQWzLlQKqew7gabY,17157
272
272
  synapse/tests/test_cmds_hive.py,sha256=aRH_Gh8oF_1BsfpmffyhDDNIqnTqsuF2cavdtGke1-0,5912
273
273
  synapse/tests/test_common.py,sha256=iNwXas9bvrZn5Tz5Ig21RI-c79m6QpwFfbcEYib9IKg,17664
274
- synapse/tests/test_cortex.py,sha256=NB39Gh8MFLqOTwNA58OUfu6env7wU07A0ORAcSx6HbQ,367416
274
+ synapse/tests/test_cortex.py,sha256=QMDZaVV30QVF4cVMmE68wREzDGCOXiT1Fzy23JM-Tn0,367547
275
275
  synapse/tests/test_cryotank.py,sha256=ms2VkL0aUskMi-LArTzRt8LUYw0z_y8nQfOOBDiCkvI,12027
276
276
  synapse/tests/test_daemon.py,sha256=QqKELhm1HF0q_8Kbk0Uf9fnUg3K5nLQ7MocGIyuKKIw,7715
277
277
  synapse/tests/test_data.py,sha256=f8L-q6kpMq8XPG3hq1jwlyaFRQEinSBf7ZlsRFeCuoM,196
@@ -279,9 +279,9 @@ synapse/tests/test_datamodel.py,sha256=B_n5xMJgpxRBiaC8fBOwvNyVLrTcvq8uzFsTqPlQQ
279
279
  synapse/tests/test_exc.py,sha256=QXWEGlstDrOSUPAfaGxnu618NQFjjuoRR6OLhtTITds,1928
280
280
  synapse/tests/test_glob.py,sha256=cSNrtEKWLsZXRhsjxQjRjjMqdgqfpl05yT4S53dC0NU,249
281
281
  synapse/tests/test_init.py,sha256=rHqYBVL_aFf1HO6zCF5akHVcHUP2g1kpJLRdTkV0yys,557
282
- synapse/tests/test_lib_agenda.py,sha256=QkcllP_TBqH2m1BEuksVyxPB3Xg4ODYBEwfmspDV-EY,55822
282
+ synapse/tests/test_lib_agenda.py,sha256=OzuWlrWFGJCcyuJ6_dpKJFJHW_nobG5xoraaHmAzseQ,57225
283
283
  synapse/tests/test_lib_aha.py,sha256=mHErWnNIgkuPUbLL9rH9Ape8alppGxg8Bx_EfBlD9QY,71862
284
- synapse/tests/test_lib_ast.py,sha256=cVB4CcCPrgMMCzltzK8LW_fmhMaj38lKG3qk4gAIS_s,192349
284
+ synapse/tests/test_lib_ast.py,sha256=6eNHlZEGOrxDAhH-_rZ-E24vmw4t6egfCBPMj84wkAI,192506
285
285
  synapse/tests/test_lib_auth.py,sha256=yuuOnBje8At7EN_DVEkqE_jsYirZYTIOaGa2VcKrckk,45011
286
286
  synapse/tests/test_lib_autodoc.py,sha256=H2XO2_d8FmsHUd-cn7M-LjTX-078xLhMiOGiGGk5Oj0,8381
287
287
  synapse/tests/test_lib_base.py,sha256=0XUGNaXmfDW896gpBTYYd7ovADUD8cyDLkGTefqn1FM,14550
@@ -331,7 +331,7 @@ synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hM
331
331
  synapse/tests/test_lib_slabseqn.py,sha256=74V6jU7DRTsy_hqUFDuT4C6dPlJ6ObNnjmI9qhbbyVc,5230
332
332
  synapse/tests/test_lib_snap.py,sha256=OviJtj9N5LhBV-56TySkWvRly7f8VH9d-VBcNFLAtmg,27805
333
333
  synapse/tests/test_lib_spooled.py,sha256=fkLuujrDqjeJtyByptmGZvJbM9QiETCAu4r_4PdLfZg,3929
334
- synapse/tests/test_lib_storm.py,sha256=CMWUm7ySUGesT2upNxVodmwexIZ1XK0NKX2p-muT5iI,239721
334
+ synapse/tests/test_lib_storm.py,sha256=01GqZkEEtyf_GcC8yRZGfhu-nTen_aQLeEMsFNMOYgw,239722
335
335
  synapse/tests/test_lib_storm_format.py,sha256=tEZgQMmKAeG8FQZE5HUjOT7bnKawVTpNaVQh_3Wa630,277
336
336
  synapse/tests/test_lib_stormctrl.py,sha256=1vY7PGjgmz3AibgSiGcp_G4NSYl9YNifWdjPB0CDf1g,2877
337
337
  synapse/tests/test_lib_stormhttp.py,sha256=92LKxnF4iPlM0lCnI6UmNZxbANURAiZtajS5xiIwxCs,45504
@@ -414,7 +414,7 @@ synapse/tests/test_model_orgs.py,sha256=DTCjdRi8lyHLIaEcK8X-F-sBPp2vbUllJBBWInE5
414
414
  synapse/tests/test_model_person.py,sha256=GunHZceAA30Uq2AaiU1mqlCzTmW2mj-vn4AyNyLOioU,18455
415
415
  synapse/tests/test_model_planning.py,sha256=U2kkE0uBO6CqtTfy7wlnhEIu_NFdSri4I_I5b-mRjBE,5615
416
416
  synapse/tests/test_model_proj.py,sha256=hCuM-CTyCAvqVPy7klP6NXOEtgJ61OyyT0x8mcJsjns,23238
417
- synapse/tests/test_model_risk.py,sha256=i-Q-ynD3kQjL-DBdbJTzB9WgUxDqf_WjiAwO1cAqLm8,31349
417
+ synapse/tests/test_model_risk.py,sha256=t2IVWF8h1Kj7hERUZR_wqMikFJl63m9yz_ZYB60z1O4,31543
418
418
  synapse/tests/test_model_science.py,sha256=2T9VxdzpltDufgjkUB95q97TQP9AxH2-T_sBbHfPDRk,2450
419
419
  synapse/tests/test_model_syn.py,sha256=Air11lZMj6D6A5BDOMQV5mjcI873gNyUmfK5WMua5Cg,31900
420
420
  synapse/tests/test_model_telco.py,sha256=5ToiRhCX7faiDx4lDMV6b7E9WteN3PcBlznYF6GA2co,13166
@@ -427,7 +427,7 @@ synapse/tests/test_servers_univ.py,sha256=eXesifJL05IA91f5od-9bjuIDVhNWMdo8qWzaH
427
427
  synapse/tests/test_telepath.py,sha256=ssFggqPjdHAp_nB9nHO2ecl1b_rJATKWTzl-etVkxJk,46289
428
428
  synapse/tests/test_tools_aha.py,sha256=pqfQYh0Uz235z32bgAN4kXJq7N2ge3SuK4rb357zCgM,16763
429
429
  synapse/tests/test_tools_apikey.py,sha256=pAjOSAhZiflKksZMHmICWRi0nIO5hS9P5VcT8qUubn0,8909
430
- synapse/tests/test_tools_autodoc.py,sha256=5j3QPfaNqhHl_aKbyn7X1C8SMI7k3fAW1-0qEzX78zk,8900
430
+ synapse/tests/test_tools_autodoc.py,sha256=1SXQcRwB40VZG3YX8T7vGh2YRnDjnSv5AKMz8fj4V1k,9027
431
431
  synapse/tests/test_tools_axon2axon.py,sha256=A6JU9UI8lLMCS5rJ_w5shks4Oyo_VjlXQTOPtaTBE_M,1346
432
432
  synapse/tests/test_tools_backup.py,sha256=HyqogKfvF8fLJFp97ereMu_30NIL3O5nBQO8QjsTGEQ,4242
433
433
  synapse/tests/test_tools_cellauth.py,sha256=ocCOuJ9mK-Mxzm47zZeA-ckMsKgZiLCuwsuwgkSFO1Y,12395
@@ -457,7 +457,7 @@ synapse/tests/test_tools_storm.py,sha256=xCDr3RumtBpFsxq0BhI0rRd6S83zoFI0oHeb6Vl
457
457
  synapse/tests/test_utils.py,sha256=DHyG6nltUGYBkwq3V_2NX4NLxhUWfCjYEtMx9FL8104,9915
458
458
  synapse/tests/test_utils_getrefs.py,sha256=9PJHz7Ry6SGAaHegSEs6E009RYzkkH4bT8jd1DfLAOk,2298
459
459
  synapse/tests/test_utils_stormcov.py,sha256=H9p1vFH8kNE6qMLrGzSV0eH7KOgdZFh7QuarFe47FtU,6149
460
- synapse/tests/utils.py,sha256=0rTGccqlXJmWhq81jkeHRUW0l9g7tw4EPVIqbcjIALI,78234
460
+ synapse/tests/utils.py,sha256=TLaj2XPpY9qj4JPa4yXplFe09o2FfIxP1JlwH2k3fvo,78241
461
461
  synapse/tests/files/TestUtilsGetrefs.test_basics.yaml,sha256=Ch8cEGFYfDUCZTEvzAqW5Ir79OnYb49pq4i9OJ7K9T0,8257
462
462
  synapse/tests/files/__init__.py,sha256=iqkaqGCD7UedfSwVc6hoQDu2UGSZOkybUCZeFRHAFgQ,1786
463
463
  synapse/tests/files/cpedata.json,sha256=e_wajnxn4ZClQ3-hwlOxK-2MWzLQwrqgtWVUV5dUVF4,13799445
@@ -525,7 +525,7 @@ synapse/tests/files/stormpkg/workflows/testpkg-foo.yaml,sha256=zoN8HxrO1QNumYZJy
525
525
  synapse/tests/files/testcore/cell.yaml,sha256=fBUjBfX1L-0nGQD-VhLMy_IjrDepI9zRzbmgsVFJSYY,46
526
526
  synapse/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
527
527
  synapse/tools/apikey.py,sha256=RxpCcvuq5aHwNXuqYdl9DRwmInLxEgsxTSM1jLv7yX0,3405
528
- synapse/tools/autodoc.py,sha256=-esajH0-4ftIJHzW93t7FwQEJ4WsvH8iV5em_sf1Wlw,35082
528
+ synapse/tools/autodoc.py,sha256=VFzbanfLN1WXwGB8e98ytxrUwGBMIyL8MIjPp5vAE8g,35531
529
529
  synapse/tools/axon2axon.py,sha256=FOaBLUrHH-r5Vw8FABwfTNGn_fJCg7jJxtP0ALpJUGM,1654
530
530
  synapse/tools/backup.py,sha256=Cz3OSaYMRND7gE55FdyjrBr3C1_qd68yJ23O4-mukCM,5969
531
531
  synapse/tools/cellauth.py,sha256=2ACKpOsOK_9F1B-HV5qhzGORSN7MhlElkL01Q710M1k,12122
@@ -613,8 +613,8 @@ synapse/vendor/xrpl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
613
613
  synapse/vendor/xrpl/tests/test_codec.py,sha256=Zwq6A5uZUK_FWDL3BA932c5b-rL3hnC6efobWHSLC4o,6651
614
614
  synapse/vendor/xrpl/tests/test_main.py,sha256=kZQwWk7I6HrP-PMvLdsUUN4POvWD9I-iXDHOwdeF090,4299
615
615
  synapse/vendor/xrpl/tests/test_main_test_cases.py,sha256=vTlUM4hJD2Hd2wCIdd9rfsvcMZZZQmNHWdCTTFeGz2Y,4221
616
- synapse-2.200.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
617
- synapse-2.200.0.dist-info/METADATA,sha256=GI8xjvGnS8fRDnI-dkIsdSGweNVt9QXbJMk0M8UFpZw,4620
618
- synapse-2.200.0.dist-info/WHEEL,sha256=5pBL_y1xgYbRv8URJNE-BCn6IBkqK0TW5FP9QHWct1c,93
619
- synapse-2.200.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
620
- synapse-2.200.0.dist-info/RECORD,,
616
+ synapse-2.201.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
617
+ synapse-2.201.0.dist-info/METADATA,sha256=n8PrtR3dCLr72rX1W8uP03uZ99YVsFmsbnAfxMKtFnc,4620
618
+ synapse-2.201.0.dist-info/WHEEL,sha256=SVzJgwHRq-bq9xNTNjXYZdMgXBw9NIJUHI7f40f9nI0,93
619
+ synapse-2.201.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
620
+ synapse-2.201.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py311-none-any
5
5