diff options
Diffstat (limited to 'generat3d/config.py')
| -rw-r--r-- | generat3d/config.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/generat3d/config.py b/generat3d/config.py new file mode 100644 index 0000000..9ea7266 --- /dev/null +++ b/generat3d/config.py @@ -0,0 +1,56 @@ +# generat3D - evaluate Daz DSON scenes and write .dbz files +# Copyright (C) 2026 Danilo M. <danix@danix.xyz> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import os +import tomllib +from pathlib import Path + +from . import Error + +KEYS = {"library_roots"} + + +def config_path(): + base = os.environ.get("XDG_CONFIG_HOME") or os.path.expanduser("~/.config") + return Path(base) / "generat3d" / "config.toml" + + +def library_roots(cli_roots, path=None): + """Library roots from -L if given (replacing the config), else from the config file.""" + path = Path(path) if path else config_path() + roots = list(cli_roots) + if not roots and path.exists(): + try: + with open(path, "rb") as f: + data = tomllib.load(f) + except tomllib.TOMLDecodeError as e: + raise Error(f"{path}: {e}") from None + unknown = sorted(set(data) - KEYS) + if unknown: + raise Error(f"{path}: unknown keys: {', '.join(unknown)}") + roots = data.get("library_roots", []) + if not isinstance(roots, list) or not all(isinstance(r, str) for r in roots): + raise Error(f"{path}: library_roots must be a list of strings") + if not roots: + raise Error(f"no library roots: pass -L or set library_roots in {path}") + out = [] + for r in roots: + p = Path(r).expanduser() + if not p.is_dir(): + raise Error(f"library root not found: {p}") + out.append(p) + return out |
