SXXXXXXX_ProjectUtility/core/models.py
VALLONGOL 5bfa023bbf Chore: Stop tracking files based on .gitignore update.
Summary:
- Rule "tools/" untracked 8 files.
2025-04-29 12:17:49 +02:00

44 lines
1.7 KiB
Python

# ProjectUtility/core/models.py
import dataclasses
from typing import List, Dict, Any, Optional # Import Optional for non-mandatory fields
@dataclasses.dataclass(
frozen=True
) # frozen=True makes instances immutable after creation
class ToolParameter:
"""Represents a parameter required by a tool."""
name: str # Internal name/key for the parameter (e.g., "input_file")
label: str # User-friendly label for the GUI (e.g., "Input PNG File:")
type: str # Data type hint (e.g., "string", "file", "folder", "integer", "boolean")
required: bool # Is this parameter mandatory?
default: Any = None # Default value (can be None)
description: Optional[str] = None # Optional tooltip or help text
options: Optional[Dict[str, Any]] = (
None # Optional dictionary for specific types (e.g., file extensions {'filter': '*.png'})
)
@dataclasses.dataclass(frozen=True)
class ToolInfo:
"""Holds all configuration information for a single tool."""
id: str # Unique identifier for the tool (e.g., "icon_generator")
display_name: str # Name shown in the GUI list (e.g., "Icon Generator")
description: str # Brief description shown in the GUI
command: List[
str
] # The command and its base arguments to execute (e.g., ["python", "generate_icon.py"])
# Use a list for better handling with subprocess
working_dir: (
str # The directory where the command should be executed (absolute path)
)
parameters: List[ToolParameter] = dataclasses.field(
default_factory=list
) # List of required parameters
version: Optional[str] = None # Optional tool version string
has_gui: bool = False
# Add other fields if needed, e.g., 'icon_path' for a tool-specific icon