- db.py: ProjectDB class with SQLite schema (projects, data_files, sequences, history_trees), WAL mode, CRUD, import, and query helpers - api_routes.py: REST API endpoints on NiceGUI/FastAPI for ComfyUI to query project data over the network - project_loader.py: ComfyUI nodes (ProjectLoaderDynamic, Standard, VACE, LoRA) that fetch data from NiceGUI REST API via HTTP - web/project_dynamic.js: Frontend JS for dynamic project loader node - tab_projects_ng.py: Projects management tab in NiceGUI UI - state.py: Added db, current_project, db_enabled fields - main.py: DB init, API route registration, projects tab - utils.py: sync_to_db() dual-write helper - tab_batch_ng.py, tab_raw_ng.py, tab_timeline_ng.py: dual-write sync calls after save_json when project DB is enabled - __init__.py: Merged project node class mappings - tests/test_db.py: 30 tests for database layer - tests/test_project_loader.py: 17 tests for ComfyUI connector nodes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
from typing import Any, Callable
|
|
|
|
|
|
@dataclass
|
|
class AppState:
|
|
config: dict
|
|
current_dir: Path
|
|
loaded_file: str | None = None
|
|
last_mtime: float = 0
|
|
data_cache: dict = field(default_factory=dict)
|
|
snippets: dict = field(default_factory=dict)
|
|
file_path: Path | None = None
|
|
restored_indicator: str | None = None
|
|
timeline_selected_nodes: set = field(default_factory=set)
|
|
live_toggles: dict = field(default_factory=dict)
|
|
show_comfy_monitor: bool = True
|
|
|
|
# Project DB fields
|
|
db: Any = None
|
|
current_project: str = ""
|
|
db_enabled: bool = False
|
|
|
|
# Set at runtime by main.py / tab_comfy_ng.py
|
|
_render_main: Any = None
|
|
_load_file: Callable | None = None
|
|
_main_rendered: bool = False
|
|
_live_checkboxes: dict = field(default_factory=dict)
|
|
_live_refreshables: dict = field(default_factory=dict)
|
|
|
|
def create_secondary(self) -> 'AppState':
|
|
return AppState(
|
|
config=self.config,
|
|
current_dir=self.current_dir,
|
|
snippets=self.snippets,
|
|
)
|