41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""CLI-клиент постоянной sdbg-сессии."""
|
|
import argparse
|
|
import json
|
|
import sys
|
|
|
|
from sdbg.server import RPC_GENERATION_MUTATIONS, rpc_call
|
|
from sdbg.session import SessionError
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument('--socket', required=True)
|
|
parser.add_argument('method')
|
|
parser.add_argument('arguments', nargs='?', default='{}',
|
|
help='JSON-объект аргументов')
|
|
args = parser.parse_args()
|
|
try:
|
|
arguments = json.loads(args.arguments)
|
|
if not isinstance(arguments, dict):
|
|
raise ValueError('arguments должен быть JSON-объектом')
|
|
identity = {}
|
|
if args.method != 'status':
|
|
status = rpc_call(args.socket, 'status')
|
|
identity = {'session_id': status['session_id'],
|
|
'build_id': status['build_id']}
|
|
if args.method in RPC_GENERATION_MUTATIONS:
|
|
identity['generation'] = status['generation']
|
|
result = rpc_call(args.socket, args.method, arguments,
|
|
timeout=35 if args.method == 'events' else 10,
|
|
**identity)
|
|
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
return 0
|
|
except (SessionError, ValueError, OSError) as error:
|
|
print('sdbg-client: ' + str(error), file=sys.stderr)
|
|
return 1
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|