mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-10 14:20:49 +08:00
Fix imports
This commit is contained in:
parent
7100603016
commit
c4fe16252b
@ -1,7 +1,7 @@
|
|||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from folder_paths import models_dir, user_directory, output_directory
|
from ....cmd.folder_paths import models_dir, user_directory, output_directory
|
||||||
from api_server.services.file_service import FileService
|
from ...services.file_service import FileService
|
||||||
|
|
||||||
class InternalRoutes:
|
class InternalRoutes:
|
||||||
'''
|
'''
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
from api_server.utils.file_operations import FileSystemOperations, FileSystemItem
|
from ..utils.file_operations import FileSystemOperations, FileSystemItem
|
||||||
|
|
||||||
class FileService:
|
class FileService:
|
||||||
def __init__(self, allowed_directories: Dict[str, str], file_system_ops: Optional[FileSystemOperations] = None):
|
def __init__(self, allowed_directories: Dict[str, str], file_system_ops: Optional[FileSystemOperations] = None):
|
||||||
|
|||||||
0
comfy/api_server/utils/__init__.py
Normal file
0
comfy/api_server/utils/__init__.py
Normal file
@ -1,22 +1,29 @@
|
|||||||
import os
|
import os
|
||||||
from typing import List, Union, TypedDict, Literal
|
from typing import List, Union, TypedDict, Literal
|
||||||
|
|
||||||
from typing_extensions import TypeGuard
|
from typing_extensions import TypeGuard
|
||||||
|
|
||||||
|
|
||||||
class FileInfo(TypedDict):
|
class FileInfo(TypedDict):
|
||||||
name: str
|
name: str
|
||||||
path: str
|
path: str
|
||||||
type: Literal["file"]
|
type: Literal["file"]
|
||||||
size: int
|
size: int
|
||||||
|
|
||||||
|
|
||||||
class DirectoryInfo(TypedDict):
|
class DirectoryInfo(TypedDict):
|
||||||
name: str
|
name: str
|
||||||
path: str
|
path: str
|
||||||
type: Literal["directory"]
|
type: Literal["directory"]
|
||||||
|
|
||||||
|
|
||||||
FileSystemItem = Union[FileInfo, DirectoryInfo]
|
FileSystemItem = Union[FileInfo, DirectoryInfo]
|
||||||
|
|
||||||
|
|
||||||
def is_file_info(item: FileSystemItem) -> TypeGuard[FileInfo]:
|
def is_file_info(item: FileSystemItem) -> TypeGuard[FileInfo]:
|
||||||
return item["type"] == "file"
|
return item["type"] == "file"
|
||||||
|
|
||||||
|
|
||||||
class FileSystemOperations:
|
class FileSystemOperations:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def walk_directory(directory: str) -> List[FileSystemItem]:
|
def walk_directory(directory: str) -> List[FileSystemItem]:
|
||||||
@ -39,4 +46,4 @@ class FileSystemOperations:
|
|||||||
"path": relative_path,
|
"path": relative_path,
|
||||||
"type": "directory"
|
"type": "directory"
|
||||||
})
|
})
|
||||||
return file_list
|
return file_list
|
||||||
|
|||||||
@ -25,7 +25,7 @@ from aiohttp import web
|
|||||||
from can_ada import URL, parse as urlparse # pylint: disable=no-name-in-module
|
from can_ada import URL, parse as urlparse # pylint: disable=no-name-in-module
|
||||||
from typing_extensions import NamedTuple
|
from typing_extensions import NamedTuple
|
||||||
|
|
||||||
from api_server.routes.internal.internal_routes import InternalRoutes
|
from ..api_server.routes.internal.internal_routes import InternalRoutes
|
||||||
from ..model_filemanager import download_model, DownloadModelStatus
|
from ..model_filemanager import download_model, DownloadModelStatus
|
||||||
from .latent_preview_image_encoding import encode_preview_image
|
from .latent_preview_image_encoding import encode_preview_image
|
||||||
from .. import interruption
|
from .. import interruption
|
||||||
|
|||||||
0
tests/unit/server/__init__.py
Normal file
0
tests/unit/server/__init__.py
Normal file
0
tests/unit/server/routes/__init__.py
Normal file
0
tests/unit/server/routes/__init__.py
Normal file
@ -1,9 +1,9 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
from api_server.routes.internal.internal_routes import InternalRoutes
|
from comfy.api_server.routes.internal.internal_routes import InternalRoutes
|
||||||
from api_server.services.file_service import FileService
|
from comfy.api_server.services.file_service import FileService
|
||||||
from folder_paths import models_dir, user_directory, output_directory
|
from comfy.cmd.folder_paths import models_dir, user_directory, output_directory
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|||||||
0
tests/unit/server/services/__init__.py
Normal file
0
tests/unit/server/services/__init__.py
Normal file
@ -1,11 +1,15 @@
|
|||||||
import pytest
|
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
from api_server.services.file_service import FileService
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from comfy.api_server.services.file_service import FileService
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_file_system_ops():
|
def mock_file_system_ops():
|
||||||
return MagicMock()
|
return MagicMock()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def file_service(mock_file_system_ops):
|
def file_service(mock_file_system_ops):
|
||||||
allowed_directories = {
|
allowed_directories = {
|
||||||
@ -15,40 +19,44 @@ def file_service(mock_file_system_ops):
|
|||||||
}
|
}
|
||||||
return FileService(allowed_directories, file_system_ops=mock_file_system_ops)
|
return FileService(allowed_directories, file_system_ops=mock_file_system_ops)
|
||||||
|
|
||||||
|
|
||||||
def test_list_files_valid_directory(file_service, mock_file_system_ops):
|
def test_list_files_valid_directory(file_service, mock_file_system_ops):
|
||||||
mock_file_system_ops.walk_directory.return_value = [
|
mock_file_system_ops.walk_directory.return_value = [
|
||||||
{"name": "file1.txt", "path": "file1.txt", "type": "file", "size": 100},
|
{"name": "file1.txt", "path": "file1.txt", "type": "file", "size": 100},
|
||||||
{"name": "dir1", "path": "dir1", "type": "directory"}
|
{"name": "dir1", "path": "dir1", "type": "directory"}
|
||||||
]
|
]
|
||||||
|
|
||||||
result = file_service.list_files("models")
|
result = file_service.list_files("models")
|
||||||
|
|
||||||
assert len(result) == 2
|
assert len(result) == 2
|
||||||
assert result[0]["name"] == "file1.txt"
|
assert result[0]["name"] == "file1.txt"
|
||||||
assert result[1]["name"] == "dir1"
|
assert result[1]["name"] == "dir1"
|
||||||
mock_file_system_ops.walk_directory.assert_called_once_with("/path/to/models")
|
mock_file_system_ops.walk_directory.assert_called_once_with("/path/to/models")
|
||||||
|
|
||||||
|
|
||||||
def test_list_files_invalid_directory(file_service):
|
def test_list_files_invalid_directory(file_service):
|
||||||
# Does not support walking directories outside of the allowed directories
|
# Does not support walking directories outside of the allowed directories
|
||||||
with pytest.raises(ValueError, match="Invalid directory key"):
|
with pytest.raises(ValueError, match="Invalid directory key"):
|
||||||
file_service.list_files("invalid_key")
|
file_service.list_files("invalid_key")
|
||||||
|
|
||||||
|
|
||||||
def test_list_files_empty_directory(file_service, mock_file_system_ops):
|
def test_list_files_empty_directory(file_service, mock_file_system_ops):
|
||||||
mock_file_system_ops.walk_directory.return_value = []
|
mock_file_system_ops.walk_directory.return_value = []
|
||||||
|
|
||||||
result = file_service.list_files("models")
|
result = file_service.list_files("models")
|
||||||
|
|
||||||
assert len(result) == 0
|
assert len(result) == 0
|
||||||
mock_file_system_ops.walk_directory.assert_called_once_with("/path/to/models")
|
mock_file_system_ops.walk_directory.assert_called_once_with("/path/to/models")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("directory_key", ["models", "user", "output"])
|
@pytest.mark.parametrize("directory_key", ["models", "user", "output"])
|
||||||
def test_list_files_all_allowed_directories(file_service, mock_file_system_ops, directory_key):
|
def test_list_files_all_allowed_directories(file_service, mock_file_system_ops, directory_key):
|
||||||
mock_file_system_ops.walk_directory.return_value = [
|
mock_file_system_ops.walk_directory.return_value = [
|
||||||
{"name": f"file_{directory_key}.txt", "path": f"file_{directory_key}.txt", "type": "file", "size": 100}
|
{"name": f"file_{directory_key}.txt", "path": f"file_{directory_key}.txt", "type": "file", "size": 100}
|
||||||
]
|
]
|
||||||
|
|
||||||
result = file_service.list_files(directory_key)
|
result = file_service.list_files(directory_key)
|
||||||
|
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
assert result[0]["name"] == f"file_{directory_key}.txt"
|
assert result[0]["name"] == f"file_{directory_key}.txt"
|
||||||
mock_file_system_ops.walk_directory.assert_called_once_with(f"/path/to/{directory_key}")
|
mock_file_system_ops.walk_directory.assert_called_once_with(f"/path/to/{directory_key}")
|
||||||
|
|||||||
0
tests/unit/server/utils/__init__.py
Normal file
0
tests/unit/server/utils/__init__.py
Normal file
@ -1,6 +1,6 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from typing import List
|
from typing import List
|
||||||
from api_server.utils.file_operations import FileSystemOperations, FileSystemItem, is_file_info
|
from comfy.api_server.utils.file_operations import FileSystemOperations, FileSystemItem, is_file_info
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def temp_directory(tmp_path):
|
def temp_directory(tmp_path):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user