150 lines
6.4 KiB
Python
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}") |