synapse 2.214.0__py311-none-any.whl → 2.216.0__py311-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of synapse might be problematic. Click here for more details.

Files changed (69) hide show
  1. synapse/cortex.py +17 -2
  2. synapse/lib/cell.py +12 -0
  3. synapse/lib/cmd.py +6 -2
  4. synapse/lib/jsonstor.py +4 -1
  5. synapse/lib/layer.py +13 -6
  6. synapse/lib/schemas.py +9 -2
  7. synapse/lib/snap.py +15 -5
  8. synapse/lib/storm.py +1 -1
  9. synapse/lib/types.py +3 -0
  10. synapse/lib/version.py +2 -2
  11. synapse/lib/view.py +16 -7
  12. synapse/models/inet.py +7 -1
  13. synapse/models/infotech.py +45 -0
  14. synapse/models/risk.py +2 -0
  15. synapse/tests/test_cortex.py +262 -0
  16. synapse/tests/test_lib_auth.py +2 -0
  17. synapse/tests/test_lib_jsonstor.py +45 -0
  18. synapse/tests/test_lib_layer.py +10 -0
  19. synapse/tests/test_lib_storm.py +52 -1
  20. synapse/tests/test_lib_stormlib_iters.py +1 -1
  21. synapse/tests/test_lib_stormsvc.py +2 -2
  22. synapse/tests/test_lib_stormtypes.py +15 -0
  23. synapse/tests/test_lib_types.py +11 -1
  24. synapse/tests/test_model_inet.py +2 -0
  25. synapse/tests/test_model_infotech.py +31 -0
  26. synapse/tests/test_tools_cryo_cat.py +3 -8
  27. synapse/tests/test_tools_storm.py +3 -2
  28. synapse/tests/utils.py +2 -0
  29. synapse/tools/aha/clone.py +3 -13
  30. synapse/tools/aha/easycert.py +5 -18
  31. synapse/tools/aha/enroll.py +3 -12
  32. synapse/tools/aha/list.py +2 -15
  33. synapse/tools/aha/mirror.py +3 -14
  34. synapse/tools/aha/provision/service.py +3 -13
  35. synapse/tools/aha/provision/user.py +3 -12
  36. synapse/tools/apikey.py +3 -13
  37. synapse/tools/autodoc.py +7 -19
  38. synapse/tools/axon2axon.py +1 -9
  39. synapse/tools/cellauth.py +5 -14
  40. synapse/tools/changelog.py +12 -16
  41. synapse/tools/cmdr.py +2 -6
  42. synapse/tools/cryo/cat.py +5 -15
  43. synapse/tools/cryo/list.py +3 -10
  44. synapse/tools/csvtool.py +40 -49
  45. synapse/tools/demote.py +1 -6
  46. synapse/tools/docker/validate.py +0 -1
  47. synapse/tools/easycert.py +3 -8
  48. synapse/tools/feed.py +7 -18
  49. synapse/tools/genpkg.py +3 -12
  50. synapse/tools/guid.py +4 -6
  51. synapse/tools/healthcheck.py +4 -11
  52. synapse/tools/json2mpk.py +1 -5
  53. synapse/tools/livebackup.py +3 -13
  54. synapse/tools/modrole.py +3 -12
  55. synapse/tools/moduser.py +3 -12
  56. synapse/tools/pkgs/gendocs.py +1 -1
  57. synapse/tools/promote.py +3 -13
  58. synapse/tools/pullfile.py +6 -18
  59. synapse/tools/pushfile.py +6 -18
  60. synapse/tools/reload.py +5 -14
  61. synapse/tools/rstorm.py +4 -12
  62. synapse/tools/shutdown.py +1 -2
  63. synapse/tools/snapshot.py +3 -14
  64. synapse/tools/storm.py +4 -12
  65. {synapse-2.214.0.dist-info → synapse-2.216.0.dist-info}/METADATA +1 -1
  66. {synapse-2.214.0.dist-info → synapse-2.216.0.dist-info}/RECORD +69 -69
  67. {synapse-2.214.0.dist-info → synapse-2.216.0.dist-info}/WHEEL +0 -0
  68. {synapse-2.214.0.dist-info → synapse-2.216.0.dist-info}/licenses/LICENSE +0 -0
  69. {synapse-2.214.0.dist-info → synapse-2.216.0.dist-info}/top_level.txt +0 -0
synapse/tools/csvtool.py CHANGED
@@ -1,7 +1,4 @@
1
1
  import csv
2
- import sys
3
- import asyncio
4
- import contextlib
5
2
 
6
3
  import synapse.exc as s_exc
7
4
  import synapse.cortex as s_cortex
@@ -16,6 +13,44 @@ import synapse.lib.output as s_output
16
13
  import synapse.lib.version as s_version
17
14
 
18
15
  reqver = '>=0.2.0,<3.0.0'
16
+ desc = '''Command line tool for ingesting csv files into a cortex
17
+
18
+ The storm file is run with the CSV rows specified in the variable "rows" so most
19
+ storm files will use a variable based for loop to create edit nodes. For example:
20
+
21
+ for ($fqdn, $ipv4, $tag) in $rows {
22
+
23
+ [ inet:dns:a=($fqdn, $ipv4) +#$tag ]
24
+
25
+ }
26
+
27
+ More advanced uses may include switch cases to provide different logic based on
28
+ a column value.
29
+
30
+ for ($type, $valu, $info) in $rows {
31
+
32
+ switch $type {
33
+
34
+ fqdn: {
35
+ [ inet:fqdn=$valu ]
36
+ }
37
+
38
+ "person name": {
39
+ [ ps:name=$valu ]
40
+ }
41
+
42
+ *: {
43
+ // default case...
44
+ }
45
+
46
+ }
47
+
48
+ switch $info {
49
+ "known malware": { [+#cno.mal] }
50
+ }
51
+
52
+ }
53
+ '''
19
54
 
20
55
  async def runCsvExport(opts, outp, text, stormopts):
21
56
  if not opts.cortex:
@@ -174,46 +209,7 @@ async def main(argv, outp=s_output.stdout):
174
209
  return await runCsvImport(opts, outp, text, stormopts)
175
210
 
176
211
  def makeargparser(outp):
177
- desc = '''
178
- Command line tool for ingesting csv files into a cortex
179
-
180
- The storm file is run with the CSV rows specified in the variable "rows" so most
181
- storm files will use a variable based for loop to create edit nodes. For example:
182
-
183
- for ($fqdn, $ipv4, $tag) in $rows {
184
-
185
- [ inet:dns:a=($fqdn, $ipv4) +#$tag ]
186
-
187
- }
188
-
189
- More advanced uses may include switch cases to provide different logic based on
190
- a column value.
191
-
192
- for ($type, $valu, $info) in $rows {
193
-
194
- switch $type {
195
-
196
- fqdn: {
197
- [ inet:fqdn=$valu ]
198
- }
199
-
200
- "person name": {
201
- [ ps:name=$valu ]
202
- }
203
-
204
- *: {
205
- // default case...
206
- }
207
-
208
- }
209
-
210
- switch $info {
211
- "known malware": { [+#cno.mal] }
212
- }
213
-
214
- }
215
- '''
216
- pars = s_cmd.Parser('synapse.tools.csvtool', description=desc, outp=outp)
212
+ pars = s_cmd.Parser(prog='synapse.tools.csvtool', description=desc, outp=outp)
217
213
  pars.add_argument('--logfile', help='Set a log file to get JSON lines from the server events.')
218
214
  pars.add_argument('--csv-header', default=False, action='store_true',
219
215
  help='Skip the first line from each CSV file.')
@@ -235,10 +231,5 @@ def makeargparser(outp):
235
231
  pars.add_argument('csvfiles', nargs='+', help='CSV files to load.')
236
232
  return pars
237
233
 
238
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
239
- ret = await main(argv, outp=outp)
240
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
241
- return ret
242
-
243
234
  if __name__ == '__main__': # pragma: no cover
244
- sys.exit(asyncio.run(_main(sys.argv[1:])))
235
+ s_cmd.exitmain(main)
synapse/tools/demote.py CHANGED
@@ -1,7 +1,3 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.exc as s_exc
6
2
 
7
3
  import synapse.telepath as s_telepath
@@ -19,8 +15,7 @@ Example:
19
15
 
20
16
  async def main(argv, outp=s_output.stdout):
21
17
 
22
- pars = argparse.ArgumentParser(prog='synapse.tools.demote', description=descr,
23
- formatter_class=argparse.RawDescriptionHelpFormatter)
18
+ pars = s_cmd.Parser(prog='synapse.tools.demote', outp=outp, description=descr)
24
19
 
25
20
  pars.add_argument('--url', default='cell:///vertex/storage',
26
21
  help='The telepath URL of the Synapse service.')
@@ -1,4 +1,3 @@
1
- import os
2
1
  import re
3
2
  import sys
4
3
  import base64
synapse/tools/easycert.py CHANGED
@@ -1,9 +1,7 @@
1
-
2
- import sys
3
1
  import argparse
4
2
 
5
-
6
3
  import synapse.exc as s_exc
4
+ import synapse.lib.cmd as s_cmd
7
5
  import synapse.lib.output as s_output
8
6
  import synapse.lib.certdir as s_certdir
9
7
 
@@ -11,10 +9,7 @@ descr = '''
11
9
  Command line tool to generate simple x509 certs
12
10
  '''
13
11
 
14
- def main(argv, outp=None):
15
-
16
- if outp is None: # pragma: no cover
17
- outp = s_output.OutPut()
12
+ def main(argv, outp=s_output.stdout):
18
13
 
19
14
  pars = argparse.ArgumentParser(prog='easycert', description=descr)
20
15
  pars.add_argument('--certdir', default='~/.syn/certs', help='Directory for certs/keys')
@@ -138,4 +133,4 @@ def main(argv, outp=None):
138
133
  return 1
139
134
 
140
135
  if __name__ == '__main__': # pragma: no cover
141
- sys.exit(main(sys.argv[1:]))
136
+ s_cmd.exitmain(main)
synapse/tools/feed.py CHANGED
@@ -1,17 +1,14 @@
1
1
  import os
2
- import sys
3
2
  import time
4
- import asyncio
5
3
  import logging
6
- import argparse
7
4
 
8
5
  import synapse.exc as s_exc
9
6
  import synapse.common as s_common
10
7
  import synapse.cortex as s_cortex
11
8
  import synapse.telepath as s_telepath
12
9
 
10
+ import synapse.lib.cmd as s_cmd
13
11
  import synapse.lib.cmdr as s_cmdr
14
- import synapse.lib.coro as s_coro
15
12
  import synapse.lib.json as s_json
16
13
  import synapse.lib.output as s_output
17
14
  import synapse.lib.msgpack as s_msgpack
@@ -79,12 +76,9 @@ async def addFeedData(core, outp, feedformat, debug=False, *paths, chunksize=100
79
76
  if debug:
80
77
  await s_cmdr.runItemCmdr(core, outp, True)
81
78
 
82
- async def main(argv, outp=None):
79
+ async def main(argv, outp=s_output.stdout):
83
80
 
84
- if outp is None: # pragma: no cover
85
- outp = s_output.OutPut()
86
-
87
- pars = makeargparser()
81
+ pars = getArgParser(outp)
88
82
  opts = pars.parse_args(argv)
89
83
 
90
84
  if opts.offset:
@@ -124,9 +118,9 @@ async def main(argv, outp=None):
124
118
 
125
119
  return 0
126
120
 
127
- def makeargparser():
121
+ def getArgParser(outp):
128
122
  desc = 'Command line tool for ingesting data into a cortex'
129
- pars = argparse.ArgumentParser('synapse.tools.feed', description=desc)
123
+ pars = s_cmd.Parser(prog='synapse.tools.feed', outp=outp, description=desc)
130
124
 
131
125
  muxp = pars.add_mutually_exclusive_group(required=True)
132
126
  muxp.add_argument('--cortex', '-c', type=str,
@@ -150,11 +144,6 @@ def makeargparser():
150
144
 
151
145
  return pars
152
146
 
153
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
154
- s_common.setlogging(logger, 'DEBUG')
155
- ret = await main(argv, outp=outp)
156
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
157
- return ret
158
-
159
147
  if __name__ == '__main__': # pragma: no cover
160
- sys.exit(asyncio.run(_main(sys.argv[1:])))
148
+ s_common.setlogging(logger, 'DEBUG')
149
+ s_cmd.exitmain(main)
synapse/tools/genpkg.py CHANGED
@@ -1,10 +1,7 @@
1
1
  import io
2
2
  import os
3
- import sys
4
3
  import base64
5
- import asyncio
6
4
  import logging
7
- import argparse
8
5
 
9
6
  import regex
10
7
 
@@ -12,7 +9,7 @@ import synapse.exc as s_exc
12
9
  import synapse.common as s_common
13
10
  import synapse.telepath as s_telepath
14
11
 
15
- import synapse.lib.coro as s_coro
12
+ import synapse.lib.cmd as s_cmd
16
13
  import synapse.lib.json as s_json
17
14
  import synapse.lib.output as s_output
18
15
  import synapse.lib.certdir as s_certdir
@@ -238,12 +235,11 @@ def loadPkgProto(path, opticdir=None, no_docs=False, readonly=False):
238
235
  return pkgdef
239
236
 
240
237
 
241
- prog = 'synapse.tools.genpkg'
242
238
  desc = 'A tool for generating/pushing storm packages from YAML prototypes.'
243
239
 
244
240
  async def main(argv, outp=s_output.stdout):
245
241
 
246
- pars = argparse.ArgumentParser()
242
+ pars = s_cmd.Parser(prog='synapse.tools.genpkg', outp=outp, description=desc)
247
243
  pars.add_argument('--push', metavar='<url>', help='A telepath URL of a Cortex or PkgRepo.')
248
244
  pars.add_argument('--push-verify', default=False, action='store_true',
249
245
  help='Tell the Cortex to verify the package signature.')
@@ -306,10 +302,5 @@ async def main(argv, outp=s_output.stdout):
306
302
 
307
303
  return 0
308
304
 
309
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
310
- ret = await main(argv, outp=outp)
311
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
312
- return ret
313
-
314
305
  if __name__ == '__main__': # pragma: no cover
315
- sys.exit(asyncio.run(_main(sys.argv[1:])))
306
+ s_cmd.exitmain(main)
synapse/tools/guid.py CHANGED
@@ -1,12 +1,10 @@
1
+ import sys
2
+
1
3
  import synapse.common as s_common
2
4
  import synapse.lib.output as s_output
3
5
 
4
- def main(argv, outp=None):
5
- if outp is None: # pragma: no cover
6
- outp = s_output.OutPut()
7
-
6
+ def main(argv, outp=s_output.stdout):
8
7
  outp.printf(s_common.guid())
9
8
 
10
9
  if __name__ == '__main__': # pragma: no cover
11
- import sys
12
- sys.exit(main(sys.argv))
10
+ sys.exit(main(sys.argv[1:]))
@@ -1,4 +1,3 @@
1
- import sys
2
1
  import socket
3
2
  import asyncio
4
3
 
@@ -7,7 +6,6 @@ import synapse.common as s_common
7
6
  import synapse.telepath as s_telepath
8
7
 
9
8
  import synapse.lib.cmd as s_cmd
10
- import synapse.lib.coro as s_coro
11
9
  import synapse.lib.json as s_json
12
10
  import synapse.lib.output as s_output
13
11
  import synapse.lib.health as s_health
@@ -30,7 +28,7 @@ def format_component(e, mesg: str) -> dict:
30
28
  return d
31
29
 
32
30
  async def main(argv, outp=s_output.stdout):
33
- pars = makeargparser()
31
+ pars = getArgParser(outp)
34
32
  try:
35
33
  opts = pars.parse_args(argv)
36
34
  except s_exc.ParserExit as e: # pragma: no cover
@@ -96,21 +94,16 @@ async def main(argv, outp=s_output.stdout):
96
94
  outp.printf(serialize(ret))
97
95
  return retval
98
96
 
99
- def makeargparser():
97
+ def getArgParser(outp):
100
98
  desc = '''
101
99
  synapse healthcheck tool
102
100
  '''
103
- pars = s_cmd.Parser('healthcheck', description=desc)
101
+ pars = s_cmd.Parser(prog='synapse.tools.healthcheck', outp=outp, description=desc)
104
102
  pars.add_argument('--cell', '-c', required=True, type=str,
105
103
  help='Telepath path to the cell to check.')
106
104
  pars.add_argument('--timeout', '-t', default=10, type=float,
107
105
  help='Connection and call timeout')
108
106
  return pars
109
107
 
110
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
111
- ret = await main(argv, outp=outp)
112
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
113
- return ret
114
-
115
108
  if __name__ == '__main__': # pragma: no cover
116
- sys.exit(asyncio.run(_main(sys.argv[1:])))
109
+ s_cmd.exitmain(main)
synapse/tools/json2mpk.py CHANGED
@@ -12,11 +12,7 @@ def getArgParser():
12
12
  pars.add_argument('paths', nargs='+', help='json files or directories full of json files')
13
13
  return pars
14
14
 
15
- def main(argv, outp=None):
16
-
17
- if outp is None: # pragma: no cover
18
- outp = s_output.OutPut()
19
-
15
+ def main(argv, outp=s_output.stdout):
20
16
  pars = getArgParser()
21
17
  opts = pars.parse_args(argv)
22
18
 
@@ -1,10 +1,6 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.telepath as s_telepath
6
2
 
7
- import synapse.lib.coro as s_coro
3
+ import synapse.lib.cmd as s_cmd
8
4
  import synapse.lib.output as s_output
9
5
 
10
6
  descr = '''
@@ -19,8 +15,7 @@ Examples:
19
15
 
20
16
  async def main(argv, outp=s_output.stdout):
21
17
 
22
- pars = argparse.ArgumentParser(prog='synapse.tools.livebackup', description=descr,
23
- formatter_class=argparse.RawDescriptionHelpFormatter)
18
+ pars = s_cmd.Parser(prog='synapse.tools.livebackup', outp=outp, description=descr)
24
19
 
25
20
  pars.add_argument('--url', default='cell:///vertex/storage', help='The telepath URL of the Synapse service.')
26
21
  pars.add_argument('--name', default=None, help='Specify a name for the backup. Defaults to an automatically generated timestamp.')
@@ -35,10 +30,5 @@ async def main(argv, outp=s_output.stdout):
35
30
  outp.printf(f'...backup created: {name}')
36
31
  return 0
37
32
 
38
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
39
- ret = await main(argv, outp=outp)
40
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
41
- return ret
42
-
43
33
  if __name__ == '__main__': # pragma: no cover
44
- sys.exit(asyncio.run(_main(sys.argv[1:])))
34
+ s_cmd.exitmain(main)
synapse/tools/modrole.py CHANGED
@@ -1,11 +1,7 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.common as s_common
6
2
  import synapse.telepath as s_telepath
7
3
 
8
- import synapse.lib.coro as s_coro
4
+ import synapse.lib.cmd as s_cmd
9
5
  import synapse.lib.output as s_output
10
6
 
11
7
  descr = '''
@@ -30,7 +26,7 @@ def printrole(role, outp):
30
26
 
31
27
  async def main(argv, outp=s_output.stdout):
32
28
 
33
- pars = argparse.ArgumentParser(prog='modrole', description=descr)
29
+ pars = s_cmd.Parser(prog='synapse.tools.modrole', outp=outp, description=descr)
34
30
  pars.add_argument('--svcurl', default='cell:///vertex/storage', help='The telepath URL of the Synapse service.')
35
31
  pars.add_argument('--add', default=False, action='store_true', help='Add the role if they do not already exist.')
36
32
  pars.add_argument('--del', dest='delete', default=False, action='store_true', help='Delete the role if it exists.')
@@ -116,10 +112,5 @@ async def main(argv, outp=s_output.stdout):
116
112
  await cell.addRoleRule(roleiden, (False, perm), indx=0, gateiden=opts.gate)
117
113
  return 0
118
114
 
119
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
120
- ret = await main(argv, outp=outp)
121
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
122
- return ret
123
-
124
115
  if __name__ == '__main__': # pragma: no cover
125
- sys.exit(asyncio.run(_main(sys.argv[1:])))
116
+ s_cmd.exitmain(main)
synapse/tools/moduser.py CHANGED
@@ -1,11 +1,7 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.common as s_common
6
2
  import synapse.telepath as s_telepath
7
3
 
8
- import synapse.lib.coro as s_coro
4
+ import synapse.lib.cmd as s_cmd
9
5
  import synapse.lib.output as s_output
10
6
 
11
7
  descr = '''
@@ -41,7 +37,7 @@ def printuser(user, outp):
41
37
 
42
38
  async def main(argv, outp=s_output.stdout):
43
39
 
44
- pars = argparse.ArgumentParser(prog='moduser', description=descr)
40
+ pars = s_cmd.Parser(prog='synapse.tools.moduser', outp=outp, description=descr)
45
41
  pars.add_argument('--svcurl', default='cell:///vertex/storage', help='The telepath URL of the Synapse service.')
46
42
  pars.add_argument('--add', default=False, action='store_true', help='Add the user if they do not already exist.')
47
43
  pars.add_argument('--del', dest='delete', default=False, action='store_true', help='Delete the user if they exist.')
@@ -187,10 +183,5 @@ async def main(argv, outp=s_output.stdout):
187
183
  await cell.addUserRule(useriden, (False, perm), indx=0, gateiden=opts.gate)
188
184
  return 0
189
185
 
190
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
191
- ret = await main(argv, outp=outp)
192
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
193
- return ret
194
-
195
186
  if __name__ == '__main__': # pragma: no cover
196
- sys.exit(asyncio.run(_main(sys.argv[1:])))
187
+ s_cmd.exitmain(main)
@@ -28,7 +28,7 @@ def hasPandoc():
28
28
  return True
29
29
  return False
30
30
 
31
- async def buildPkgDocs(outp: s_output.OutPut, pkgpath: str, rst_only: bool =False):
31
+ async def buildPkgDocs(outp, pkgpath: str, rst_only: bool =False):
32
32
 
33
33
  logger.info(f'Building pkg for {pkgpath}')
34
34
  pkgdef = s_common.yamlload(pkgpath)
synapse/tools/promote.py CHANGED
@@ -1,12 +1,8 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.exc as s_exc
6
2
 
7
3
  import synapse.telepath as s_telepath
8
4
 
9
- import synapse.lib.coro as s_coro
5
+ import synapse.lib.cmd as s_cmd
10
6
  import synapse.lib.output as s_output
11
7
  import synapse.lib.urlhelp as s_urlhelp
12
8
 
@@ -19,8 +15,7 @@ Example (being run from a Cortex mirror docker container):
19
15
 
20
16
  async def main(argv, outp=s_output.stdout):
21
17
 
22
- pars = argparse.ArgumentParser(prog='synapse.tools.promote', description=descr,
23
- formatter_class=argparse.RawDescriptionHelpFormatter)
18
+ pars = s_cmd.Parser(prog='synapse.tools.promote', outp=outp, description=descr)
24
19
 
25
20
  pars.add_argument('--svcurl', default='cell:///vertex/storage',
26
21
  help='The telepath URL of the Synapse service.')
@@ -49,10 +44,5 @@ async def main(argv, outp=s_output.stdout):
49
44
 
50
45
  return 0
51
46
 
52
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
53
- ret = await main(argv, outp=outp)
54
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
55
- return ret
56
-
57
47
  if __name__ == '__main__': # pragma: no cover
58
- sys.exit(asyncio.run(_main(sys.argv[1:])))
48
+ s_cmd.exitmain(main)
synapse/tools/pullfile.py CHANGED
@@ -1,23 +1,16 @@
1
- import sys
2
- import asyncio
3
1
  import pathlib
4
- import argparse
5
2
 
6
3
  import synapse.common as s_common
7
4
  import synapse.telepath as s_telepath
8
5
 
9
- import synapse.lib.coro as s_coro
6
+ import synapse.lib.cmd as s_cmd
10
7
  import synapse.lib.output as s_output
11
8
 
12
9
 
13
- async def main(argv, outp=None):
14
-
15
- pars = setup()
10
+ async def main(argv, outp=s_output.stdout):
11
+ pars = getArgParser(outp)
16
12
  opts = pars.parse_args(argv)
17
13
 
18
- if outp is None: # pragma: no cover
19
- outp = s_output.OutPut()
20
-
21
14
  if opts.output is None:
22
15
  opts.output = '.'
23
16
 
@@ -55,9 +48,9 @@ async def main(argv, outp=None):
55
48
  return 0
56
49
 
57
50
 
58
- def setup():
51
+ def getArgParser(outp):
59
52
  desc = 'Fetches file from the given axon'
60
- pars = argparse.ArgumentParser('synapse.tools.pullfile', description=desc)
53
+ pars = s_cmd.Parser(prog='synapse.tools.pullfile', outp=outp, description=desc)
61
54
  pars.add_argument('-a', '--axon', type=str, dest='axon', required=True,
62
55
  help='URL to the axon blob store')
63
56
  pars.add_argument('-o', '--output', type=str, dest='output',
@@ -67,10 +60,5 @@ def setup():
67
60
 
68
61
  return pars
69
62
 
70
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
71
- ret = await main(argv, outp=outp)
72
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
73
- return ret
74
-
75
63
  if __name__ == '__main__': # pragma: no cover
76
- sys.exit(asyncio.run(_main(sys.argv[1:])))
64
+ s_cmd.exitmain(main)
synapse/tools/pushfile.py CHANGED
@@ -1,27 +1,20 @@
1
1
  import os
2
- import sys
3
2
  import glob
4
- import asyncio
5
3
  import logging
6
- import argparse
7
4
 
8
5
  import synapse.exc as s_exc
9
6
  import synapse.common as s_common
10
7
  import synapse.telepath as s_telepath
11
8
 
12
- import synapse.lib.coro as s_coro
9
+ import synapse.lib.cmd as s_cmd
13
10
  import synapse.lib.output as s_output
14
11
  import synapse.lib.hashset as s_hashset
15
12
 
16
13
  logger = logging.getLogger(__name__)
17
14
 
18
15
 
19
- async def main(argv, outp=None):
20
-
21
- if outp is None: # pragma: no cover
22
- outp = s_output.OutPut()
23
-
24
- pars = makeargparser()
16
+ async def main(argv, outp=s_output.stdout):
17
+ pars = getArgParser(outp)
25
18
  opts = pars.parse_args(argv)
26
19
 
27
20
  async with s_telepath.withTeleEnv():
@@ -111,10 +104,10 @@ async def main(argv, outp=None):
111
104
 
112
105
  return 0
113
106
 
114
- def makeargparser():
107
+ def getArgParser(outp):
115
108
  desc = 'Command line tool for uploading files to an Axon and making ' \
116
109
  'file:bytes in a Cortex.'
117
- pars = argparse.ArgumentParser('synapse.tools.pushfile', description=desc)
110
+ pars = s_cmd.Parser(prog='synapse.tools.pushfile', outp=outp, description=desc)
118
111
  pars.add_argument('-a', '--axon', required=True, type=str, dest='axon',
119
112
  help='URL for a target Axon to store files at.')
120
113
  pars.add_argument('-c', '--cortex', default=None, type=str, dest='cortex',
@@ -125,10 +118,5 @@ def makeargparser():
125
118
  pars.add_argument('-t', '--tags', help='comma separated list of tags to add to the nodes')
126
119
  return pars
127
120
 
128
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
129
- ret = await main(argv, outp=outp)
130
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
131
- return ret
132
-
133
121
  if __name__ == '__main__': # pragma: no cover
134
- sys.exit(asyncio.run(_main(sys.argv[1:])))
122
+ s_cmd.exitmain(main)
synapse/tools/reload.py CHANGED
@@ -1,10 +1,6 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.telepath as s_telepath
6
2
 
7
- import synapse.lib.coro as s_coro
3
+ import synapse.lib.cmd as s_cmd
8
4
  import synapse.lib.output as s_output
9
5
  import synapse.lib.urlhelp as s_urlhelp
10
6
 
@@ -14,7 +10,7 @@ List or execute reload subsystems on a Synapse service.
14
10
 
15
11
  async def main(argv, outp=s_output.stdout):
16
12
 
17
- pars = getArgParser()
13
+ pars = getArgParser(outp)
18
14
  opts = pars.parse_args(argv)
19
15
 
20
16
  async with s_telepath.withTeleEnv():
@@ -55,8 +51,8 @@ async def main(argv, outp=s_output.stdout):
55
51
  outp.printf(f'{name.ljust(40)}{result.ljust(10)}{mesg}')
56
52
  return 0
57
53
 
58
- def getArgParser():
59
- pars = argparse.ArgumentParser(prog='reload', description=descr)
54
+ def getArgParser(outp):
55
+ pars = s_cmd.Parser(prog='synapse.tools.reload', outp=outp, description=descr)
60
56
  pars.add_argument('--svcurl', default='cell:///vertex/storage', help='The telepath URL of the Synapse service.')
61
57
 
62
58
  subpars = pars.add_subparsers(required=True,
@@ -68,10 +64,5 @@ def getArgParser():
68
64
 
69
65
  return pars
70
66
 
71
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
72
- ret = await main(argv, outp=outp)
73
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
74
- return ret
75
-
76
67
  if __name__ == '__main__': # pragma: no cover
77
- sys.exit(asyncio.run(_main(sys.argv[1:])))
68
+ s_cmd.exitmain(main)
synapse/tools/rstorm.py CHANGED
@@ -1,11 +1,8 @@
1
- import sys
2
- import asyncio
3
1
  import logging
4
- import argparse
5
2
 
6
3
  import synapse.common as s_common
7
4
 
8
- import synapse.lib.coro as s_coro
5
+ import synapse.lib.cmd as s_cmd
9
6
  import synapse.lib.output as s_output
10
7
  import synapse.lib.rstorm as s_rstorm
11
8
 
@@ -16,7 +13,7 @@ descr = 'An RST pre-processor that allows you to embed storm directives.'
16
13
 
17
14
  async def main(argv, outp=s_output.stdout):
18
15
 
19
- pars = argparse.ArgumentParser(prog=prog, description=descr)
16
+ pars = s_cmd.Parser(prog=prog, outp=outp, description=descr)
20
17
  pars.add_argument('rstfile', help='Input RST file with storm directives.')
21
18
  pars.add_argument('--save', help='Output file to save (default: stdout)')
22
19
 
@@ -33,11 +30,6 @@ async def main(argv, outp=s_output.stdout):
33
30
  for line in lines:
34
31
  outp.printf(line, addnl=False)
35
32
 
36
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
33
+ if __name__ == '__main__': # pragma: no cover
37
34
  s_common.setlogging(logger)
38
- ret = await main(argv, outp=outp)
39
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
40
- return ret
41
-
42
- if __name__ == '__main__':
43
- sys.exit(asyncio.run(_main(sys.argv[1:])))
35
+ s_cmd.exitmain(main)