better argument treatment
This commit is contained in:
27
__init__.py
27
__init__.py
@ -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))
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user