diff --git a/src/cfengine_cli/paths.py b/src/cfengine_cli/paths.py index 018bd64..be3e54f 100644 --- a/src/cfengine_cli/paths.py +++ b/src/cfengine_cli/paths.py @@ -4,12 +4,12 @@ from cf_remote.paths import path_append -def cfengine_dir(subdir=None): +def cfengine_cache_dir(subdir=None): """ - Returns the directory used by the Python tools for temporary files, - global config, downloads, etc. + Returns the directory used by the Python tools for temporary + files, downloads, etc. - Defaults to ~/.cfengine/, but can be overridden via the CFENGINE_DIR + Defaults to ~/.cache/cfengine/, but can be overridden via the CFENGINE_DIR environment variable. """ override_dir = os.getenv("CFENGINE_DIR") @@ -27,7 +27,32 @@ def cfengine_dir(subdir=None): return path_append(override_dir, subdir) - return path_append("~/.cfengine/", subdir) + return path_append("~/.cache/cfengine/", subdir) + + +def cfengine_config_dir(subdir=None): + """ + Returns the directory used by the Python tools for config/persistent files. + + Defaults to ~/.config/cfengine/, but can be overridden via the CFENGINE_DIR + environment variable. + """ + override_dir = os.getenv("CFENGINE_DIR") + + if override_dir: + override_dir = os.path.normpath(override_dir) + parent = os.path.dirname(override_dir) + + if not os.path.exists(parent): + raise UserError( + "'{}' doesn't exist. Make sure this path is correct and exists.".format( + parent + ) + ) + + return path_append(override_dir, subdir) + + return path_append("~/.config/cfengine/", subdir) def bin(component: str) -> str: diff --git a/tests/unit/test_paths.py b/tests/unit/test_paths.py index 00e4ce4..1d63df6 100644 --- a/tests/unit/test_paths.py +++ b/tests/unit/test_paths.py @@ -1,15 +1,28 @@ import os -from cfengine_cli.paths import cfengine_dir, bin +from cfengine_cli.paths import cfengine_config_dir, cfengine_cache_dir, bin -def test_cfengine_dir(): - a = os.path.abspath(os.path.expanduser(cfengine_dir())) - b = os.path.abspath(os.path.expanduser("~/.cfengine")) + +def test_cfengine_cache_dir(): + a = os.path.abspath(os.path.expanduser(cfengine_cache_dir())) + b = os.path.abspath(os.path.expanduser("~/.cache/cfengine")) + + assert a == b + + a = os.path.abspath(os.path.expanduser(cfengine_cache_dir("subdir"))) + b = os.path.abspath(os.path.expanduser("~/.cache/cfengine/subdir")) + + assert a == b + + +def test_cfengine_conf_dir(): + a = os.path.abspath(os.path.expanduser(cfengine_config_dir())) + b = os.path.abspath(os.path.expanduser("~/.config/cfengine")) assert a == b - a = os.path.abspath(os.path.expanduser(cfengine_dir("subdir"))) - b = os.path.abspath(os.path.expanduser("~/.cfengine/subdir")) + a = os.path.abspath(os.path.expanduser(cfengine_config_dir("subdir"))) + b = os.path.abspath(os.path.expanduser("~/.config/cfengine/subdir")) assert a == b