synapse 2.203.0__py311-none-any.whl → 2.204.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/auth.py CHANGED
@@ -423,6 +423,9 @@ class Auth(s_nexus.Pusher):
423
423
 
424
424
  await self.feedBeholder('user:info', mesg, gateiden=gateiden, logged=logged)
425
425
 
426
+ if name == 'locked':
427
+ await self.fire('user:lock', user=iden, locked=valu)
428
+
426
429
  # since any user info *may* effect auth
427
430
  user.clearAuthCache()
428
431
 
synapse/lib/cell.py CHANGED
@@ -3143,8 +3143,11 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
3143
3143
  self.sessstor.set(iden, name, valu)
3144
3144
  return info
3145
3145
 
3146
- @s_nexus.Pusher.onPushAuto('http:sess:del')
3147
3146
  async def delHttpSess(self, iden):
3147
+ await self._push('http:sess:del', iden)
3148
+
3149
+ @s_nexus.Pusher.onPush('http:sess:del')
3150
+ async def _delHttpSess(self, iden):
3148
3151
  await self.sessstor.del_(iden)
3149
3152
  sess = self.sessions.pop(iden, None)
3150
3153
  if sess:
@@ -3412,6 +3415,7 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
3412
3415
 
3413
3416
  # Add callbacks
3414
3417
  self.on('user:del', self._onUserDelEvnt)
3418
+ self.on('user:lock', self._onUserLockEvnt)
3415
3419
 
3416
3420
  authctor = self.conf.get('auth:ctor')
3417
3421
  if authctor is not None:
@@ -5013,6 +5017,22 @@ class Cell(s_nexus.Pusher, s_telepath.Aware):
5013
5017
  self.slab.delete(lkey, db=self.usermetadb)
5014
5018
  await asyncio.sleep(0)
5015
5019
 
5020
+ async def _onUserLockEvnt(self, evnt):
5021
+ # Call callback for handling user:lock events
5022
+ useriden = evnt[1].get('user')
5023
+ locked = evnt[1].get('locked')
5024
+
5025
+ if not locked:
5026
+ return
5027
+
5028
+ # Find and delete all HTTP sessions for useriden
5029
+ for iden, sess in list(self.sessions.items()):
5030
+ if sess.info.get('user') == useriden:
5031
+ username = sess.info.get('username', '<unknown>')
5032
+ await self._delHttpSess(iden)
5033
+ logger.info(f'Invalidated HTTP session for locked user {username}',
5034
+ extra=await self.getLogExtra(target_user=useriden))
5035
+
5016
5036
  def _makeCachedSslCtx(self, opts):
5017
5037
 
5018
5038
  opts = dict(opts)
synapse/lib/storm.lark CHANGED
@@ -404,7 +404,7 @@ embedquery: _EMBEDQUERYSTART query "}"
404
404
  _EMBEDQUERYSTART: "${"
405
405
 
406
406
  // An unquoted storm string constant. Must start with a word char, ?, /, \, +, *, or - and not contain certain punctuation
407
- NONQUOTEWORD: /(?!\/\/)[\w\-\+\?\*\/\\][^\s\),=\]}\|]*(?=$|[\s\),\]}\|\=])/
407
+ NONQUOTEWORD: /(?!\/\/)[\w\-\+\?\*\/\\][^\s(),=\]}|$]*(?=$|[\s(),\]}|=$])/
408
408
 
409
409
  // A white-space *only* delimited string immediate for use in legacy cmdr parser
410
410
  CMDRTOKN.-1: /[^="'\s\{}][^\s\{}]*/
@@ -629,7 +629,7 @@ OCTNUMBER.1: /
629
629
 
630
630
  BOOL.2: /(true|false)(?=$|[\s\),\]}\|\=])/
631
631
  NULL.2: /null(?=$|[\s\),\]}\|\=])/
632
- NOTOP.2: /not(?=$|[\s\),\]}\|\=])/
632
+ NOTOP.2: /not(?=[\s($])/
633
633
  OR.2: "or"
634
634
  AND.2: "and"
635
635
 
synapse/lib/storm.py CHANGED
@@ -5004,9 +5004,12 @@ class ParallelCmd(Cmd):
5004
5004
 
5005
5005
  yield item
5006
5006
 
5007
- async def pipeline(self, runt, query, inq, outq):
5007
+ async def pipeline(self, runt, query, inq, outq, runtprims):
5008
+
5009
+ opts = {'vars': runtprims}
5010
+
5008
5011
  try:
5009
- async with runt.getSubRuntime(query) as subr:
5012
+ async with runt.getCmdRuntime(query, opts=opts) as subr:
5010
5013
  async for item in subr.execute(genr=self.nextitem(inq)):
5011
5014
  await outq.put(item)
5012
5015
 
@@ -5037,11 +5040,13 @@ class ParallelCmd(Cmd):
5037
5040
  inq = asyncio.Queue(maxsize=size)
5038
5041
  outq = asyncio.Queue(maxsize=size)
5039
5042
 
5043
+ runtprims = await s_stormtypes.toprim(self.runt.getScopeVars(), use_list=True)
5044
+
5040
5045
  tsks = 0
5041
5046
  try:
5042
5047
  while tsks < size:
5043
5048
  await inq.put(await genr.__anext__())
5044
- base.schedCoro(self.pipeline(runt, query, inq, outq))
5049
+ base.schedCoro(self.pipeline(runt, query, inq, outq, runtprims))
5045
5050
  tsks += 1
5046
5051
  except StopAsyncIteration:
5047
5052
  [await inq.put(None) for i in range(tsks)]
@@ -5062,7 +5067,7 @@ class ParallelCmd(Cmd):
5062
5067
  elif tsks == 0:
5063
5068
  tsks = size
5064
5069
  for i in range(size):
5065
- base.schedCoro(self.pipeline(runt, query, inq, outq))
5070
+ base.schedCoro(self.pipeline(runt, query, inq, outq, runtprims))
5066
5071
  [await inq.put(None) for i in range(tsks)]
5067
5072
 
5068
5073
  exited = 0
synapse/lib/urlhelp.py CHANGED
@@ -1,8 +1,9 @@
1
1
  import urllib.parse
2
2
 
3
- import regex
4
3
  import synapse.exc as s_exc
5
4
 
5
+ import synapse.lib.cache as s_cache
6
+
6
7
  def chopurl(url):
7
8
  '''
8
9
  A sane "stand alone" url parser.
@@ -70,8 +71,7 @@ def chopurl(url):
70
71
  ret['path'] = pathrem
71
72
  return ret
72
73
 
73
- _url_re = regex.compile(r'^(?P<front>.+?://.+?:)[^/]+?(?=@)')
74
-
74
+ @s_cache.memoize(size=1024)
75
75
  def sanitizeUrl(url):
76
76
  '''
77
77
  Returns a URL with the password (if present) replaced with ``****``
@@ -85,4 +85,28 @@ def sanitizeUrl(url):
85
85
  Note: this depends on this being a reasonably-well formatted URI that starts with a scheme (e.g. http) and '//:'
86
86
  Failure of this condition yields the original string.
87
87
  '''
88
- return _url_re.sub(r'\g<front>****', url)
88
+ try:
89
+ info = chopurl(url)
90
+ except Exception as e:
91
+ return url
92
+ else:
93
+ if info.get('passwd'):
94
+ # Rebuild the URL from info
95
+ valu = f"{info.get('scheme')}://{info.get('user')}:****@"
96
+ host = info.get('host')
97
+ port = info.get('port')
98
+ if ':' in host and port:
99
+ valu = f"{valu}[{host}]:{port}"
100
+ elif port:
101
+ valu = f"{valu}{host}:{port}"
102
+ else:
103
+ valu = f"{valu}{host}"
104
+ if path := info.get('path'):
105
+ valu = f"{valu}{path}"
106
+ if query := info.get('query'):
107
+ parts = []
108
+ for k, v in query.items():
109
+ parts.append(f'{k}={v}')
110
+ valu = f"{valu}?{'&'.join(parts)}"
111
+ return valu
112
+ return url
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, 203, 0)
226
+ version = (2, 204, 0)
227
227
  verstring = '.'.join([str(x) for x in version])
228
- commit = '809ecdca2e2b05f1cd111bb23c237127b2b9c177'
228
+ commit = '6b616fcd2d70a036d9853355fcb6fd491e84f015'
synapse/models/person.py CHANGED
@@ -446,8 +446,11 @@ class PsModule(s_module.CoreModule):
446
446
  'doc': 'The fax number for this contact.',
447
447
  }),
448
448
  ('phone:work', ('tel:phone', {}), {
449
- 'doc': 'The work phone number for this contact.',
450
- }),
449
+ 'doc': 'The work phone number for this contact.'}),
450
+
451
+ ('id', ('str', {'strip': True}), {
452
+ 'doc': 'A type or source specific unique ID for the contact.'}),
453
+
451
454
  ('id:number', ('ou:id:number', {}), {
452
455
  'alts': ('id:numbers',),
453
456
  'doc': 'An ID number issued by an org and associated with this contact.',
@@ -748,6 +748,10 @@ Queries = [
748
748
  '[test:str=foo :bar?--={[it:dev:str=foo]}]',
749
749
  '$foo=(notime,)',
750
750
  '$foo=(nulltime,)',
751
+ '$foo=(not$x)',
752
+ '$foo=(not $x)',
753
+ '$foo=(not($x))',
754
+ '$foo=(not ($x))',
751
755
  ]
752
756
 
753
757
  # Generated with print_parse_list below
@@ -1398,6 +1402,10 @@ _ParseResults = [
1398
1402
  'Query: [EditNodeAdd: [FormName: [Const: test:str], Const: =, Const: foo], EditPropSetMulti: [RelProp: [Const: bar], Const: ?--=, SubQuery: [Query: [EditNodeAdd: [FormName: [Const: it:dev:str], Const: =, Const: foo]]]]]',
1399
1403
  'Query: [SetVarOper: [Const: foo, List: [Const: notime]]]',
1400
1404
  'Query: [SetVarOper: [Const: foo, List: [Const: nulltime]]]',
1405
+ 'Query: [SetVarOper: [Const: foo, DollarExpr: [UnaryExprNode: [Const: not, VarValue: [Const: x]]]]]',
1406
+ 'Query: [SetVarOper: [Const: foo, DollarExpr: [UnaryExprNode: [Const: not, VarValue: [Const: x]]]]]',
1407
+ 'Query: [SetVarOper: [Const: foo, DollarExpr: [UnaryExprNode: [Const: not, DollarExpr: [VarValue: [Const: x]]]]]]',
1408
+ 'Query: [SetVarOper: [Const: foo, DollarExpr: [UnaryExprNode: [Const: not, DollarExpr: [VarValue: [Const: x]]]]]]',
1401
1409
  ]
1402
1410
 
1403
1411
  class GrammarTest(s_t_utils.SynTest):
@@ -1710,6 +1718,20 @@ class GrammarTest(s_t_utils.SynTest):
1710
1718
  self.eq((2, 3), info['lines'])
1711
1719
  self.eq((22, 31), info['columns'])
1712
1720
 
1721
+ query = '$x=$lib.guid(foo$bar)'
1722
+ parser = s_parser.Parser(query)
1723
+ with self.raises(s_exc.BadSyntax) as cm:
1724
+ _ = parser.query()
1725
+ errinfo = cm.exception.errinfo
1726
+ self.true(errinfo.get('mesg').startswith("Unexpected token '$' at line 1, column 17"))
1727
+
1728
+ query = '$x=$lib.guid(foo(bar)'
1729
+ parser = s_parser.Parser(query)
1730
+ with self.raises(s_exc.BadSyntax) as cm:
1731
+ _ = parser.query()
1732
+ errinfo = cm.exception.errinfo
1733
+ self.true(errinfo.get('mesg').startswith("Unexpected token '(' at line 1, column 17"))
1734
+
1713
1735
  async def test_quotes(self):
1714
1736
 
1715
1737
  # Test vectors
@@ -1976,3 +1976,46 @@ class HttpApiTest(s_tests.SynTest):
1976
1976
 
1977
1977
  # No change with the bad data
1978
1978
  self.eq(cell_sess.info, result.get('info'))
1979
+
1980
+ async def test_http_locked_admin(self):
1981
+ async with self.getTestCore() as core:
1982
+
1983
+ visi = await core.auth.addUser('visi')
1984
+ await visi.setAdmin(True)
1985
+ await visi.setPasswd('secret123')
1986
+
1987
+ host, port = await core.addHttpsPort(0, host='127.0.0.1')
1988
+ root = f'https://localhost:{port}'
1989
+
1990
+ async with self.getHttpSess() as sess:
1991
+ resp = await sess.post(f'{root}/api/v1/login', json={'user': 'visi', 'passwd': 'secret123'})
1992
+ self.eq(resp.status, 200)
1993
+
1994
+ resp = await sess.get(f'{root}/api/v1/auth/users')
1995
+ self.eq(resp.status, 200)
1996
+
1997
+ data = {'query': '[ inet:ipv4=1.2.3.4 ]', 'opts': {'user': visi.iden}}
1998
+ async with sess.get(f'{root}/api/v1/storm/call', json=data) as resp:
1999
+ item = await resp.json()
2000
+ self.eq('ok', item.get('status'))
2001
+
2002
+ with self.getAsyncLoggerStream('synapse.lib.cell',
2003
+ 'Invalidated HTTP session for locked user visi') as stream:
2004
+ await core.setUserLocked(visi.iden, True)
2005
+ self.true(await stream.wait(timeout=2))
2006
+
2007
+ resp = await sess.get(f'{root}/api/v1/auth/users')
2008
+ self.eq(resp.status, 401)
2009
+
2010
+ data = {'query': '[ inet:ipv4=5.6.7.8 ]', 'opts': {'user': visi.iden}}
2011
+ async with sess.get(f'{root}/api/v1/storm/call', json=data) as resp:
2012
+ item = await resp.json()
2013
+ self.eq('err', item.get('status'))
2014
+ self.eq('NotAuthenticated', item.get('code'))
2015
+
2016
+ resp = await sess.post(f'{root}/api/v1/login', json={'user': 'visi', 'passwd': 'secret123'})
2017
+ self.eq(resp.status, 200)
2018
+ retn = await resp.json()
2019
+ self.eq(retn.get('status'), 'err')
2020
+ self.eq(retn.get('code'), 'AuthDeny')
2021
+ self.isin('User is locked.', retn.get('mesg'))
@@ -3657,9 +3657,9 @@ class StormTest(s_t_utils.SynTest):
3657
3657
  orig = s_storm.ParallelCmd.pipeline
3658
3658
  tsks = {'cnt': 0}
3659
3659
 
3660
- async def pipecnt(self, runt, query, inq, outq):
3660
+ async def pipecnt(self, runt, query, inq, outq, runtprims):
3661
3661
  tsks['cnt'] += 1
3662
- await orig(self, runt, query, inq, outq)
3662
+ await orig(self, runt, query, inq, outq, runtprims)
3663
3663
 
3664
3664
  with mock.patch('synapse.lib.storm.ParallelCmd.pipeline', pipecnt):
3665
3665
 
@@ -3689,6 +3689,34 @@ class StormTest(s_t_utils.SynTest):
3689
3689
  self.len(4, nodes)
3690
3690
  self.eq(4, tsks['cnt'])
3691
3691
 
3692
+ self.len(20, await core.nodes('for $i in $lib.range(20) {[ test:str=$i ]}'))
3693
+ q = '''
3694
+ test:str
3695
+ parallel --size 4 {
3696
+ if (not $lib.vars.get(vals)) {
3697
+ $vals = ()
3698
+ }
3699
+ $vals.append($node.repr())
3700
+ fini { $lib.fire(resu, vals=$vals) }
3701
+ }
3702
+ | spin
3703
+ '''
3704
+ vals = []
3705
+ msgs = await core.stormlist(q)
3706
+ for m in msgs:
3707
+ if m[0] == 'storm:fire':
3708
+ vals.extend(m[1]['data']['vals'])
3709
+
3710
+ self.len(20, vals)
3711
+
3712
+ q = '''
3713
+ $vals = ()
3714
+ test:str
3715
+ parallel --size 4 { $vals.append($node.repr()) }
3716
+ fini { return($vals) }
3717
+ '''
3718
+ self.len(20, await core.callStorm(q))
3719
+
3692
3720
  async def test_storm_yieldvalu(self):
3693
3721
 
3694
3722
  async with self.getTestCore() as core:
@@ -90,9 +90,16 @@ class UrlTest(s_t_utils.SynTest):
90
90
  ('rando:this:is:valid:URI', None),
91
91
  ('rando:this:is@valid:URI', None),
92
92
  ('foo://user:password@host.com', 'foo://user:****@host.com'),
93
+ ('foo://user:password@[::1]:1234', 'foo://user:****@[::1]:1234'),
94
+ ('foo://user:password@::1/test', 'foo://user:****@::1/test'),
93
95
  ('foo://user:password@host.com:999', 'foo://user:****@host.com:999'),
94
96
  ('foo://user:@host.com', None),
95
97
  ('ssl://feeds00.v.link:43/*/feed/6a1f?cere=root@.vex.link', None),
98
+ ('ssl://user@00.aha.dev.synapse:27492?certname=user@dev.synapse', None),
99
+ ('ssl://user@00.aha.dev.synapse:27492/path?certname=user@dev.synapse', None),
100
+ ('aha://user:passwd@something.cool:274/path?arg=wow', 'aha://user:****@something.cool:274/path?arg=wow'),
101
+ ('aha://user:passwd@something.cool:274/path?arg=wow&wee=diggity',
102
+ 'aha://user:****@something.cool:274/path?arg=wow&wee=diggity'),
96
103
  ]
97
104
 
98
105
  for in_, out in data:
@@ -154,6 +154,7 @@ class PsModelTest(s_t_utils.SynTest):
154
154
  }
155
155
  opts = {'vars': {'valu': con0, 'p': props}}
156
156
  q = '''[(ps:contact=$valu
157
+ :id=" 9999Aa"
157
158
  :bio="I am ironman."
158
159
  :org=$p.org :asof=$p.asof :person=$p.person
159
160
  :place=$p.place :place:name=$p."place:name" :name=$p.name
@@ -183,6 +184,7 @@ class PsModelTest(s_t_utils.SynTest):
183
184
  self.eq(node.get('place'), place)
184
185
  self.eq(node.get('place:name'), 'the shire')
185
186
  self.eq(node.get('name'), 'tony stark')
187
+ self.eq(node.get('id'), '9999Aa')
186
188
  self.eq(node.get('bio'), 'I am ironman.')
187
189
  self.eq(node.get('title'), 'ceo')
188
190
  self.eq(node.get('titles'), ('haha', 'hehe'))
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: synapse
3
- Version: 2.203.0
3
+ Version: 2.204.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
@@ -64,6 +64,7 @@ Requires-Dist: sphinx<9.0.0,>=8.0.0; extra == "docs"
64
64
  Requires-Dist: sphinx-rtd-theme<4.0.0,>=3.0.0; extra == "docs"
65
65
  Requires-Dist: sphinx-notfound-page<2.0.0,>=1.0.4; extra == "docs"
66
66
  Requires-Dist: jinja2<4.0.0,>=3.1.4; extra == "docs"
67
+ Dynamic: license-file
67
68
 
68
69
  Synapse
69
70
  =======
@@ -87,12 +87,12 @@ synapse/lib/__init__.py,sha256=qLS7nt8-Iot8jnD2Xss_6wZi5lJoyv2rqxF9kkektT0,129
87
87
  synapse/lib/agenda.py,sha256=v3g6LC7lD9i1V5sngnmpw9AYZTar6LwBu1or2qQ8QXc,34429
88
88
  synapse/lib/aha.py,sha256=atfXvPg4fqhEBIdpMdV2ctS6gYvP6SBfcgOrq19Tn7s,55717
89
89
  synapse/lib/ast.py,sha256=fLVJwGFTtRUZWdKcxzd2PPCErDHfzt47aLT1wALwUSI,166296
90
- synapse/lib/auth.py,sha256=xa4f3TkFuoNLL0H14dPGTfqnHAXLEEPyrEqn__8ouSc,54305
90
+ synapse/lib/auth.py,sha256=B7-Ji3MzPlW6pvRNtb0ciJKDru54QC-_yvznGraZCJs,54400
91
91
  synapse/lib/autodoc.py,sha256=tM2OCPrV7yeth8Cx-wx-_VXBmBfzJS52vaubg_7BqCI,23217
92
92
  synapse/lib/base.py,sha256=m6gQB_PhSg-7-GJlNVgBQQJNseGEEBCwiZesk62l5Kg,23464
93
93
  synapse/lib/boss.py,sha256=rYu4jkHJ3Y5GLX23Hlrwe9H17LF27LZ0BkK_A_9Aqh0,2056
94
94
  synapse/lib/cache.py,sha256=N8BoNFQXOaYQU33LLYQcVkdV6IYjSNaUoaKue55y7H0,6275
95
- synapse/lib/cell.py,sha256=I3Wej36JaKxBP-Eh2lBHqrqiTiLMkEXxPLZQ8ffacUs,183479
95
+ synapse/lib/cell.py,sha256=x575w6cyiq8Ibx3yAGnWKaNppNvWm8r1S0LeNU_MVvc,184273
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
@@ -141,8 +141,8 @@ synapse/lib/slaboffs.py,sha256=Fd0RrIRBMjh159aQz5y1ONmzw0NvV040kVX_jZjQW6I,815
141
141
  synapse/lib/slabseqn.py,sha256=LJ2SZEsZlROBAD3mdS-3JxNVVPXXkBW8GIJXsW0OGG8,10287
142
142
  synapse/lib/snap.py,sha256=pO-_HKY9juB2ZtecnFIMx9aXTdDzsMfXVmW6uMZHucQ,63626
143
143
  synapse/lib/spooled.py,sha256=pKPacX-fvZDUTUWPaKgyct_lk_3eoSsF9Ufh_cn_1fQ,5987
144
- synapse/lib/storm.lark,sha256=bnDd0YOFYyib0gwZBjZVXCePZIdoNLJCG7bgm_m2WoE,27419
145
- synapse/lib/storm.py,sha256=w43qYHbCoXQU0rd7FR13rM_u41zeHDSlBV-08ErVGUo,205272
144
+ synapse/lib/storm.lark,sha256=7ipxFPsM4i1zYTUrslCp90SPlghQEbtQT54vYPcxD4A,27408
145
+ synapse/lib/storm.py,sha256=tYAN4TXwa1kfAc-U72MrJEwLJteYSZY7Jljct6x6HCM,205445
146
146
  synapse/lib/storm_format.py,sha256=9cE8WNPYTcqgRakIqkmIQzOr16Hqbj_sM1QabHug3i0,4908
147
147
  synapse/lib/stormctrl.py,sha256=3UC2LOHClC17JwYNuo8NeyntuAvIXphjenXEzVP33mY,2523
148
148
  synapse/lib/stormhttp.py,sha256=xVaKzZpTj559TnePfWDUMspAwyHcYAYoAwaq2xu7UmA,28780
@@ -157,8 +157,8 @@ synapse/lib/threads.py,sha256=TSsC7ryXm_CbM0LQMsvk1vYV4iyvarzWzH59TrUzKuo,164
157
157
  synapse/lib/time.py,sha256=FKTYwpdvpuAj8p8sSodRjOxoA7Vu67CIbbXz55gtghk,9231
158
158
  synapse/lib/trigger.py,sha256=mnfkoBHB88JfqPoxb5oflvAaBKZpNvYdxP247YS53fE,20697
159
159
  synapse/lib/types.py,sha256=plPuYWNaJmCWjYIOWIkDhh8NhTONATZD6d85qf2NUfM,69740
160
- synapse/lib/urlhelp.py,sha256=0B4a0Zzcq4mVsC4MqqU-PkftdRPZsG4Ey_-HzbBzqo0,2528
161
- synapse/lib/version.py,sha256=yZafChaCUMUVKLsUwf_TUKpIvFKRU3q1FiKQYStDNw8,7162
160
+ synapse/lib/urlhelp.py,sha256=ljhnF91z9ihyOLdZZ6OoQYCN1WYjOj1imukD45xiKU0,3320
161
+ synapse/lib/version.py,sha256=PplvQBuWXx7DruYrPgxKpieX-TqSmkEWO4jAjP40M2I,7162
162
162
  synapse/lib/view.py,sha256=-yuxjVBp8I1RMPuxVfBJzjx64aPBo-Rr_-9vxKVmx_w,62071
163
163
  synapse/lib/crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
164
  synapse/lib/crypto/coin.py,sha256=_dhlkzIrHT8BvHdJOWK7PDThz3sK3dDRnWAUqjRpZJc,4910
@@ -246,7 +246,7 @@ synapse/models/material.py,sha256=UvmnBEkbhBbdbnvWtTlgGJAJlKDrx9E-YSQ3K49ws5M,54
246
246
  synapse/models/math.py,sha256=5zDLSwGbOcWI6T5-KspPL20sR8Bcs59pnRK2nEELzss,1775
247
247
  synapse/models/media.py,sha256=wdXNzLrHb4YYRZ3NlGombNwZsphwfH20oZQQ9ICq7ZQ,3604
248
248
  synapse/models/orgs.py,sha256=1zAIdOA0mf5O-6RGMcf5oDmLM7kkIjWxZN3voThOAnc,71526
249
- synapse/models/person.py,sha256=y6ffCN42b9A20jwhfD5cJ6tfvUW2kf3YnTBj4xH7Phc,27781
249
+ synapse/models/person.py,sha256=B_R1zCuZLFqxnmxfLLy4pp6N-GqPNQTZdlM1TdufwfQ,27905
250
250
  synapse/models/planning.py,sha256=vmrY4d3WRxizrNU1YBe36NGZTuuu4lhGS8KI5lCZ5yQ,7302
251
251
  synapse/models/proj.py,sha256=vl-2uZouiWSey8t4lTNA4BxUKhX94rqm3SuLrodQUP8,9904
252
252
  synapse/models/risk.py,sha256=knVsNKQrJkgGuihVwWV_qQfO5dvLNvuu98f8zc5g5kI,57949
@@ -304,12 +304,12 @@ synapse/tests/test_lib_datfile.py,sha256=jyWAx0BtPK6hjkUmAzUB0-jAWYgIyx3EmB2XxaZ
304
304
  synapse/tests/test_lib_dyndeps.py,sha256=qahr9yrB1SM5bkF9VwW_eQqB_Tva_HRUJwx9QQQCxiM,1239
305
305
  synapse/tests/test_lib_encoding.py,sha256=SmMs3VriYSsaC0oqFEHv7NalNuvDzOlAkDNxueJKOuY,6590
306
306
  synapse/tests/test_lib_gis.py,sha256=7vUXgHzjLNDPtYfcrVKQmNNo4EoJNYGYFXWdYf7XG9k,3186
307
- synapse/tests/test_lib_grammar.py,sha256=DI5S3IWU04Y3ZuwxaX5SUxPbMJghAwtSONMJko8dp9E,146640
307
+ synapse/tests/test_lib_grammar.py,sha256=sHAfJ9e9L28m2pu54aXKCzH9wl4LzHsJyga2fMxz_U0,147768
308
308
  synapse/tests/test_lib_hashitem.py,sha256=IyyueviwK8g-MpCkXU-jLfMDRFMuO8Bl3870IucZMg8,715
309
309
  synapse/tests/test_lib_hashset.py,sha256=HwFsohiEzLyQ3evpvcezlj2iM7Li5IrN4rWh1jZnnPQ,1329
310
310
  synapse/tests/test_lib_health.py,sha256=yqNw6rXBm_2UBqPlWxeLpFhawKocdS1VitOCD3Lv8gE,2265
311
311
  synapse/tests/test_lib_hive.py,sha256=vh5DmCTP2MAiRXgvO_IqCSbS2CIyBUC1tjQGPK79Fx8,5354
312
- synapse/tests/test_lib_httpapi.py,sha256=aQ1wpMvrWiBDT0HkzE5kcvBYQM2FTQ6WHYA_xGOZrU0,91589
312
+ synapse/tests/test_lib_httpapi.py,sha256=QA5-ztDVrIRm7yOnngpNdBo8Hausx8sP21HUccGtCvY,93627
313
313
  synapse/tests/test_lib_interval.py,sha256=PNEU24XXEGdlW7WkiYJGbhGljwBJpAWen9yTOqlNikQ,839
314
314
  synapse/tests/test_lib_json.py,sha256=7OAg97JKImlNAb_ypB7qPyJBMAp_rZ5ZNrRk4811vuk,7945
315
315
  synapse/tests/test_lib_jsonstor.py,sha256=ToLp5xdCOfqi1bWrPRxMsNewtGOd89zyX9Zn3VT5o9I,5950
@@ -334,7 +334,7 @@ synapse/tests/test_lib_slaboffs.py,sha256=FHQ8mGZ27dGqVwGk6q2UJ4gkPRZN22eIVzS8hM
334
334
  synapse/tests/test_lib_slabseqn.py,sha256=74V6jU7DRTsy_hqUFDuT4C6dPlJ6ObNnjmI9qhbbyVc,5230
335
335
  synapse/tests/test_lib_snap.py,sha256=OviJtj9N5LhBV-56TySkWvRly7f8VH9d-VBcNFLAtmg,27805
336
336
  synapse/tests/test_lib_spooled.py,sha256=fkLuujrDqjeJtyByptmGZvJbM9QiETCAu4r_4PdLfZg,3929
337
- synapse/tests/test_lib_storm.py,sha256=fjNQzFLM4NB2MytHd-7-J03dWsWvlg5G69ezPf-JBVw,239910
337
+ synapse/tests/test_lib_storm.py,sha256=8kuJS81CXlv4tqh1SLQaSzTihbkfNLFnV2jncVs0XZ0,240782
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=6J06Rizh7tKIkBeKwocgPBmwRk_28eQ6GNqlSFJ4Dn0,45532
@@ -387,7 +387,7 @@ synapse/tests/test_lib_thishost.py,sha256=O6QCENStRuMjWS7qV9rqwW3bSZwzEUn9NcttKn
387
387
  synapse/tests/test_lib_time.py,sha256=d1mPkN9P3GHNnZ_mhjyOv64tJGQ0yI_ifUjK3x-kmDg,8891
388
388
  synapse/tests/test_lib_trigger.py,sha256=DQQsWclfM5ECTGItLS3YZr3kHOYb1zfjYDHaYMgjn7M,42731
389
389
  synapse/tests/test_lib_types.py,sha256=4hC-NmKh_8oG-vrV7dxg62yN1sGrV7g3uV6P0VF2H38,78350
390
- synapse/tests/test_lib_urlhelp.py,sha256=ir59ZRJz5XlhMb-ZBYl_p3GpGfnUBnDRwGlffvPC7IY,3147
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=rRAEIoMLVXSoRYBjrHxk6r7Qr-6rKsnNxI8eV9bCG1o,40278
393
393
  synapse/tests/test_lookup_iso3166.py,sha256=Xd2K0r0P5s-Towx_3qjDbJRd16Gr-ItMTIkYn0OU-Rk,375
@@ -414,7 +414,7 @@ synapse/tests/test_model_material.py,sha256=Hkd8BJh6FdQE0RuFMV2NO6fGqw9kOCb5AeIu
414
414
  synapse/tests/test_model_math.py,sha256=x-rHBfm-59ueZdHXXzSi53eshldvVURoJeLeexWTL2U,826
415
415
  synapse/tests/test_model_media.py,sha256=RQVhYjOZ4rkNPBSzz05rle1M7F6-Yxw545s7k-YBwzc,2627
416
416
  synapse/tests/test_model_orgs.py,sha256=DTCjdRi8lyHLIaEcK8X-F-sBPp2vbUllJBBWInE5cew,47402
417
- synapse/tests/test_model_person.py,sha256=GunHZceAA30Uq2AaiU1mqlCzTmW2mj-vn4AyNyLOioU,18455
417
+ synapse/tests/test_model_person.py,sha256=CjzlSoR7jR8KgCxVO3D3NLdHduE3ID3HGWJgSCJUB6A,18535
418
418
  synapse/tests/test_model_planning.py,sha256=U2kkE0uBO6CqtTfy7wlnhEIu_NFdSri4I_I5b-mRjBE,5615
419
419
  synapse/tests/test_model_proj.py,sha256=hCuM-CTyCAvqVPy7klP6NXOEtgJ61OyyT0x8mcJsjns,23238
420
420
  synapse/tests/test_model_risk.py,sha256=t2IVWF8h1Kj7hERUZR_wqMikFJl63m9yz_ZYB60z1O4,31543
@@ -618,8 +618,8 @@ synapse/vendor/xrpl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
618
618
  synapse/vendor/xrpl/tests/test_codec.py,sha256=Zwq6A5uZUK_FWDL3BA932c5b-rL3hnC6efobWHSLC4o,6651
619
619
  synapse/vendor/xrpl/tests/test_main.py,sha256=kZQwWk7I6HrP-PMvLdsUUN4POvWD9I-iXDHOwdeF090,4299
620
620
  synapse/vendor/xrpl/tests/test_main_test_cases.py,sha256=vTlUM4hJD2Hd2wCIdd9rfsvcMZZZQmNHWdCTTFeGz2Y,4221
621
- synapse-2.203.0.dist-info/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
622
- synapse-2.203.0.dist-info/METADATA,sha256=hWlbLQeVcCrRjAF8n0WfEnt9X3rAexYEbiCUJWcGPzM,4656
623
- synapse-2.203.0.dist-info/WHEEL,sha256=nQKQLm39-oTMQjOTrYdAuwEsqDYzC19BKdc5i7gozW4,93
624
- synapse-2.203.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
625
- synapse-2.203.0.dist-info/RECORD,,
621
+ synapse-2.204.0.dist-info/licenses/LICENSE,sha256=xllut76FgcGL5zbIRvuRc7aezPbvlMUTWJPsVr2Sugg,11358
622
+ synapse-2.204.0.dist-info/METADATA,sha256=xamFLQnMghZEGyjsDe4bKg7-RbTg32DtovHBxxrHKE0,4678
623
+ synapse-2.204.0.dist-info/WHEEL,sha256=RgqzAG2Po4NkdMA4ilzDoz7WgKIAG23t4GhJY8qSYC4,93
624
+ synapse-2.204.0.dist-info/top_level.txt,sha256=v_1YsqjmoSCzCKs7oIhzTNmWtSYoORiBMv1TJkOhx8A,8
625
+ synapse-2.204.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (77.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py311-none-any
5
5