allow 'incldue' and 'override'
This commit is contained in:
41
frappyman.py
41
frappyman.py
@ -37,9 +37,12 @@ STICK = 2
|
|||||||
|
|
||||||
|
|
||||||
class Namespace(dict):
|
class Namespace(dict):
|
||||||
def __init__(self):
|
def __init__(self, frappymanager, *args):
|
||||||
|
self.fm = frappymanager
|
||||||
|
self.args = args
|
||||||
self['Node'] = self.node
|
self['Node'] = self.node
|
||||||
self['Mod'] = self.mod
|
self['Mod'] = self.mod
|
||||||
|
self['Include'] = self.include
|
||||||
for fun in 'Param', 'Command', 'Group':
|
for fun in 'Param', 'Command', 'Group':
|
||||||
self[fun] = self.dummy
|
self[fun] = self.dummy
|
||||||
self.init()
|
self.init()
|
||||||
@ -59,6 +62,12 @@ class Namespace(dict):
|
|||||||
def dummy(self, *args, **kwds):
|
def dummy(self, *args, **kwds):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def include(self, cfg):
|
||||||
|
local = {}
|
||||||
|
print('INCLUDE', self.args, cfg, self.fm.get_cfg_file(*self.args, cfg, True))
|
||||||
|
with open(self.fm.get_cfg_file(*self.args, cfg, True), encoding='utf-8') as f:
|
||||||
|
exec(f.read(), self, local)
|
||||||
|
|
||||||
__builtins__ = builtins
|
__builtins__ = builtins
|
||||||
|
|
||||||
|
|
||||||
@ -225,19 +234,25 @@ class FrappyManager(ServiceManager):
|
|||||||
return namespace.description, local.get('sea_cfg', namespace.sea_cfg)
|
return namespace.description, local.get('sea_cfg', namespace.sea_cfg)
|
||||||
|
|
||||||
def cfg_details(self, ins, service, cfg):
|
def cfg_details(self, ins, service, cfg):
|
||||||
namespace = Namespace()
|
namespace = Namespace(self, ins, service)
|
||||||
for cfgdir in self.config_dirs(ins, service):
|
if cfgfile:
|
||||||
cfgfile = join(cfgdir, f'{cfg}_cfg.py')
|
return self.get_cfg_details(namespace, cfgfile)
|
||||||
if exists(cfgfile):
|
|
||||||
return self.get_cfg_details(namespace, cfgfile)
|
|
||||||
raise FileNotFoundError(f'{cfg} not found')
|
raise FileNotFoundError(f'{cfg} not found')
|
||||||
|
|
||||||
def is_cfg(self, ins, service, cfg):
|
def get_cfg_file(self, ins, service, cfg, lazy=False):
|
||||||
|
filenames = [f'{cfg}_cfg.py']
|
||||||
|
if lazy:
|
||||||
|
filenames.extend([f'{cfg}.py', cfg])
|
||||||
for cfgdir in self.config_dirs(ins, service):
|
for cfgdir in self.config_dirs(ins, service):
|
||||||
cfgfile = join(cfgdir, f'{cfg}_cfg.py')
|
for filename in filenames:
|
||||||
if exists(cfgfile):
|
cfgfile = join(cfgdir, filename)
|
||||||
return True
|
if exists(cfgfile):
|
||||||
return False
|
return cfgfile
|
||||||
|
print('NOT FOUND', cfg, self.config_dirs(ins, service), filenames)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def is_cfg(self, ins, service, cfg):
|
||||||
|
return bool(self.get_cfg_file(ins, service, cfg))
|
||||||
|
|
||||||
def all_cfg(self, ins, service, details=False):
|
def all_cfg(self, ins, service, details=False):
|
||||||
"""get available cfg files
|
"""get available cfg files
|
||||||
@ -255,7 +270,7 @@ class FrappyManager(ServiceManager):
|
|||||||
all_cfg = set()
|
all_cfg = set()
|
||||||
if not ins:
|
if not ins:
|
||||||
return {}
|
return {}
|
||||||
namespace = Namespace()
|
namespace = Namespace(self, ins, service)
|
||||||
if details:
|
if details:
|
||||||
self.frappy2sea = f2s = {}
|
self.frappy2sea = f2s = {}
|
||||||
self.sea2frappy = s2f = {}
|
self.sea2frappy = s2f = {}
|
||||||
@ -326,7 +341,7 @@ class FrappyManager(ServiceManager):
|
|||||||
argdict['service'] = cfg
|
argdict['service'] = cfg
|
||||||
return super().treat_args(argdict, (), extra)
|
return super().treat_args(argdict, (), extra)
|
||||||
if (',' in cfg or cfg.endswith('.cfg') or
|
if (',' in cfg or cfg.endswith('.cfg') or
|
||||||
self.is_cfg(argdict.get('ins'), argdict.get('service'), cfg)):
|
self.get_cfg_file(argdict.get('ins'), argdict.get('service'), cfg, True)):
|
||||||
return super().treat_args(argdict, (), [cfg] + extra)
|
return super().treat_args(argdict, (), [cfg] + extra)
|
||||||
return super().treat_args(argdict, unknown, extra)
|
return super().treat_args(argdict, unknown, extra)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user