Full source for the-third-rev: Discord bot (discord.py), FastAPI web UI (React/TS/Vite/Tailwind), ComfyUI integration, generation history DB, preset manager, workflow inspector, and all supporting modules. Excluded from tracking: .env, invite_tokens.json, *.db (SQLite), current-workflow-changes.json, user_settings/, presets/, logs/, web-static/ (build output), frontend/node_modules/. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""GET/PUT /api/state; DELETE /api/state/{key}"""
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Dict
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
|
from web.auth import require_auth
|
|
from web.deps import get_config, get_user_registry
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
def _get_user_sm(user: dict):
|
|
"""Return the per-user WorkflowStateManager, raising 503 if unavailable."""
|
|
registry = get_user_registry()
|
|
if registry is None:
|
|
raise HTTPException(503, "State manager not available")
|
|
return registry.get_state_manager(user["sub"])
|
|
|
|
|
|
@router.get("/state")
|
|
async def get_state(user: dict = Depends(require_auth)):
|
|
"""Return all current overrides for the authenticated user."""
|
|
sm = _get_user_sm(user)
|
|
return sm.get_overrides()
|
|
|
|
|
|
@router.put("/state")
|
|
async def put_state(body: Dict[str, Any], user: dict = Depends(require_auth)):
|
|
"""Merge override values. Pass ``null`` as a value to delete a key."""
|
|
sm = _get_user_sm(user)
|
|
for key, value in body.items():
|
|
if value is None:
|
|
sm.delete_override(key)
|
|
else:
|
|
sm.set_override(key, value)
|
|
return sm.get_overrides()
|
|
|
|
|
|
@router.delete("/state/{key}")
|
|
async def delete_state_key(key: str, user: dict = Depends(require_auth)):
|
|
"""Remove a single override key, and clean up any associated slot file."""
|
|
sm = _get_user_sm(user)
|
|
sm.delete_override(key)
|
|
|
|
config = get_config()
|
|
if config:
|
|
from input_image_db import deactivate_image_slot
|
|
user_label: str = user["sub"]
|
|
deactivate_image_slot(f"{user_label}_{key}", config.comfy_input_path)
|
|
|
|
return {"ok": True, "key": key}
|