From 4385035b05d49c095010b4337338ec5180b030ad Mon Sep 17 00:00:00 2001 From: Andy Date: Sun, 20 Jul 2025 16:49:44 +0000 Subject: [PATCH] =?UTF-8?q?fix(cfg):=20=F0=9F=90=9B=20Update=20services=20?= =?UTF-8?q?directory=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated the `services` directory assignment to ensure it is always treated as a list, improving consistency in configuration handling. Allows to provide multiple different service folders. --- unshackle/commands/cfg.py | 2 +- unshackle/core/config.py | 7 +++++-- unshackle/core/services.py | 9 ++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/unshackle/commands/cfg.py b/unshackle/commands/cfg.py index cb436ea..15c4f77 100644 --- a/unshackle/commands/cfg.py +++ b/unshackle/commands/cfg.py @@ -65,7 +65,7 @@ def cfg(ctx: click.Context, key: str, value: str, unset: bool, list_: bool) -> N if not is_write and not is_delete: data = data.mlget(key_items, default=KeyError) - if data == KeyError: + if data is KeyError: raise click.ClickException(f"Key '{key}' does not exist in the config.") yaml.dump(data, sys.stdout) else: diff --git a/unshackle/core/config.py b/unshackle/core/config.py index ec5e43c..1fbb875 100644 --- a/unshackle/core/config.py +++ b/unshackle/core/config.py @@ -14,7 +14,7 @@ class Config: core_dir = Path(__file__).resolve().parent namespace_dir = core_dir.parent commands = namespace_dir / "commands" - services = namespace_dir / "services" + services = [namespace_dir / "services"] vaults = namespace_dir / "vaults" fonts = namespace_dir / "fonts" user_configs = core_dir.parent @@ -51,7 +51,10 @@ class Config: if name.lower() in ("app_dirs", "core_dir", "namespace_dir", "user_configs", "data"): # these must not be modified by the user continue - setattr(self.directories, name, Path(path).expanduser()) + if name == "services" and isinstance(path, list): + setattr(self.directories, name, [Path(p).expanduser() for p in path]) + else: + setattr(self.directories, name, Path(path).expanduser()) downloader_cfg = kwargs.get("downloader") or "requests" if isinstance(downloader_cfg, dict): diff --git a/unshackle/core/services.py b/unshackle/core/services.py index d903f54..0ba317f 100644 --- a/unshackle/core/services.py +++ b/unshackle/core/services.py @@ -6,7 +6,14 @@ from unshackle.core.config import config from unshackle.core.service import Service from unshackle.core.utilities import import_module_by_path -_SERVICES = sorted((path for path in config.directories.services.glob("*/__init__.py")), key=lambda x: x.parent.stem) +_service_dirs = config.directories.services +if not isinstance(_service_dirs, list): + _service_dirs = [_service_dirs] + +_SERVICES = sorted( + (path for service_dir in _service_dirs for path in service_dir.glob("*/__init__.py")), + key=lambda x: x.parent.stem, +) _MODULES = {path.parent.stem: getattr(import_module_by_path(path), path.parent.stem) for path in _SERVICES}