57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
"""
|
|
Used to take care of the options that end in `_dir`. The assumption is that
|
|
`_dir` options need to be treated differently. They need to verified to exist
|
|
and they need to be rooted based on the user, root option etc.
|
|
"""
|
|
# Import python libs
|
|
import os
|
|
import pop.hub
|
|
|
|
|
|
def roots(hub: "pop.hub.Hub", default_root, f_opts, root_dir):
|
|
"""
|
|
Detect the root dir data and apply it
|
|
"""
|
|
os_root = os.path.abspath(os.sep)
|
|
root = os_root
|
|
change = False
|
|
non_priv = False
|
|
if hasattr(os, "geteuid"):
|
|
if not os.geteuid() == 0:
|
|
change = True
|
|
non_priv = True
|
|
if root_dir and root_dir != default_root:
|
|
root = root_dir
|
|
change = True
|
|
if not root.endswith(os.sep):
|
|
root = f"{root}{os.sep}"
|
|
if change:
|
|
for imp in f_opts:
|
|
for key in f_opts[imp]:
|
|
if key == "root_dir":
|
|
continue
|
|
if key.endswith("_dir"):
|
|
if non_priv:
|
|
root = os.path.join(os.environ["HOME"], f".{imp}{os.sep}")
|
|
if imp in f_opts[imp][key]:
|
|
a_len = len(imp) + 1
|
|
f_opts[imp][
|
|
key
|
|
] = f"{os_root}{f_opts[imp][key][f_opts[imp][key].index(imp)+a_len:]}"
|
|
f_opts[imp][key] = f_opts[imp][key].replace(os_root, root, 1)
|
|
|
|
|
|
def verify(hub: "pop.hub.Hub", opts):
|
|
"""
|
|
Verify that the environment and all named directories in the
|
|
configuration exist
|
|
"""
|
|
for key in opts:
|
|
if key == "root_dir":
|
|
continue
|
|
if key == "config_dir":
|
|
continue
|
|
if key.endswith("_dir"):
|
|
if not os.path.isdir(opts[key]):
|
|
os.makedirs(opts[key])
|