From a811336e58f45583493efb179f8dfaeb25c8a208 Mon Sep 17 00:00:00 2001 From: doctorpangloss <@hiddenswitch.com> Date: Sat, 28 Dec 2024 14:46:15 -0800 Subject: [PATCH] remove unneeded test, make these fields optional --- comfy/nodes/base_nodes.py | 31 +++--- tests/unit/utils/extra_config_test.py | 140 -------------------------- 2 files changed, 17 insertions(+), 154 deletions(-) delete mode 100644 tests/unit/utils/extra_config_test.py diff --git a/comfy/nodes/base_nodes.py b/comfy/nodes/base_nodes.py index 693c8e3ed..8f2197035 100644 --- a/comfy/nodes/base_nodes.py +++ b/comfy/nodes/base_nodes.py @@ -1,41 +1,43 @@ from __future__ import annotations -import torch -import os import json -import math -import random import logging +import math +import os +import random +import numpy as np +import safetensors.torch +import torch from PIL import Image, ImageOps, ImageSequence from PIL.PngImagePlugin import PngInfo from huggingface_hub import snapshot_download from natsort import natsorted -import numpy as np -import safetensors.torch +from .. import clip_vision as clip_vision_module +from .. import controlnet from .. import diffusers_load -from .. import samplers +from .. import model_management +from .. import node_helpers from .. import sample +from .. import samplers from .. import sd from .. import utils -from .. import clip_vision as clip_vision_module -from .. import model_management -from ..comfy_types import IO, ComfyNodeABC, InputTypeDict from ..cli_args import args - from ..cmd import folder_paths, latent_preview +from ..comfy_types import IO, ComfyNodeABC, InputTypeDict from ..component_model.deprecation import _deprecate_method from ..component_model.tensor_types import RGBImage, RGBImageBatch, MaskBatch from ..execution_context import current_execution_context from ..images import open_image from ..interruption import interrupt_current_processing from ..ldm.flux.weight_dtypes import FLUX_WEIGHT_DTYPES -from ..model_downloader import get_filename_list_with_downloadable, get_or_download, KNOWN_CHECKPOINTS, KNOWN_CLIP_VISION_MODELS, KNOWN_GLIGEN_MODELS, KNOWN_UNCLIP_CHECKPOINTS, KNOWN_LORAS, KNOWN_CONTROLNETS, KNOWN_DIFF_CONTROLNETS, KNOWN_VAES, KNOWN_APPROX_VAES, get_huggingface_repo_list, KNOWN_CLIP_MODELS, KNOWN_UNET_MODELS +from ..model_downloader import get_filename_list_with_downloadable, get_or_download, KNOWN_CHECKPOINTS, \ + KNOWN_CLIP_VISION_MODELS, KNOWN_GLIGEN_MODELS, KNOWN_UNCLIP_CHECKPOINTS, KNOWN_LORAS, KNOWN_CONTROLNETS, \ + KNOWN_DIFF_CONTROLNETS, KNOWN_VAES, KNOWN_APPROX_VAES, get_huggingface_repo_list, KNOWN_CLIP_MODELS, \ + KNOWN_UNET_MODELS from ..nodes.common import MAX_RESOLUTION -from .. import controlnet from ..open_exr import load_exr -from .. import node_helpers from ..sd import VAE from ..utils import comfy_tqdm @@ -292,6 +294,7 @@ class VAEDecodeTiled: return {"required": {"samples": ("LATENT", ), "vae": ("VAE", ), "tile_size": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 32}), "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32}), + }, "optional": { "temporal_size": ("INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to decode at a time."}), "temporal_overlap": ("INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap."}), }} diff --git a/tests/unit/utils/extra_config_test.py b/tests/unit/utils/extra_config_test.py deleted file mode 100644 index 8c4ec0429..000000000 --- a/tests/unit/utils/extra_config_test.py +++ /dev/null @@ -1,140 +0,0 @@ -import os -from unittest.mock import Mock, patch, mock_open - -import pytest -import yaml - -from comfy.cmd import folder_paths -from comfy.extra_config import load_extra_path_config - - -@pytest.fixture -def mock_yaml_content(): - return { - 'test_config': { - 'base_path': '~/App/', - 'checkpoints': 'subfolder1', - } - } - - -@pytest.fixture -def mock_expanded_home(): - return '/home/user' - - -@pytest.fixture -def yaml_config_with_appdata(): - return """ - test_config: - base_path: '%APPDATA%/ComfyUI' - checkpoints: 'models/checkpoints' - """ - - -@pytest.fixture -def mock_yaml_content_appdata(yaml_config_with_appdata): - return yaml.safe_load(yaml_config_with_appdata) - - -@pytest.fixture -def mock_expandvars_appdata(): - mock = Mock() - mock.side_effect = lambda path: path.replace('%APPDATA%', 'C:/Users/TestUser/AppData/Roaming') - return mock - - -@pytest.fixture -def mock_add_model_folder_path(): - return Mock() - - -@pytest.fixture -def mock_expanduser(mock_expanded_home): - def _expanduser(path): - if path.startswith('~/'): - return os.path.join(mock_expanded_home, path[2:]) - return path - - return _expanduser - - -@pytest.fixture -def mock_yaml_safe_load(mock_yaml_content): - return Mock(return_value=mock_yaml_content) - - -@pytest.mark.skip("poorly authored") -@patch('builtins.open', new_callable=mock_open, read_data="dummy file content") -def test_load_extra_model_paths_expands_userpath( - mock_file, - monkeypatch, - mock_add_model_folder_path, - mock_expanduser, - mock_yaml_safe_load, - mock_expanded_home -): - # Attach mocks used by load_extra_path_config - monkeypatch.setattr(folder_paths, 'add_model_folder_path', mock_add_model_folder_path) - monkeypatch.setattr(os.path, 'expanduser', mock_expanduser) - monkeypatch.setattr(yaml, 'safe_load', mock_yaml_safe_load) - - dummy_yaml_file_name = 'dummy_path.yaml' - load_extra_path_config(dummy_yaml_file_name) - - expected_calls = [ - ('checkpoints', os.path.join(mock_expanded_home, 'App', 'subfolder1'), False), - ] - - assert mock_add_model_folder_path.call_count == len(expected_calls) - - # Check if add_model_folder_path was called with the correct arguments - for actual_call, expected_call in zip(mock_add_model_folder_path.call_args_list, expected_calls): - assert actual_call.args[0] == expected_call[0] - assert os.path.normpath(actual_call.args[1]) == os.path.normpath(expected_call[1]) # Normalize and check the path to check on multiple OS. - assert actual_call.args[2] == expected_call[2] - - # Check if yaml.safe_load was called - mock_yaml_safe_load.assert_called_once() - - # Check if open was called with the correct file path - mock_file.assert_called_once_with(dummy_yaml_file_name, 'r') - - -@pytest.mark.skip("poorly authored") -@patch('builtins.open', new_callable=mock_open) -def test_load_extra_model_paths_expands_appdata( - mock_file, - monkeypatch, - mock_add_model_folder_path, - mock_expandvars_appdata, - yaml_config_with_appdata, - mock_yaml_content_appdata -): - # Set the mock_file to return yaml with appdata as a variable - mock_file.return_value.read.return_value = yaml_config_with_appdata - - # Attach mocks - monkeypatch.setattr(folder_paths, 'add_model_folder_path', mock_add_model_folder_path) - monkeypatch.setattr(os.path, 'expandvars', mock_expandvars_appdata) - monkeypatch.setattr(yaml, 'safe_load', Mock(return_value=mock_yaml_content_appdata)) - - # Mock expanduser to do nothing (since we're not testing it here) - monkeypatch.setattr(os.path, 'expanduser', lambda x: x) - - dummy_yaml_file_name = 'dummy_path.yaml' - load_extra_path_config(dummy_yaml_file_name) - - expected_base_path = 'C:/Users/TestUser/AppData/Roaming/ComfyUI' - expected_calls = [ - ('checkpoints', os.path.join(expected_base_path, 'models/checkpoints'), False), - ] - - assert mock_add_model_folder_path.call_count == len(expected_calls) - - # Check the base path variable was expanded - for actual_call, expected_call in zip(mock_add_model_folder_path.call_args_list, expected_calls): - assert actual_call.args == expected_call - - # Verify that expandvars was called - assert mock_expandvars_appdata.called