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
|
||||
|
||||
|
||||
def dummy(*args, **kwds):
|
||||
pass
|
||||
|
||||
|
||||
class Node:
|
||||
description = ''
|
||||
|
||||
def __call__(self, equipment_id, description, *args, **kwds):
|
||||
self.description = description
|
||||
|
||||
|
||||
class FrappyManager(ServiceManager):
|
||||
group = 'frappy'
|
||||
services = ('main', 'stick', 'addons')
|
||||
@ -146,31 +157,45 @@ class FrappyManager(ServiceManager):
|
||||
def all_cfg(self, ins, service, by_dir=False):
|
||||
result = {}
|
||||
all_cfg = {}
|
||||
for ins in [ins] if ins else self.info:
|
||||
for service in [service] if service else self.services:
|
||||
for cfgdir in self.config_dirs(ins, service):
|
||||
result.setdefault(cfgdir, {})
|
||||
cfgs = result[cfgdir]
|
||||
root = self.env[ins].get('FRAPPY_ROOT')
|
||||
cfg_pattern ='*_cfg.py' if exists(join(root, 'frappy')) else '*.cfg'
|
||||
for cfgfile in glob(join(cfgdir, cfg_pattern)):
|
||||
desc = ''
|
||||
try:
|
||||
if not ins:
|
||||
return {}
|
||||
namespace = {k: dummy for k in ('Mod', 'Param', 'Command', 'Group')}
|
||||
namespace['Node'] = node = Node()
|
||||
for service in [service] if service else self.services:
|
||||
for cfgdir in self.config_dirs(ins, service):
|
||||
result.setdefault(cfgdir, {})
|
||||
cfgs = result[cfgdir]
|
||||
root = self.env[ins].get('FRAPPY_ROOT')
|
||||
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.read(cfgfile)
|
||||
for s in parser.sections():
|
||||
if s == 'NODE' or s.startswith('node '):
|
||||
desc = parser[s].get('description', '').split('\n')[0]
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
cfg = basename(cfgfile)[:1-len(cfg_pattern)]
|
||||
if cfg not in all_cfg:
|
||||
all_cfg[cfg] = desc
|
||||
cfgs[cfg] = desc
|
||||
except Exception:
|
||||
pass
|
||||
cfg = basename(cfgfile)[:1-len(cfg_pattern)]
|
||||
if cfg not in all_cfg:
|
||||
all_cfg[cfg] = desc
|
||||
cfgs[cfg] = desc
|
||||
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:
|
||||
all_cfg = self.all_cfg(ins, service, by_dir=True)
|
||||
else:
|
||||
@ -179,10 +204,11 @@ class FrappyManager(ServiceManager):
|
||||
all_cfg.update(self.all_cfg(ins, service, by_dir=True))
|
||||
for cfgdir, cfgs in all_cfg.items():
|
||||
if cfgs:
|
||||
print('\n--- %s:\n' % cfgdir)
|
||||
prt('')
|
||||
prt('--- %s:' % cfgdir)
|
||||
keylen = max(len(k) for k in cfgs)
|
||||
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=()):
|
||||
if len(unknown) == 1:
|
||||
|
Loading…
x
Reference in New Issue
Block a user