Files
dseditor-ComfyUI-ScheduledTask/web_handler.py
T
2025-06-18 23:59:03 +08:00

150 lines
6.4 KiB
Python

from aiohttp import web
import json
import logging
logger = logging.getLogger(__name__)
def setup_routes():
"""Setup simplified web routes"""
try:
import server
from . import get_scheduler
@server.PromptServer.instance.routes.get("/scheduledtask/get_workflows")
async def get_workflows(request):
"""Get workflow list"""
try:
scheduler = get_scheduler()
workflows = scheduler.get_workflows()
return web.json_response({'workflows': workflows})
except Exception as e:
logger.error(f"Failed to get workflow list: {e}")
return web.json_response({'error': str(e)}, status=500)
@server.PromptServer.instance.routes.get("/scheduledtask/get_schedules")
async def get_schedules(request):
"""Get schedule settings"""
try:
scheduler = get_scheduler()
config = scheduler.load_config()
return web.json_response({
'schedules': config.get('schedules', []),
'globalEnabled': config.get('globalEnabled', False)
})
except Exception as e:
logger.error(f"Failed to get schedule settings: {e}")
return web.json_response({'error': str(e)}, status=500)
@server.PromptServer.instance.routes.post("/scheduledtask/save_schedules")
async def save_schedules(request):
"""Save schedule settings"""
try:
data = await request.json()
schedules = data.get('schedules', [])
global_enabled = data.get('globalEnabled', False)
scheduler = get_scheduler()
success = scheduler.save_schedules(schedules, global_enabled)
if success:
return web.json_response({
'status': 'success',
'message': f"Saved {len(schedules)} schedule settings, Global status: {'Enabled' if global_enabled else 'Disabled'}"
})
else:
return web.json_response({'error': 'Save failed'}, status=500)
except Exception as e:
logger.error(f"Failed to save schedule settings: {e}")
return web.json_response({'error': str(e)}, status=500)
@server.PromptServer.instance.routes.get("/scheduledtask/status")
async def get_status(request):
"""Get service status"""
try:
scheduler = get_scheduler()
status = scheduler.get_status()
return web.json_response(status)
except Exception as e:
logger.error(f"Failed to get status: {e}")
return web.json_response({'error': str(e)}, status=500)
@server.PromptServer.instance.routes.post("/scheduledtask/toggle_global")
async def toggle_global(request):
"""Toggle global switch"""
try:
data = await request.json()
enabled = data.get('enabled', False)
scheduler = get_scheduler()
schedules = scheduler.load_schedules()
success = scheduler.save_schedules(schedules, enabled)
if success:
return web.json_response({
'status': 'success',
'globalEnabled': enabled,
'message': f"Scheduler system {'enabled' if enabled else 'disabled'}"
})
else:
return web.json_response({'error': 'Toggle failed'}, status=500)
except Exception as e:
logger.error(f"Failed to toggle global switch: {e}")
return web.json_response({'error': str(e)}, status=500)
@server.PromptServer.instance.routes.post("/scheduledtask/save_workflow")
async def save_workflow(request):
"""Save workflow as task file"""
try:
data = await request.json()
workflow_name = data.get('name', '').strip()
workflow_data = data.get('workflow', {})
if not workflow_name:
return web.json_response({'error': 'Workflow name cannot be empty'}, status=400)
if not workflow_data:
return web.json_response({'error': 'Workflow data cannot be empty'}, status=400)
# Ensure safe filename
import re
safe_name = re.sub(r'[<>:"/\\|?*]', '_', workflow_name)
if not safe_name.endswith('.json'):
safe_name += '.json'
scheduler = get_scheduler()
workflow_dir = scheduler.workflow_dir
# Ensure folder exists
import os
os.makedirs(workflow_dir, exist_ok=True)
# Save file
filepath = os.path.join(workflow_dir, safe_name)
# Check if file already exists
if os.path.exists(filepath):
return web.json_response({
'error': f'File {safe_name} already exists, please use a different name'
}, status=400)
with open(filepath, 'w', encoding='utf-8') as f:
json.dump(workflow_data, f, ensure_ascii=False, indent=2)
logger.info(f"Successfully saved workflow: {safe_name}")
return web.json_response({
'status': 'success',
'message': f'Workflow saved as {safe_name}',
'filename': safe_name
})
except Exception as e:
logger.error(f"Failed to save workflow: {e}")
return web.json_response({'error': str(e)}, status=500)
logger.info("✅ Web routes setup completed")
except ImportError:
logger.warning("⚠️ ComfyUI server module not loaded yet, will retry later")
except Exception as e:
logger.error(f"❌ Failed to setup web routes: {e}")