fix: atomic ModelMapper build and isolate test NODE_CLASS_MAPPINGS mutations

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-09 18:03:16 +02:00
parent 9891b3ec41
commit 38e95c150a
2 changed files with 14 additions and 10 deletions
+10 -6
View File
@@ -92,7 +92,7 @@ class ModelMapper:
try:
import folder_paths
self._folder_files = {}
folder_files = {}
for folder_type in folder_paths.folder_names_and_paths:
if folder_type in EXCLUDED_FOLDER_TYPES:
continue
@@ -101,13 +101,17 @@ class ModelMapper:
except Exception:
files = []
if files:
self._folder_files[folder_type] = frozenset(files)
folder_files[folder_type] = frozenset(files)
# Reverse map: filename -> folder_type (last write wins on collision)
self._reverse = {}
for folder_type, files in self._folder_files.items():
# Build reverse map: filename -> folder_type (last write wins on collision)
reverse = {}
for folder_type, files in folder_files.items():
for f in files:
self._reverse[f] = folder_type
reverse[f] = folder_type
# Assign atomically only on success
self._folder_files = folder_files
self._reverse = reverse
except Exception:
logger.warning("ModelMapper: failed to build model map", exc_info=True)
+4 -4
View File
@@ -53,7 +53,7 @@ def test_unknown_filename_returns_none():
assert m.get_model_type("nonexistent.ckpt") is None
def test_extract_models_from_prompt():
def test_extract_models_from_prompt(monkeypatch):
m = _make_mapper()
fake_node_cls = MagicMock()
@@ -72,13 +72,13 @@ def test_extract_models_from_prompt():
}
import nodes as comfy_nodes
comfy_nodes.NODE_CLASS_MAPPINGS = {"CheckpointLoaderSimple": fake_node_cls}
monkeypatch.setattr(comfy_nodes, "NODE_CLASS_MAPPINGS", {"CheckpointLoaderSimple": fake_node_cls})
results = m.extract_models_from_prompt(fake_prompt)
assert ("dream.safetensors", "checkpoints") in results
def test_extract_models_skips_non_list_inputs():
def test_extract_models_skips_non_list_inputs(monkeypatch):
m = _make_mapper()
fake_node_cls = MagicMock()
@@ -90,7 +90,7 @@ def test_extract_models_skips_non_list_inputs():
fake_prompt = {"1": {"class_type": "CLIPTextEncode", "inputs": {"text": "hello"}}}
import nodes as comfy_nodes
comfy_nodes.NODE_CLASS_MAPPINGS = {"CLIPTextEncode": fake_node_cls}
monkeypatch.setattr(comfy_nodes, "NODE_CLASS_MAPPINGS", {"CLIPTextEncode": fake_node_cls})
results = m.extract_models_from_prompt(fake_prompt)
assert results == []