first commit
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
"""
|
||||
Find the conf.py files specified in sources
|
||||
"""
|
||||
# Import python libs
|
||||
import importlib
|
||||
import copy
|
||||
import os
|
||||
import dict_tools
|
||||
|
||||
|
||||
def _load_pyimp(hub, imp):
|
||||
"""
|
||||
Load up a python path, parse it and return the conf dataset
|
||||
"""
|
||||
ret = {imp: {}}
|
||||
cmod = importlib.import_module(f"{imp}.conf")
|
||||
path = os.path.dirname(cmod.__file__)
|
||||
for sec in hub.config.SECTIONS:
|
||||
ret[imp][sec] = copy.deepcopy(getattr(cmod, sec, {}))
|
||||
return path, ret
|
||||
|
||||
|
||||
def load(hub, sources, dyne_names, cli):
|
||||
"""
|
||||
Look over the sources list and find the correct conf.py files
|
||||
"""
|
||||
# Dynamic names
|
||||
# First gather the defined sources, they are the authoritative ones
|
||||
# Then detect what the dynamic names are in the source
|
||||
# Merged the sources dyne names with any passed dyne names
|
||||
# Load up and extend the raw with all of the dynamic names
|
||||
raw = {}
|
||||
dyne = hub.pop.dyne.get()
|
||||
if not isinstance(sources, list):
|
||||
sources = [sources]
|
||||
for source in sources:
|
||||
try:
|
||||
path, data = _load_pyimp(hub, source)
|
||||
except ImportError:
|
||||
continue
|
||||
dict_tools.update.update(raw, data)
|
||||
dnames = set(dyne_names)
|
||||
for source in raw:
|
||||
for dname in raw[source]["DYNE"]:
|
||||
dnames.add(dname)
|
||||
for name in dnames:
|
||||
if name in dyne:
|
||||
if name not in raw:
|
||||
raw[name] = {"CONFIG": {}, "CLI_CONFIG": {}}
|
||||
if "CONFIG" in dyne[name]:
|
||||
config_draw = {}
|
||||
for key, val in dyne[name]["CONFIG"].items():
|
||||
new_dyne = val.get("dyne")
|
||||
if new_dyne == "__cli__":
|
||||
new_dyne = cli
|
||||
if new_dyne:
|
||||
val["source"] = new_dyne
|
||||
config_draw[key] = val
|
||||
if (
|
||||
key in dyne[name]["CLI_CONFIG"]
|
||||
and "dyne" not in dyne[name]["CLI_CONFIG"][key]
|
||||
):
|
||||
dyne[name]["CLI_CONFIG"][key]["dyne"] = new_dyne
|
||||
dict_tools.update.update(raw[cli]["CONFIG"], config_draw)
|
||||
if "CLI_CONFIG" in dyne[name]:
|
||||
cli_draw = {}
|
||||
for key, val in dyne[name]["CLI_CONFIG"].items():
|
||||
new_dyne = val.get("dyne")
|
||||
if new_dyne == "__cli__":
|
||||
new_dyne = cli
|
||||
if new_dyne:
|
||||
val["source"] = new_dyne
|
||||
cli_draw[key] = val
|
||||
dict_tools.update.update(raw[cli]["CLI_CONFIG"], cli_draw)
|
||||
if "SUBCOMMANDS" in dyne[name]:
|
||||
subcmd_draw = {}
|
||||
for key, val in dyne[name]["SUBCOMMANDS"].items():
|
||||
new_dyne = val.get("dyne")
|
||||
if new_dyne == "__cli__":
|
||||
new_dyne = cli
|
||||
if new_dyne:
|
||||
val["source"] = new_dyne
|
||||
subcmd_draw[key] = val
|
||||
dict_tools.update.update(raw[cli]["SUBCOMMANDS"], subcmd_draw)
|
||||
return raw
|
||||
|
||||
|
||||
def verify(hub, opts):
|
||||
"""
|
||||
Verify that the environment and all named directories in the
|
||||
configuration exist
|
||||
"""
|
||||
for imp in opts:
|
||||
for key in opts[imp]:
|
||||
if key == "root_dir":
|
||||
continue
|
||||
if key == "config_dir":
|
||||
continue
|
||||
if key.endswith("_dir"):
|
||||
if not os.path.isdir(opts[imp][key]):
|
||||
os.makedirs(opts[imp][key])
|
||||
Reference in New Issue
Block a user