cli.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding:utf-8 -*-
  2. """
  3. DolphinScheduler API CLI 入口。
  4. 用法:
  5. python -m dw_base.ds.cli get <path> [-p k=v ...]
  6. python -m dw_base.ds.cli post <path> [-j '<json-body>']
  7. 示例:
  8. python -m dw_base.ds.cli get /projects -p pageSize=10 -p pageNo=1
  9. python -m dw_base.ds.cli post /projects/123/process-definition/query -j '{}'
  10. """
  11. import argparse
  12. import json
  13. import sys
  14. from dw_base.ds.api import DSClient
  15. def _parse_kv(items):
  16. d = {}
  17. for it in items or []:
  18. if '=' not in it:
  19. sys.stderr.write('参数 -p 需要 k=v 格式,跳过:' + it + '\n')
  20. continue
  21. k, v = it.split('=', 1)
  22. d[k] = v
  23. return d
  24. def main():
  25. parser = argparse.ArgumentParser(prog='dw_base.ds.cli', description='DolphinScheduler API CLI')
  26. sub = parser.add_subparsers(dest='cmd')
  27. sub.required = True
  28. g = sub.add_parser('get', help='HTTP GET')
  29. g.add_argument('path', help='API path,如 /projects')
  30. g.add_argument('-p', action='append', default=[], metavar='k=v', help='query 参数(可多次)')
  31. p = sub.add_parser('post', help='HTTP POST')
  32. p.add_argument('path')
  33. p.add_argument('-j', dest='body', default=None, metavar='JSON', help='JSON body')
  34. args = parser.parse_args()
  35. client = DSClient()
  36. if args.cmd == 'get':
  37. result = client.get(args.path, params=_parse_kv(args.p))
  38. else:
  39. body = json.loads(args.body) if args.body else None
  40. result = client.post(args.path, json_body=body)
  41. print(json.dumps(result, ensure_ascii=False, indent=2))
  42. if __name__ == '__main__':
  43. main()