From 13e1a19c5ba9c104cb15583a901804022e68679c Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Tue, 21 Nov 2023 13:05:55 +0000 Subject: [PATCH] Fix confdir passing to workers --- cista/config.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/cista/config.py b/cista/config.py index bb906bb..83f6abf 100644 --- a/cista/config.py +++ b/cista/config.py @@ -7,7 +7,7 @@ from functools import wraps from hashlib import sha256 from pathlib import Path, PurePath from time import time - +from contextlib import suppress import msgspec @@ -37,6 +37,22 @@ config = None conffile = None +def init_confdir(): + if p := os.environ.get("CISTA_HOME"): + home = Path(p) + else: + xdg = os.environ.get("XDG_CONFIG_HOME") + home = ( + Path(xdg).expanduser() / "cista" if xdg else Path.home() / ".config/cista" + ) + if not home.exists() + home.mkdir(parents=True, exist_ok=True) + home.chmod(0o700) + + global conffile + conffile = home / "db.toml" + + def derived_secret(*params, len=8) -> bytes: """Used to derive secret keys from the main secret""" # Each part is made the same length by hashing first @@ -62,8 +78,8 @@ def dec_hook(typ, obj): def config_update(modify): global config - if not conffile.exists(): - conffile.parent.mkdir(parents=True, exist_ok=True) + if conffile is None: + init_confdir() tmpname = conffile.with_suffix(".tmp") try: f = tmpname.open("xb") @@ -77,10 +93,6 @@ def config_update(modify): old = conffile.read_bytes() c = msgspec.toml.decode(old, type=Config, dec_hook=dec_hook) except FileNotFoundError: - # No existing config file, make sure we have a folder... - confdir = conffile.parent - confdir.mkdir(parents=True, exist_ok=True) - confdir.chmod(0o700) old = b"" c = None c = modify(c) @@ -93,7 +105,9 @@ def config_update(modify): f.write(new) f.close() if sys.platform == "win32": - conffile.unlink() # Windows doesn't support atomic replace + # Windows doesn't support atomic replace + with suppress(FileNotFoundError): + conffile.unlink() tmpname.rename(conffile) # Atomic replace except: f.close() @@ -121,9 +135,8 @@ def modifies_config(modify): def load_config(): global config, conffile - conffile = ( - Path(os.environ.get("CISTA_HOME")) or Path.home() / ".local/share/cista/db.toml" - ) + if conffile is None: + init_confdir() config = msgspec.toml.decode(conffile.read_bytes(), type=Config, dec_hook=dec_hook)