aboutsummaryrefslogtreecommitdiffstats
path: root/generat3d
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-10-28 10:23:34 +0100
committerDanilo M. <danix@danix.xyz>2026-10-28 10:23:34 +0100
commit8431493b1de912196ea66b9f27c89e4c68658d56 (patch)
tree37bab84bd69aa40d824f42b14ed2bc164c0e2b9c /generat3d
parentdecd09d78505572634a7681e3c1c6b859d2d2f06 (diff)
downloadgenerat3D-8431493b1de912196ea66b9f27c89e4c68658d56.tar.gz
generat3D-8431493b1de912196ea66b9f27c89e4c68658d56.zip
Add package base and config loading
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Diffstat (limited to 'generat3d')
-rw-r--r--generat3d/__init__.py28
-rw-r--r--generat3d/config.py56
2 files changed, 84 insertions, 0 deletions
diff --git a/generat3d/__init__.py b/generat3d/__init__.py
new file mode 100644
index 0000000..917b0c7
--- /dev/null
+++ b/generat3d/__init__.py
@@ -0,0 +1,28 @@
+# 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 sys
+
+__version__ = "0.1.0"
+
+
+class Error(Exception):
+ """Fatal problem. The CLI prints it and exits 1."""
+
+
+def warn(msg):
+ print(f"generat3d: warning: {msg}", file=sys.stderr)
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