synapse 2.215.0__py311-none-any.whl → 2.217.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 (64) 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/stormtypes.py +6 -0
  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 +24 -4
  13. synapse/models/orgs.py +4 -2
  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_storm.py +52 -1
  18. synapse/tests/test_lib_stormsvc.py +2 -2
  19. synapse/tests/test_lib_types.py +6 -0
  20. synapse/tests/test_model_inet.py +23 -0
  21. synapse/tests/test_tools_cryo_cat.py +3 -8
  22. synapse/tests/test_tools_storm.py +3 -2
  23. synapse/tests/utils.py +2 -0
  24. synapse/tools/aha/clone.py +3 -13
  25. synapse/tools/aha/easycert.py +5 -18
  26. synapse/tools/aha/enroll.py +3 -12
  27. synapse/tools/aha/list.py +2 -15
  28. synapse/tools/aha/mirror.py +3 -14
  29. synapse/tools/aha/provision/service.py +3 -13
  30. synapse/tools/aha/provision/user.py +3 -12
  31. synapse/tools/apikey.py +3 -13
  32. synapse/tools/autodoc.py +7 -19
  33. synapse/tools/axon2axon.py +1 -9
  34. synapse/tools/cellauth.py +5 -14
  35. synapse/tools/changelog.py +12 -16
  36. synapse/tools/cmdr.py +2 -6
  37. synapse/tools/cryo/cat.py +5 -15
  38. synapse/tools/cryo/list.py +3 -10
  39. synapse/tools/csvtool.py +40 -49
  40. synapse/tools/demote.py +1 -6
  41. synapse/tools/docker/validate.py +0 -1
  42. synapse/tools/easycert.py +3 -8
  43. synapse/tools/feed.py +7 -18
  44. synapse/tools/genpkg.py +3 -12
  45. synapse/tools/guid.py +4 -6
  46. synapse/tools/healthcheck.py +4 -11
  47. synapse/tools/json2mpk.py +1 -5
  48. synapse/tools/livebackup.py +3 -13
  49. synapse/tools/modrole.py +3 -12
  50. synapse/tools/moduser.py +3 -12
  51. synapse/tools/pkgs/gendocs.py +1 -1
  52. synapse/tools/promote.py +3 -13
  53. synapse/tools/pullfile.py +6 -18
  54. synapse/tools/pushfile.py +6 -18
  55. synapse/tools/reload.py +5 -14
  56. synapse/tools/rstorm.py +4 -12
  57. synapse/tools/shutdown.py +1 -2
  58. synapse/tools/snapshot.py +3 -14
  59. synapse/tools/storm.py +4 -12
  60. {synapse-2.215.0.dist-info → synapse-2.217.0.dist-info}/METADATA +1 -1
  61. {synapse-2.215.0.dist-info → synapse-2.217.0.dist-info}/RECORD +64 -64
  62. {synapse-2.215.0.dist-info → synapse-2.217.0.dist-info}/WHEEL +0 -0
  63. {synapse-2.215.0.dist-info → synapse-2.217.0.dist-info}/licenses/LICENSE +0 -0
  64. {synapse-2.215.0.dist-info → synapse-2.217.0.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,8 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.exc as s_exc
6
2
  import synapse.common as s_common
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
 
12
8
  descr = '''
@@ -24,8 +20,7 @@ Examples:
24
20
 
25
21
  async def main(argv, outp=s_output.stdout):
26
22
 
27
- pars = argparse.ArgumentParser(prog='synapse.tools.aha.provision.service', description=descr,
28
- formatter_class=argparse.RawDescriptionHelpFormatter)
23
+ pars = s_cmd.Parser(prog='synapse.tools.aha.provision.service', outp=outp, description=descr)
29
24
 
30
25
  pars.add_argument('--url', default='cell:///vertex/storage', help='The telepath URL to connect to the AHA service.')
31
26
  pars.add_argument('--user', help='Provision the new service with the username.')
@@ -79,10 +74,5 @@ async def main(argv, outp=s_output.stdout):
79
74
  outp.printf(f'ERROR: {mesg}')
80
75
  return 1
81
76
 
82
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
83
- ret = await main(argv, outp=outp)
84
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
85
- return ret
86
-
87
77
  if __name__ == '__main__': # pragma: no cover
88
- sys.exit(asyncio.run(_main(sys.argv[1:])))
78
+ s_cmd.exitmain(main)
@@ -1,11 +1,7 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.exc as s_exc
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 = '''
@@ -23,8 +19,7 @@ Examples:
23
19
 
24
20
  async def main(argv, outp=s_output.stdout):
25
21
 
26
- pars = argparse.ArgumentParser(prog='synapse.tools.aha.provision.user', description=descr,
27
- formatter_class=argparse.RawDescriptionHelpFormatter)
22
+ pars = s_cmd.Parser(prog='synapse.tools.aha.provision.user', outp=outp, description=descr)
28
23
 
29
24
  pars.add_argument('--url', default='cell:///vertex/storage', help='The telepath URL to connect to the AHA service.')
30
25
  pars.add_argument('--again', default=False, action='store_true', help='Generate a new enroll URL for an existing user.')
@@ -50,10 +45,6 @@ async def main(argv, outp=s_output.stdout):
50
45
  outp.printf(f'ERROR: {mesg}')
51
46
  return 1
52
47
 
53
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
54
- ret = await main(argv, outp=outp)
55
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
56
- return ret
57
48
 
58
49
  if __name__ == '__main__': # pragma: no cover
59
- sys.exit(asyncio.run(_main(sys.argv[1:])))
50
+ s_cmd.exitmain(main)
synapse/tools/apikey.py CHANGED
@@ -1,11 +1,7 @@
1
- import sys
2
- import asyncio
3
- import argparse
4
-
5
1
  import synapse.exc as s_exc
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.time as s_time
10
6
  import synapse.lib.output as s_output
11
7
 
@@ -33,7 +29,7 @@ def printkey(outp, info, apikey=None):
33
29
 
34
30
  async def main(argv, outp=s_output.stdout):
35
31
 
36
- pars = argparse.ArgumentParser(prog='apikey', description=descr)
32
+ pars = s_cmd.Parser(prog='synapse.tools.apikey', outp=outp, description=descr)
37
33
  pars.add_argument('--svcurl', default='cell:///vertex/storage', help='The telepath URL of the Synapse service.')
38
34
 
39
35
  subpars = pars.add_subparsers(dest='action', required=True)
@@ -90,11 +86,5 @@ async def main(argv, outp=s_output.stdout):
90
86
 
91
87
  return 0
92
88
 
93
-
94
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
95
- ret = await main(argv, outp=outp)
96
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
97
- return ret
98
-
99
89
  if __name__ == '__main__': # pragma: no cover
100
- sys.exit(asyncio.run(_main(sys.argv[1:])))
90
+ s_cmd.exitmain(main)
synapse/tools/autodoc.py CHANGED
@@ -1,8 +1,5 @@
1
- import sys
2
1
  import copy
3
- import asyncio
4
2
  import logging
5
- import argparse
6
3
  import collections
7
4
 
8
5
  from typing import List, Tuple, Dict, Union
@@ -12,7 +9,7 @@ import synapse.common as s_common
12
9
  import synapse.cortex as s_cortex
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.storm as s_storm
18
15
  import synapse.lib.config as s_config
@@ -962,12 +959,8 @@ async def docStormTypes():
962
959
 
963
960
  return libspage, typespage
964
961
 
965
- async def main(argv, outp=None):
966
- if outp is None:
967
- outp = s_output.OutPut()
968
-
969
- pars = makeargparser()
970
-
962
+ async def main(argv, outp=s_output.stdout):
963
+ pars = getArgParser(outp)
971
964
  opts = pars.parse_args(argv)
972
965
 
973
966
  if opts.doc_model:
@@ -1018,9 +1011,9 @@ async def main(argv, outp=None):
1018
1011
 
1019
1012
  return 0
1020
1013
 
1021
- def makeargparser():
1014
+ def getArgParser(outp):
1022
1015
  desc = 'Command line tool to generate various synapse documentation.'
1023
- pars = argparse.ArgumentParser('synapse.tools.autodoc', description=desc)
1016
+ pars = s_cmd.Parser(prog='synapse.tools.autodoc', outp=outp, description=desc)
1024
1017
 
1025
1018
  pars.add_argument('--cortex', '-c', default=None,
1026
1019
  help='Cortex URL for model inspection')
@@ -1042,11 +1035,6 @@ def makeargparser():
1042
1035
 
1043
1036
  return pars
1044
1037
 
1045
- async def _main(argv, outp=None): # pragma: no cover
1046
- s_common.setlogging(logger, 'DEBUG')
1047
- ret = await main(argv, outp=outp)
1048
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
1049
- return ret
1050
-
1051
1038
  if __name__ == '__main__': # pragma: no cover
1052
- asyncio.run(_main(sys.argv[1:]))
1039
+ s_common.setlogging(logger, 'DEBUG')
1040
+ s_cmd.exitmain(main)
@@ -1,5 +1,3 @@
1
- import sys
2
- import asyncio
3
1
  import logging
4
2
 
5
3
  import synapse.common as s_common
@@ -8,7 +6,6 @@ import synapse.telepath as s_telepath
8
6
  import synapse.exc as s_exc
9
7
  import synapse.lib.cmd as s_cmd
10
8
  import synapse.lib.base as s_base
11
- import synapse.lib.coro as s_coro
12
9
  import synapse.lib.output as s_output
13
10
 
14
11
  logger = logging.getLogger(__name__)
@@ -43,10 +40,5 @@ async def main(argv, outp=s_output.stdout):
43
40
  await fd.save()
44
41
  return 0
45
42
 
46
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
47
- ret = await main(argv, outp=outp)
48
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
49
- return ret
50
-
51
43
  if __name__ == '__main__': # pragma: no cover
52
- sys.exit(asyncio.run(_main(sys.argv[1:])))
44
+ s_cmd.exitmain(main)
synapse/tools/cellauth.py CHANGED
@@ -1,4 +1,3 @@
1
- import sys
2
1
  import asyncio
3
2
  import logging
4
3
  import functools
@@ -9,7 +8,6 @@ import synapse.common as s_common
9
8
  import synapse.telepath as s_telepath
10
9
 
11
10
  import synapse.lib.cmd as s_cmd
12
- import synapse.lib.coro as s_coro
13
11
  import synapse.lib.output as s_output
14
12
  import synapse.lib.version as s_version
15
13
 
@@ -18,7 +16,7 @@ logger = logging.getLogger(__name__)
18
16
  desc = '''
19
17
  Manage permissions of users, roles, and objects in a remote cell.
20
18
  '''
21
- outp = None
19
+ outp = None # type: s_output.OutPut
22
20
 
23
21
  min_authgate_vers = (0, 1, 33)
24
22
  reqver = '>=0.2.0,<3.0.0'
@@ -266,9 +264,7 @@ async def handleList(opts):
266
264
  else:
267
265
  return 0
268
266
 
269
- async def main(argv, outprint=None):
270
- if outprint is None: # pragma: no cover
271
- outprint = s_output.OutPut()
267
+ async def main(argv, outprint=s_output.stdout):
272
268
  global outp
273
269
  outp = outprint
274
270
 
@@ -289,7 +285,7 @@ async def main(argv, outprint=None):
289
285
 
290
286
  def makeargparser():
291
287
  global outp
292
- pars = s_cmd.Parser('synapse.tools.cellauth', outp=outp, description=desc)
288
+ pars = s_cmd.Parser(prog='synapse.tools.cellauth', outp=outp, description=desc)
293
289
 
294
290
  pars.add_argument('--debug', action='store_true', help='Show debug traceback on error.')
295
291
  pars.add_argument('cellurl', help='The telepath URL to connect to a cell.')
@@ -337,11 +333,6 @@ def makeargparser():
337
333
  pars_mod.set_defaults(func=handleModify)
338
334
  return pars
339
335
 
340
- async def _main(argv, outp=s_output.stdout): # pragma: no cover
341
- s_common.setlogging(logger, 'DEBUG')
342
- ret = await main(argv, outprint=outp)
343
- await asyncio.wait_for(s_coro.await_bg_tasks(), timeout=60)
344
- return ret
345
-
346
336
  if __name__ == '__main__': # pragma: no cover
347
- sys.exit(asyncio.run(_main(sys.argv[1:])))
337
+ s_common.setlogging(logger, 'DEBUG')
338
+ s_cmd.exitmain(main)
@@ -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)