From 6abcdf55164148babf8cc15f56502b6c889f6235 Mon Sep 17 00:00:00 2001 From: Vito Sansevero Date: Sat, 17 Oct 2026 15:54:01 -0700 Subject: [PATCH] fix(database): honor package-scoped configuration (#211) --- database/operations.py | 5 ++++- tests/test_db_path_config.py | 32 ++++++++++++++++++++++++++++++++ tests/test_init_package.py | 9 ++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/database/operations.py b/database/operations.py index c8d34d8..f927196 100644 --- a/database/operations.py +++ b/database/operations.py @@ -87,7 +87,10 @@ def _resolve_db_path(db_path: Optional[str] = None) -> str: if db_path is None: try: - from py.config import PromptManagerConfig + try: + from ..py.config import PromptManagerConfig + except ImportError: + from py.config import PromptManagerConfig db_path = PromptManagerConfig.DEFAULT_DB_PATH except Exception: diff --git a/tests/test_db_path_config.py b/tests/test_db_path_config.py index 36f49e2..500cc5d 100644 --- a/tests/test_db_path_config.py +++ b/tests/test_db_path_config.py @@ -14,6 +14,7 @@ from unittest.mock import patch sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import database.operations as operations from database.operations import _resolve_db_path EXTENSION_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -22,6 +23,37 @@ EXTENSION_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) class TestResolveDbPath(unittest.TestCase): """Test _resolve_db_path() database path resolution.""" + def test_package_qualified_config_precedes_unrelated_standalone_config( + self, + ) -> None: + """A custom-node package must use its own configured disposable database.""" + with tempfile.TemporaryDirectory() as directory: + configured = os.path.join(directory, "owned", "prompts.db") + package_config = types.ModuleType("owned_promptmanager.py.config") + package_config.PromptManagerConfig = types.SimpleNamespace( + DEFAULT_DB_PATH=configured + ) + standalone_config = types.ModuleType("py.config") + standalone_config.PromptManagerConfig = types.SimpleNamespace( + DEFAULT_DB_PATH=os.path.join(directory, "unrelated.db") + ) + with ( + patch.dict( + operations.__dict__, + {"__package__": "owned_promptmanager.database", "__spec__": None}, + ), + patch.dict( + sys.modules, + { + "owned_promptmanager.py.config": package_config, + "py.config": standalone_config, + }, + ), + ): + resolved = _resolve_db_path(None) + self.assertEqual(resolved, configured) + self.assertTrue(os.path.isdir(os.path.dirname(configured))) + def test_explicit_absolute_path_used_as_is(self): """An explicit absolute path should be returned unchanged.""" with tempfile.TemporaryDirectory() as tmpdir: diff --git a/tests/test_init_package.py b/tests/test_init_package.py index 39fc9bf..5029865 100644 --- a/tests/test_init_package.py +++ b/tests/test_init_package.py @@ -5,6 +5,7 @@ imports) with ComfyUI's ``server`` and ``folder_paths`` modules stubbed. """ import importlib.util +import json import os import sys import tempfile @@ -65,7 +66,13 @@ def load_package(name, db_path, output_dir, server=None): try: from py.config import PromptManagerConfig - with mock.patch.object(PromptManagerConfig, "DEFAULT_DB_PATH", db_path): + config_path = os.path.join(output_dir, "promptmanager-test-config.json") + with open(config_path, "w", encoding="utf-8") as config: + json.dump({"database": {"default_path": db_path}}, config) + with ( + mock.patch.object(PromptManagerConfig, "DEFAULT_DB_PATH", db_path), + mock.patch.dict(os.environ, {"PROMPT_MANAGER_CONFIG_PATH": config_path}), + ): spec = importlib.util.spec_from_file_location( name, os.path.join(ROOT, "__init__.py"),