Skip to content

Commit caf2074

Browse files
authored
add_model_folder_path: ensure unique paths by removing duplicates (comfyanonymous#5998)
* add_model_folder_path: ensure unique paths by removing duplicates Signed-off-by: bigcat88 <[email protected]> * refactored "add_model_folder_path" and added tests --------- Signed-off-by: bigcat88 <[email protected]>
1 parent bdf3937 commit caf2074

File tree

2 files changed

+45
-6
lines changed

2 files changed

+45
-6
lines changed

folder_paths.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,17 @@ def add_model_folder_path(folder_name: str, full_folder_path: str, is_default: b
200200
global folder_names_and_paths
201201
folder_name = map_legacy(folder_name)
202202
if folder_name in folder_names_and_paths:
203-
if is_default:
204-
folder_names_and_paths[folder_name][0].insert(0, full_folder_path)
203+
paths, _exts = folder_names_and_paths[folder_name]
204+
if full_folder_path in paths:
205+
if is_default and paths[0] != full_folder_path:
206+
# If the path to the folder is not the first in the list, move it to the beginning.
207+
paths.remove(full_folder_path)
208+
paths.insert(0, full_folder_path)
205209
else:
206-
folder_names_and_paths[folder_name][0].append(full_folder_path)
210+
if is_default:
211+
paths.insert(0, full_folder_path)
212+
else:
213+
paths.append(full_folder_path)
207214
else:
208215
folder_names_and_paths[folder_name] = ([full_folder_path], set())
209216

tests-unit/comfy_test/folder_path_test.py

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77

88
import folder_paths
99

10+
@pytest.fixture()
11+
def clear_folder_paths():
12+
# Clear the global dictionary before each test to ensure isolation
13+
original = folder_paths.folder_names_and_paths.copy()
14+
folder_paths.folder_names_and_paths.clear()
15+
yield
16+
folder_paths.folder_names_and_paths = original
17+
1018
@pytest.fixture
1119
def temp_dir():
1220
with tempfile.TemporaryDirectory() as tmpdirname:
@@ -30,9 +38,33 @@ def test_get_annotated_filepath():
3038
assert folder_paths.get_annotated_filepath("test.txt", default_dir) == os.path.join(default_dir, "test.txt")
3139
assert folder_paths.get_annotated_filepath("test.txt [output]") == os.path.join(folder_paths.get_output_directory(), "test.txt")
3240

33-
def test_add_model_folder_path():
34-
folder_paths.add_model_folder_path("test_folder", "/test/path")
35-
assert "/test/path" in folder_paths.get_folder_paths("test_folder")
41+
def test_add_model_folder_path_append(clear_folder_paths):
42+
folder_paths.add_model_folder_path("test_folder", "/default/path", is_default=True)
43+
folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False)
44+
assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"]
45+
46+
47+
def test_add_model_folder_path_insert(clear_folder_paths):
48+
folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False)
49+
folder_paths.add_model_folder_path("test_folder", "/default/path", is_default=True)
50+
assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"]
51+
52+
53+
def test_add_model_folder_path_re_add_existing_default(clear_folder_paths):
54+
folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False)
55+
folder_paths.add_model_folder_path("test_folder", "/old_default/path", is_default=True)
56+
assert folder_paths.get_folder_paths("test_folder") == ["/old_default/path", "/test/path"]
57+
folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=True)
58+
assert folder_paths.get_folder_paths("test_folder") == ["/test/path", "/old_default/path"]
59+
60+
61+
def test_add_model_folder_path_re_add_existing_non_default(clear_folder_paths):
62+
folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False)
63+
folder_paths.add_model_folder_path("test_folder", "/default/path", is_default=True)
64+
assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"]
65+
folder_paths.add_model_folder_path("test_folder", "/test/path", is_default=False)
66+
assert folder_paths.get_folder_paths("test_folder") == ["/default/path", "/test/path"]
67+
3668

3769
def test_recursive_search(temp_dir):
3870
os.makedirs(os.path.join(temp_dir, "subdir"))

0 commit comments

Comments
 (0)