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