38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
"""Settings from config.toml (or the file named by ENSVOICE_CONFIG) and the work-directory layout."""
|
|
import os
|
|
import pathlib
|
|
import tomllib
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parent.parent
|
|
|
|
|
|
class Config:
|
|
def __init__(self, path=None):
|
|
path = pathlib.Path(path or os.environ.get("ENSVOICE_CONFIG") or ROOT / "config.toml")
|
|
if not path.exists():
|
|
raise SystemExit(f"no config: {path} (copy config.example.toml to config.toml and edit it)")
|
|
self.raw = tomllib.loads(path.read_text(encoding="utf-8"))
|
|
p = self.raw["paths"]
|
|
self.game = pathlib.Path(p["game"])
|
|
self.work = pathlib.Path(p["work"])
|
|
self.tools = pathlib.Path(p.get("tools", ROOT / "tools"))
|
|
self.work.mkdir(parents=True, exist_ok=True)
|
|
# ENSVOICE_NOTES=n016,n238 limits segments (and so everything after it) to these notes
|
|
self.only = {x.strip() for x in os.environ.get("ENSVOICE_NOTES", "").split(",") if x.strip()}
|
|
|
|
def __getitem__(self, key):
|
|
return self.raw[key]
|
|
|
|
def get(self, section, key, default=None):
|
|
return self.raw.get(section, {}).get(key, default)
|
|
|
|
# work-directory layout (everything derived from the game stays here, never in the repo)
|
|
def w(self, *parts) -> pathlib.Path:
|
|
p = self.work.joinpath(*parts)
|
|
p.parent.mkdir(parents=True, exist_ok=True)
|
|
return p
|
|
|
|
|
|
def load(path=None) -> Config:
|
|
return Config(path)
|