55import logging
66import os
77import signal
8+ import sys
89
910from zrpc .server import Server , rpc_method
1011from zrpc .client import Client
@@ -22,7 +23,7 @@ def main(argv=None):
2223
2324 try :
2425 logging .basicConfig (level = logging .DEBUG if args .debug else logging .INFO )
25- call (args )
26+ globals ()[ args . command ] (args )
2627 except KeyboardInterrupt :
2728 pass
2829 except BrokenPipeError :
@@ -43,27 +44,38 @@ def parse_args(argv=None):
4344 'socket directory '
4445 '(default: /tmp/zrpc_sockets)' )
4546
46- parser .add_argument ('-d' , '--debug' ,
47+ subparsers = parser .add_subparsers (title = 'command' ,
48+ dest = 'command' )
49+
50+ call_parser = subparsers .add_parser (name = 'call' ,
51+ description = 'Call an RPC method.' )
52+
53+ call_parser .add_argument ('-d' , '--debug' ,
4754 help = 'Turn on debug logs' ,
4855 action = 'store_true' )
49- parser .add_argument ('-c' , '--count' ,
56+ call_parser .add_argument ('-c' , '--count' ,
5057 help = 'Send N requests ("inf" for loop)' ,
5158 default = 1 ,
5259 type = lambda x : float (x ) if x == 'inf' else int (x ))
53- parser .add_argument ('service' ,
60+ call_parser .add_argument ('service' ,
5461 help = 'Service name' ,
5562 metavar = 'SERVICE' )
56- parser .add_argument ('method' ,
63+ call_parser .add_argument ('method' ,
5764 help = 'Method to call' ,
5865 metavar = 'METHOD' )
59- parser .add_argument ('payload' ,
66+ call_parser .add_argument ('payload' ,
6067 help = 'Payload to send [python object]' ,
6168 metavar = 'PAYLOAD' ,
6269 nargs = '?' ,
6370 type = ast .literal_eval ,
6471 default = None )
6572
66- return parser .parse_args (argv )
73+ args = parser .parse_args (argv )
74+ if args .command is None :
75+ parser .print_help ()
76+ sys .exit (1 )
77+ else :
78+ return args
6779
6880
6981def call (args ):
0 commit comments