unify do_listcfg and nicos frappy_list()
This commit is contained in:
parent
6130c5b5c5
commit
a255b9b715
64
frappyman.py
64
frappyman.py
@ -28,6 +28,17 @@ from configparser import ConfigParser
|
|||||||
from servicemanager.base import ServiceManager, ServiceDown, UsageError
|
from servicemanager.base import ServiceManager, ServiceDown, UsageError
|
||||||
|
|
||||||
|
|
||||||
|
def dummy(*args, **kwds):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Node:
|
||||||
|
description = ''
|
||||||
|
|
||||||
|
def __call__(self, equipment_id, description, *args, **kwds):
|
||||||
|
self.description = description
|
||||||
|
|
||||||
|
|
||||||
class FrappyManager(ServiceManager):
|
class FrappyManager(ServiceManager):
|
||||||
group = 'frappy'
|
group = 'frappy'
|
||||||
services = ('main', 'stick', 'addons')
|
services = ('main', 'stick', 'addons')
|
||||||
@ -146,31 +157,45 @@ class FrappyManager(ServiceManager):
|
|||||||
def all_cfg(self, ins, service, by_dir=False):
|
def all_cfg(self, ins, service, by_dir=False):
|
||||||
result = {}
|
result = {}
|
||||||
all_cfg = {}
|
all_cfg = {}
|
||||||
for ins in [ins] if ins else self.info:
|
if not ins:
|
||||||
for service in [service] if service else self.services:
|
return {}
|
||||||
for cfgdir in self.config_dirs(ins, service):
|
namespace = {k: dummy for k in ('Mod', 'Param', 'Command', 'Group')}
|
||||||
result.setdefault(cfgdir, {})
|
namespace['Node'] = node = Node()
|
||||||
cfgs = result[cfgdir]
|
for service in [service] if service else self.services:
|
||||||
root = self.env[ins].get('FRAPPY_ROOT')
|
for cfgdir in self.config_dirs(ins, service):
|
||||||
cfg_pattern ='*_cfg.py' if exists(join(root, 'frappy')) else '*.cfg'
|
result.setdefault(cfgdir, {})
|
||||||
for cfgfile in glob(join(cfgdir, cfg_pattern)):
|
cfgs = result[cfgdir]
|
||||||
desc = ''
|
root = self.env[ins].get('FRAPPY_ROOT')
|
||||||
try:
|
cfg_pattern ='*_cfg.py' if exists(join(root, 'frappy')) else '*.cfg'
|
||||||
|
for cfgfile in glob(join(cfgdir, cfg_pattern)):
|
||||||
|
desc = ''
|
||||||
|
try:
|
||||||
|
if cfgfile.endswith('.py'):
|
||||||
|
node.description = ''
|
||||||
|
try:
|
||||||
|
with open(cfgfile, encoding='utf-8') as f:
|
||||||
|
exec(f.read(), namespace)
|
||||||
|
except Exception as e:
|
||||||
|
node.description = repr(e)
|
||||||
|
desc = node.description
|
||||||
|
else:
|
||||||
parser = ConfigParser()
|
parser = ConfigParser()
|
||||||
parser.read(cfgfile)
|
parser.read(cfgfile)
|
||||||
for s in parser.sections():
|
for s in parser.sections():
|
||||||
if s == 'NODE' or s.startswith('node '):
|
if s == 'NODE' or s.startswith('node '):
|
||||||
desc = parser[s].get('description', '').split('\n')[0]
|
desc = parser[s].get('description', '').split('\n')[0]
|
||||||
break
|
break
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
cfg = basename(cfgfile)[:1-len(cfg_pattern)]
|
cfg = basename(cfgfile)[:1-len(cfg_pattern)]
|
||||||
if cfg not in all_cfg:
|
if cfg not in all_cfg:
|
||||||
all_cfg[cfg] = desc
|
all_cfg[cfg] = desc
|
||||||
cfgs[cfg] = desc
|
cfgs[cfg] = desc
|
||||||
return result if by_dir else all_cfg
|
return result if by_dir else all_cfg
|
||||||
|
|
||||||
def do_listcfg(self, ins='', service=''):
|
def do_listcfg(self, ins='', service='', prt=print):
|
||||||
|
if not ins:
|
||||||
|
raise UsageError('missing instance')
|
||||||
if service:
|
if service:
|
||||||
all_cfg = self.all_cfg(ins, service, by_dir=True)
|
all_cfg = self.all_cfg(ins, service, by_dir=True)
|
||||||
else:
|
else:
|
||||||
@ -179,10 +204,11 @@ class FrappyManager(ServiceManager):
|
|||||||
all_cfg.update(self.all_cfg(ins, service, by_dir=True))
|
all_cfg.update(self.all_cfg(ins, service, by_dir=True))
|
||||||
for cfgdir, cfgs in all_cfg.items():
|
for cfgdir, cfgs in all_cfg.items():
|
||||||
if cfgs:
|
if cfgs:
|
||||||
print('\n--- %s:\n' % cfgdir)
|
prt('')
|
||||||
|
prt('--- %s:' % cfgdir)
|
||||||
keylen = max(len(k) for k in cfgs)
|
keylen = max(len(k) for k in cfgs)
|
||||||
for cfg, desc in cfgs.items():
|
for cfg, desc in cfgs.items():
|
||||||
print('%s %s' % (cfg.ljust(keylen), desc))
|
prt('%s %s' % (cfg.ljust(keylen), desc))
|
||||||
|
|
||||||
def treat_args(self, argdict, unknown=(), extra=()):
|
def treat_args(self, argdict, unknown=(), extra=()):
|
||||||
if len(unknown) == 1:
|
if len(unknown) == 1:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user