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

25
base.py
View File

@ -251,7 +251,7 @@ class ServiceManager:
if not self.stop(ins, service):
print('nothing to stop')
def prepare_start(self, ins, service):
def prepare_start(self, ins, service, cfg=''):
if ins not in self.env:
self.get_info()
gr = self.group.upper()
@ -300,12 +300,15 @@ class ServiceManager:
if not cmd:
if restart and service is None:
continue # silently ignore missing cfg when restarting all services
raise ValueError('missing cfg for %s %s' % (ins, service_i))
raise UsageError('missing cfg for %s %s' % (ins, service_i))
wd = os.getcwd()
try:
start_dir, env = self.prepare_start(ins, service_i)
start_dir, env = self.prepare_start(ins, service_i, cfg)
env = dict(os.environ, **env)
os.chdir(start_dir)
if start_dir not in sys.path:
sys.path.insert(0, start_dir)
print('SYSPATH', sys.path)
if wait:
proc = subprocess.Popen(cmd.split(), env=env)
proc.wait()
@ -353,7 +356,10 @@ class ServiceManager:
def do_run(self, ins, service=None, cfg=None):
"""for tests: run and wait"""
if not service:
service, = self.services
try:
service, = self.services
except ValueError:
raise UsageError('need service to start (one of %s)' % ', '.join(self.services))
self.do_start(ins, service, cfg, wait=True)
def do_list(self, ins=None, *args):
@ -417,10 +423,19 @@ class ServiceManager:
raise UsageError(errtxt)
raise
def usage(self):
def do_help(self, *args):
if self.main_ins:
usage = self.USAGE.replace(' <instance>', '').replace(' [<instance>]', '') % ''
else:
usage = self.USAGE % ('<instance> is one of %s' % ', '.join(self.info))
print(usage)
def treat_args(self, argdict, unknown=(), extra=()):
if unknown:
raise UsageError('unknown argument: %s' % (' '.join(unknown)))
if extra:
return [argdict.get('ins'), argdict.get('service')] + extra
args = [argdict.get('ins'), argdict.get('service')]
while args and not args[-1]:
args.pop()
return args