def process_inheritance(config_dct, keys):
def get_processed_dct(tlkey, host, hostsdict):
rr = {}
extends = host.get('extends', [])
if isinstance(extends, six.string_types):
extends = [extends]
for extend in extends + [host['name']]:
extend_host = hostsdict[extend]
for key in six.viewkeys(extend_host):
if key in six.viewkeys(rr) and isinstance(rr[key], list):
ehlst = (extend_host[key]
if isinstance(extend_host[key], (list,tuple))
else [extend_host[key]])
for val in ehlst:
if not val in rr[key]:
rr[key].append(val)
else:
rr[key] = copy.deepcopy(extend_host[key])
return rr
for tlkey in keys:
hostsdict = {x['name']: x for x in config_dct.get(tlkey, [])}
dfsnodes = _dfs(config_dct.get(tlkey, []))
#print [x['name'] for x in dfsnodes]
rr = []
for dct in dfsnodes:
isabstract = dct.get('abstract')
#disabled = dct.get('disabled')
dct = get_processed_dct(tlkey, dct, hostsdict)
for key in ['abstract', 'extends']:
if dct.get(key) is not None:
del dct[key]
#if not isabstract:
# process_expansions(dct)
hostsdict[dct['name']] = dct
if not isabstract:
rr.append(dct)
config_dct[tlkey] = rr
评论列表
文章目录