- Create shared/filename_utils.py for date/time/dimension filename building - Create shared/path_utils.py for output directory handling - Create shared/discord/message_builder.py for Discord message construction - Create shared/discord/cdn_extractor.py for CDN URL extraction - Refactor image_node.py to use shared utilities (-161 lines, 16.3%) - Refactor video_node.py to use shared utilities (-361 lines, 23.1%) - Fix setup_logging missing from logging_config.py - Fix test imports to use new module paths (nodes.* instead of discord_*_node) - Total reduction: 522 lines (20.5%), exceeding PRD target of ~200 lines Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
"""
|
|
Path utilities for ComfyUI-DiscordSend
|
|
|
|
Provides functions for handling output directories and file paths.
|
|
"""
|
|
|
|
import os
|
|
from typing import Optional
|
|
|
|
|
|
def get_output_directory(
|
|
save_output: bool,
|
|
comfy_output_dir: str,
|
|
temp_dir: str,
|
|
subfolder: str = "discord_output"
|
|
) -> str:
|
|
"""
|
|
Determine the appropriate output directory based on save settings.
|
|
|
|
Args:
|
|
save_output: Whether files should be saved permanently
|
|
comfy_output_dir: ComfyUI's output directory path
|
|
temp_dir: ComfyUI's temporary directory path
|
|
subfolder: Subfolder name within output directory (default: "discord_output")
|
|
|
|
Returns:
|
|
Path to the destination directory
|
|
"""
|
|
if save_output:
|
|
# Create output subfolder in the ComfyUI output directory
|
|
dest_folder = os.path.join(comfy_output_dir, subfolder)
|
|
os.makedirs(dest_folder, exist_ok=True)
|
|
else:
|
|
# Use ComfyUI's temporary directory for preview-only files
|
|
dest_folder = temp_dir
|
|
os.makedirs(dest_folder, exist_ok=True)
|
|
print(f"Using temporary directory for preview: {dest_folder}")
|
|
|
|
return dest_folder
|
|
|
|
|
|
def ensure_directory_exists(path: str) -> str:
|
|
"""
|
|
Ensure a directory exists, creating it if necessary.
|
|
|
|
Args:
|
|
path: Directory path to ensure exists
|
|
|
|
Returns:
|
|
The same path (for chaining)
|
|
"""
|
|
os.makedirs(path, exist_ok=True)
|
|
return path
|
|
|
|
|
|
def get_unique_filepath(
|
|
directory: str,
|
|
filename: str,
|
|
extension: str,
|
|
counter: Optional[int] = None
|
|
) -> str:
|
|
"""
|
|
Generate a unique filepath, optionally with a counter.
|
|
|
|
Args:
|
|
directory: Base directory
|
|
filename: Base filename (without extension)
|
|
extension: File extension (with or without leading dot)
|
|
counter: Optional counter to append to filename
|
|
|
|
Returns:
|
|
Full filepath
|
|
"""
|
|
# Ensure extension has leading dot
|
|
if not extension.startswith("."):
|
|
extension = "." + extension
|
|
|
|
if counter is not None:
|
|
full_filename = f"{filename}_{counter:05d}{extension}"
|
|
else:
|
|
full_filename = f"{filename}{extension}"
|
|
|
|
return os.path.join(directory, full_filename)
|