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 +3 -0
- synapse/lib/cell.py +21 -1
- synapse/lib/storm.lark +2 -2
- synapse/lib/storm.py +9 -4
- synapse/lib/urlhelp.py +28 -4
- synapse/lib/version.py +2 -2
- synapse/models/person.py +5 -2
- synapse/tests/test_lib_grammar.py +22 -0
- synapse/tests/test_lib_httpapi.py +43 -0
- synapse/tests/test_lib_storm.py +30 -2
- synapse/tests/test_lib_urlhelp.py +7 -0
- synapse/tests/test_model_person.py +2 -0
- {synapse-2.203.0.dist-info → synapse-2.204.0.dist-info}/METADATA +3 -2
- {synapse-2.203.0.dist-info → synapse-2.204.0.dist-info}/RECORD +17 -17
- {synapse-2.203.0.dist-info → synapse-2.204.0.dist-info}/WHEEL +1 -1
- {synapse-2.203.0.dist-info → synapse-2.204.0.dist-info/licenses}/LICENSE +0 -0
- {synapse-2.203.0.dist-info → synapse-2.204.0.dist-info}/top_level.txt +0 -0
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
|
|
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(
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
226
|
+
version = (2, 204, 0)
|
|
227
227
|
verstring = '.'.join([str(x) for x in version])
|
|
228
|
-
commit = '
|
|
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'))
|
synapse/tests/test_lib_storm.py
CHANGED
|
@@ -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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: synapse
|
|
3
|
-
Version: 2.
|
|
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=
|
|
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=
|
|
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=
|
|
145
|
-
synapse/lib/storm.py,sha256=
|
|
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=
|
|
161
|
-
synapse/lib/version.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
622
|
-
synapse-2.
|
|
623
|
-
synapse-2.
|
|
624
|
-
synapse-2.
|
|
625
|
-
synapse-2.
|
|
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,,
|
|
File without changes
|
|
File without changes
|