better argument treatment

This commit is contained in:
2021-04-28 12:04:58 +02:00
parent 97af531a5c
commit e663c97b80
5 changed files with 114 additions and 42 deletions

View File

@ -57,23 +57,24 @@ def run(group, arglist):
defaults = parser['DEFAULT']
managers = {cls.group: cls() for cls in all if cls.group + '_command' in defaults}
serv = managers[group]
arglist = arglist + [''] # add dummy argument
if arglist[0].endswith('help'):
serv.usage()
return
action = arglist.pop(0) if hasattr(serv, 'do_' + arglist[0]) else 'gui'
instance = arglist.pop(0) if arglist[0] and arglist[0] not in serv.services else None
if instance is None and serv.main_ins:
instance = serv.main_ins
if instance is not None:
arglist.insert(0, instance)
arglist.pop() # remove dummy argument
args = dict(action='gui', ins=serv.main_ins)
extra = []
for arg in arglist:
if hasattr(serv, 'do_' + arg):
args['action'] = arg
elif arg in serv.services:
args['service'] = arg
elif arg in serv.info:
args['ins'] = arg
else:
extra.append(arg)
print(args, extra)
try:
serv.action(action, *arglist)
serv.action(args['action'], *serv.treat_args(args, extra))
except AttributeError:
raise
except UsageError as e:
serv.usage()
serv.do_help()
print('ERROR:', str(e))