first commit
This commit is contained in:
Binary file not shown.
@@ -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
|
||||
Reference in New Issue
Block a user