cli: better error handling for subcommand args

Some subcommands need following arguments (e.g.: ogcli list ...), check
if following arguments are present. If no required following argument is
detected then print an error message, show help and exit with status
code 1.
master
Jose M. Guisado 2023-10-06 10:57:53 +02:00
parent 35b4b1422a
commit d259629445
1 changed files with 54 additions and 9 deletions

View File

@ -73,8 +73,13 @@ class OgCLI():
'servers']
parser = argparse.ArgumentParser(prog='ogcli list')
parser.add_argument('item', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing list subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.item == 'clients':
OgClient.list_clients(self.rest)
elif parsed_args.item == 'client':
@ -96,8 +101,13 @@ class OgCLI():
choices = ['modes', 'mode', 'server']
parser = argparse.ArgumentParser(prog='ogcli set')
parser.add_argument('item', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing set subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.item in ['modes', 'mode']:
OgModes.set_modes(self.rest, args[1:])
elif parsed_args.item == 'server':
@ -107,8 +117,13 @@ class OgCLI():
choices = ['reboot', 'refresh', 'poweroff', 'wol']
parser = argparse.ArgumentParser(prog='ogcli send')
parser.add_argument('send_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing send subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.send_obj == 'wol':
OgWol.send_wol(self.rest, args[1:])
elif parsed_args.send_obj == 'poweroff':
@ -122,8 +137,13 @@ class OgCLI():
choices = ['image']
parser = argparse.ArgumentParser(prog='ogcli restore')
parser.add_argument('send_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing restore subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.send_obj == 'image':
OgImage.restore_image(self.rest, args[1:])
@ -131,8 +151,13 @@ class OgCLI():
choices = ['image']
parser = argparse.ArgumentParser(prog='ogcli create')
parser.add_argument('create_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing create subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.create_obj == 'image':
OgImage.create_image(self.rest, args[1:])
@ -140,8 +165,13 @@ class OgCLI():
choices = ['disk']
parser = argparse.ArgumentParser(prog='ogcli setup')
parser.add_argument('setup_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing setup subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.setup_obj == 'disk':
OgDisk.setup_disk(self.rest, args[1:])
@ -149,8 +179,13 @@ class OgCLI():
choices = ['image']
parser = argparse.ArgumentParser(prog='ogcli update')
parser.add_argument('update_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing update subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.update_obj == 'image':
OgImage.update_image(self.rest, args[1:])
@ -158,8 +193,13 @@ class OgCLI():
choices = ['server']
parser = argparse.ArgumentParser(prog='ogcli delete')
parser.add_argument('delete_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing delete subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.delete_obj == 'server':
OgServer.delete_server(self.rest, args[1:])
@ -167,7 +207,12 @@ class OgCLI():
choices = ['server']
parser = argparse.ArgumentParser(prog='ogcli add')
parser.add_argument('add_obj', choices=choices)
parsed_args = parser.parse_args([args[0]])
if not args:
print('Missing add subcommand', file=sys.stderr)
parser.print_help(file=sys.stderr)
sys.exit(1)
parsed_args = parser.parse_args([args[0]])
if parsed_args.add_obj == 'server':
OgServer.add_server(self.rest, args[1:])