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:
@@ -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)
|
||||
|
||||
@@ -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 == []
|
||||
|
||||
Reference in New Issue
Block a user