first commit

This commit is contained in:
2020-11-03 18:30:14 -08:00
commit 31d8522470
1881 changed files with 345408 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
# -*- coding: utf-8 -*-
"""
Configuration file core loading functions
"""
# Import python libs
import os
import glob
import fnmatch
import dict_tools.update
def parse(hub, raw, cli, os_vars, cli_args, loader):
"""
Determine if a config file or a config dir has been set up and load it up!
"""
# This function is the entry point for the config.file sub
# Figure out what config file value to use in this priority
default = raw[cli]["CONFIG"].get("config", {}).get("default")
default_dir = raw[cli]["CONFIG"].get("config_dir", {}).get("default")
os_conf = os_vars.get("config", default)
os_dir = os_vars.get("config_dir", default_dir)
conf = cli_args.get("config", os_conf)
dir_ = cli_args.get("config_dir", os_dir)
file_opts = {}
dir_opts = {}
if dir_:
file_opts = hub.config.file.init.load_dir(dir_, loader)
if conf:
dir_opts = hub.config.file.init.load(conf, loader)
ret = dict_tools.update.update(dir_opts, file_opts)
return ret
def load(hub, paths, loader, includes=True):
"""
Load a single configuration file
"""
opts = {}
if not isinstance(paths, list):
paths = [paths]
add = []
for fn in paths:
add.extend(glob.glob(fn))
paths.extend(add)
for fn in paths:
fn_data = hub.config.render.init.load_file(loader, fn)
if includes:
fn_data = hub.config.file.init.proc_include(fn, fn_data, loader)
dict_tools.update.update(opts, fn_data)
return opts
def load_dir(
hub,
confdir,
loader,
includes=True,
recurse=True,
):
"""
Load takes a directory location to scan for configuration files. These
files will be read in.
"""
opts = {}
if not isinstance(confdir, list):
confdir = [confdir]
confdirs = []
for dirs in confdir:
if not isinstance(dirs, (list, tuple)):
dirs = [dirs]
for dir_ in dirs:
confdirs.extend(glob.glob(dir_))
paths = []
for dir_ in confdirs:
dirpaths = []
if os.path.isdir(dir_):
if not recurse:
for fn_ in os.listdir(dir_):
path = os.path.join(dir_, fn_)
if os.path.isdir(path):
# Don't process directories
continue
dirpaths.append(path)
else:
for root, dirs, files in os.walk(dir_):
for fn_ in files:
path = os.path.join(root, fn_)
dirpaths.append(path)
# Sort confdir directory paths like:
# /b.txt
# /c.txt
# /a/x.txt
# /b/x.txt
paths.extend(sorted(dirpaths, key=lambda p: (p.count(os.path.sep), p)))
opts = dict_tools.update.update(
opts, hub.config.file.init.load(paths, loader, includes)
)
return opts
def proc_include(hub, fn, opts, loader):
"""
Process include and include_dir
"""
dirname = os.path.dirname(fn)
if opts.get("include_dir"):
idir = opts.pop("include_dir")
if not idir.startswith(os.path.abspath(os.sep)):
idir = os.path.join(dirname, idir)
opts = dict_tools.update.update(
opts, hub.config.file.init.load_dir(idir, loader)
)
hub.config.file.init.proc_include(os.path.join(idir, "f"), opts, loader)
if opts.get("include"):
ifn = opts.pop("include")
if not ifn.startswith(os.path.abspath(os.sep)):
ifn = os.path.join(dirname, ifn)
opts = dict_tools.update.update(opts, hub.config.file.init.load(ifn, loader))
hub.config.file.init.proc_include(ifn, opts, loader)
return opts