synapse 2.215.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 (62) hide show
  1. synapse/cortex.py +16 -1
  2. synapse/lib/cell.py +12 -0
  3. synapse/lib/cmd.py +6 -2
  4. synapse/lib/layer.py +10 -5
  5. synapse/lib/schemas.py +9 -2
  6. synapse/lib/snap.py +15 -5
  7. synapse/lib/storm.py +1 -1
  8. synapse/lib/types.py +3 -0
  9. synapse/lib/version.py +2 -2
  10. synapse/lib/view.py +16 -7
  11. synapse/models/inet.py +7 -1
  12. synapse/models/risk.py +2 -0
  13. synapse/tests/test_cortex.py +262 -0
  14. synapse/tests/test_lib_auth.py +2 -0
  15. synapse/tests/test_lib_storm.py +52 -1
  16. synapse/tests/test_lib_stormsvc.py +2 -2
  17. synapse/tests/test_lib_types.py +6 -0
  18. synapse/tests/test_model_inet.py +2 -0
  19. synapse/tests/test_tools_cryo_cat.py +3 -8
  20. synapse/tests/test_tools_storm.py +3 -2
  21. synapse/tests/utils.py +2 -0
  22. synapse/tools/aha/clone.py +3 -13
  23. synapse/tools/aha/easycert.py +5 -18
  24. synapse/tools/aha/enroll.py +3 -12
  25. synapse/tools/aha/list.py +2 -15
  26. synapse/tools/aha/mirror.py +3 -14
  27. synapse/tools/aha/provision/service.py +3 -13
  28. synapse/tools/aha/provision/user.py +3 -12
  29. synapse/tools/apikey.py +3 -13
  30. synapse/tools/autodoc.py +7 -19
  31. synapse/tools/axon2axon.py +1 -9
  32. synapse/tools/cellauth.py +5 -14
  33. synapse/tools/changelog.py +12 -16
  34. synapse/tools/cmdr.py +2 -6
  35. synapse/tools/cryo/cat.py +5 -15
  36. synapse/tools/cryo/list.py +3 -10
  37. synapse/tools/csvtool.py +40 -49
  38. synapse/tools/demote.py +1 -6
  39. synapse/tools/docker/validate.py +0 -1
  40. synapse/tools/easycert.py +3 -8
  41. synapse/tools/feed.py +7 -18
  42. synapse/tools/genpkg.py +3 -12
  43. synapse/tools/guid.py +4 -6
  44. synapse/tools/healthcheck.py +4 -11
  45. synapse/tools/json2mpk.py +1 -5
  46. synapse/tools/livebackup.py +3 -13
  47. synapse/tools/modrole.py +3 -12
  48. synapse/tools/moduser.py +3 -12
  49. synapse/tools/pkgs/gendocs.py +1 -1
  50. synapse/tools/promote.py +3 -13
  51. synapse/tools/pullfile.py +6 -18
  52. synapse/tools/pushfile.py +6 -18
  53. synapse/tools/reload.py +5 -14
  54. synapse/tools/rstorm.py +4 -12
  55. synapse/tools/shutdown.py +1 -2
  56. synapse/tools/snapshot.py +3 -14
  57. synapse/tools/storm.py +4 -12
  58. {synapse-2.215.0.dist-info → synapse-2.216.0.dist-info}/METADATA +1 -1
  59. {synapse-2.215.0.dist-info → synapse-2.216.0.dist-info}/RECORD +62 -62
  60. {synapse-2.215.0.dist-info → synapse-2.216.0.dist-info}/WHEEL +0 -0
  61. {synapse-2.215.0.dist-info → synapse-2.216.0.dist-info}/licenses/LICENSE +0 -0
  62. {synapse-2.215.0.dist-info → synapse-2.216.0.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,8 @@
1
1
  import os
2
2
  import re
3
- import sys
4
3
  import copy
5
4
  import gzip
6
5
  import pprint
7
- import asyncio
8
- import argparse
9
6
  import datetime
10
7
  import tempfile
11
8
  import textwrap
@@ -19,6 +16,7 @@ import synapse.exc as s_exc
19
16
  import synapse.common as s_common
20
17
  import synapse.cortex as s_cortex
21
18
 
19
+ import synapse.lib.cmd as s_cmd
22
20
  import synapse.lib.output as s_output
23
21
  import synapse.lib.autodoc as s_autodoc
24
22
  import synapse.lib.schemas as s_schemas
@@ -458,7 +456,7 @@ def _getModelFile(fp: str) -> dict | None:
458
456
  ref_modl = s_common.yamlloads(large_bytz)
459
457
  return ref_modl
460
458
 
461
- async def gen(opts: argparse.Namespace,
459
+ async def gen(opts: s_cmd.argparse.Namespace,
462
460
  outp: s_output.OutPut):
463
461
 
464
462
  name = opts.name
@@ -806,7 +804,7 @@ def _gen_model_rst(version, model_ref, changes, current_model, outp: s_output.Ou
806
804
  return rst
807
805
 
808
806
 
809
- async def format(opts: argparse.Namespace,
807
+ async def format(opts: s_cmd.argparse.Namespace,
810
808
  outp: s_output.OutPut):
811
809
 
812
810
  if not regex.match(version_regex, opts.version):
@@ -976,7 +974,7 @@ async def format(opts: argparse.Namespace,
976
974
 
977
975
  return 0
978
976
 
979
- async def model(opts: argparse.Namespace,
977
+ async def model(opts: s_cmd.argparse.Namespace,
980
978
  outp: s_output.OutPut):
981
979
 
982
980
  if opts.save:
@@ -1017,11 +1015,8 @@ async def model(opts: argparse.Namespace,
1017
1015
  outp.printf(line)
1018
1016
  return 0
1019
1017
 
1020
- async def main(argv, outp=None):
1021
- if outp is None:
1022
- outp = s_output.OutPut()
1023
-
1024
- pars = makeargparser()
1018
+ async def main(argv, outp=s_output.stdout):
1019
+ pars = getArgParser(outp)
1025
1020
 
1026
1021
  opts = pars.parse_args(argv)
1027
1022
  if opts.git_dir_check:
@@ -1038,11 +1033,11 @@ async def main(argv, outp=None):
1038
1033
  outp.printf(f'Error running {opts.func}: {traceback.format_exc()}')
1039
1034
  return 1
1040
1035
 
1041
- def makeargparser():
1036
+ def getArgParser(outp: s_output.OutPut):
1042
1037
  desc = '''Command line tool to manage changelog entries.
1043
1038
  This tool and any data formats associated with it may change at any time.
1044
1039
  '''
1045
- pars = argparse.ArgumentParser('synapse.tools.changelog', description=desc)
1040
+ pars = s_cmd.Parser(prog='synapse.tools.changelog', outp=outp, description=desc)
1046
1041
 
1047
1042
  subpars = pars.add_subparsers(required=True,
1048
1043
  title='subcommands',
@@ -1059,7 +1054,7 @@ def makeargparser():
1059
1054
  help='Add the newly created file to the current git staging area.')
1060
1055
  # Hidden name override. Mainly for testing.
1061
1056
  gen_pars.add_argument('-n', '--name', default=None, type=str,
1062
- help=argparse.SUPPRESS)
1057
+ help=s_cmd.argparse.SUPPRESS)
1063
1058
 
1064
1059
  format_pars = subpars.add_parser('format', help='Format existing files into a RST block.')
1065
1060
  format_pars.set_defaults(func=format)
@@ -1101,10 +1096,11 @@ def makeargparser():
1101
1096
  help='Enable verbose output')
1102
1097
  p.add_argument('--cdir', default='./changes', action='store',
1103
1098
  help='Directory of changelog files.')
1099
+ # Hidden name override. Mainly for testing.
1104
1100
  p.add_argument('--disable-git-dir-check', dest='git_dir_check', default=True, action='store_false',
1105
- help=argparse.SUPPRESS)
1101
+ help=s_cmd.argparse.SUPPRESS)
1106
1102
 
1107
1103
  return pars
1108
1104
 
1109
1105
  if __name__ == '__main__': # pragma: no cover
1110
- sys.exit(asyncio.run(main(sys.argv[1:], s_output.stdout)))
1106
+ s_cmd.exitmain(main)
synapse/tools/cmdr.py CHANGED
@@ -1,15 +1,12 @@
1
- import sys
2
- import asyncio
3
1
  import logging
4
2
  import warnings
5
- import contextlib
6
3
 
7
4
  import synapse.exc as s_exc
8
5
  import synapse.common as s_common
9
6
  import synapse.telepath as s_telepath
10
7
 
8
+ import synapse.lib.cmd as s_cmd
11
9
  import synapse.lib.cmdr as s_cmdr
12
- import synapse.lib.coro as s_coro
13
10
  import synapse.lib.version as s_version
14
11
 
15
12
  logger = logging.getLogger(__name__)
@@ -52,9 +49,8 @@ async def main(argv): # pragma: no cover
52
49
 
53
50
  async with s_telepath.withTeleEnv():
54
51
  await _main(argv)
55
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
56
52
  return 0
57
53
 
58
54
  if __name__ == '__main__': # pragma: no cover
59
55
  warnings.filterwarnings("default", category=PendingDeprecationWarning)
60
- sys.exit(asyncio.run(main(sys.argv[1:])))
56
+ s_cmd.exitmain(main)
synapse/tools/cryo/cat.py CHANGED
@@ -1,44 +1,35 @@
1
1
  import sys
2
2
  import pprint
3
- import asyncio
4
3
  import argparse
5
- import logging
6
4
 
7
5
  import synapse.telepath as s_telepath
8
6
 
7
+ import synapse.lib.cmd as s_cmd
9
8
  import synapse.lib.json as s_json
10
9
  import synapse.lib.output as s_output
11
10
  import synapse.lib.msgpack as s_msgpack
12
11
 
13
- logger = logging.getLogger(__name__)
14
-
15
12
  async def main(argv, outp=s_output.stdout):
16
13
 
17
- pars = argparse.ArgumentParser(prog='cryo.cat', description='display data items from a cryo cell')
14
+ pars = s_cmd.Parser(prog='synapse.tools.cryo.cat', outp=outp, description='display data items from a cryo cell')
18
15
  pars.add_argument('cryotank', help='The telepath URL for the remote cryotank.')
19
16
  pars.add_argument('--offset', default=0, type=int, help='Begin at offset index')
20
17
  pars.add_argument('--size', default=10, type=int, help='How many items to display')
21
18
  pars.add_argument('--omit-offset', default=False, action='store_true', help='Output raw items with no offsets.')
22
- # TODO: synapse.tools.cryo.list <cryocell>
23
- # pars.add_argument('--list', default=False, action='store_true', help='List tanks in the remote cell and return')
24
19
  group = pars.add_mutually_exclusive_group()
25
20
  group.add_argument('--jsonl', action='store_true', help='Input/Output items in jsonl format')
26
21
  group.add_argument('--msgpack', action='store_true', help='Input/Output items in msgpack format')
27
- pars.add_argument('--verbose', '-v', default=False, action='store_true', help='Verbose output')
22
+ pars.add_argument('--verbose', '-v', default=False, action='store_true',
23
+ help='Verbose output. This argument is deprecated and no longer has any effect.')
28
24
  pars.add_argument('--ingest', '-i', default=False, action='store_true',
29
25
  help='Reverses direction: feeds cryotank from stdin in msgpack or jsonl format')
30
26
 
31
27
  opts = pars.parse_args(argv)
32
28
 
33
- if opts.verbose:
34
- logger.setLevel(logging.INFO)
35
-
36
29
  if opts.ingest and not opts.jsonl and not opts.msgpack:
37
30
  outp.printf('Must specify exactly one of --jsonl or --msgpack if --ingest is specified')
38
31
  return 1
39
32
 
40
- logger.info(f'connecting to: {opts.cryotank}')
41
-
42
33
  async with s_telepath.withTeleEnv():
43
34
 
44
35
  async with await s_telepath.openurl(opts.cryotank) as tank:
@@ -67,5 +58,4 @@ async def main(argv, outp=s_output.stdout):
67
58
  return 0
68
59
 
69
60
  if __name__ == '__main__': # pragma: no cover
70
- logging.basicConfig()
71
- sys.exit(asyncio.run(main(sys.argv[1:])))
61
+ s_cmd.exitmain(main)
@@ -1,17 +1,11 @@
1
- import sys
2
- import logging
3
- import asyncio
4
- import argparse
5
-
6
1
  import synapse.telepath as s_telepath
7
2
 
3
+ import synapse.lib.cmd as s_cmd
8
4
  import synapse.lib.output as s_output
9
5
 
10
- logger = logging.getLogger(__name__)
11
-
12
6
  async def main(argv, outp=s_output.stdout):
13
7
 
14
- pars = argparse.ArgumentParser(prog='cryo.list', description='List tanks within a cryo cell.')
8
+ pars = s_cmd.Parser(prog='synapse.tools.cryo.list', outp=outp, description='List tanks within a cryo cell.')
15
9
  pars.add_argument('cryocell', nargs='+', help='Telepath URLs to cryo cells.')
16
10
 
17
11
  opts = pars.parse_args(argv)
@@ -30,5 +24,4 @@ async def main(argv, outp=s_output.stdout):
30
24
  return 0
31
25
 
32
26
  if __name__ == '__main__': # pragma: no cover
33
- logging.basicConfig()
34
- sys.exit(asyncio.run(main(sys.argv[1:])))
27
+ s_cmd.exitmain(main)
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)