feat: profiles routes + register PoolProfile
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# gates/profiles_routes.py
|
||||
import os
|
||||
import tempfile
|
||||
import uuid
|
||||
|
||||
from aiohttp import web
|
||||
from server import PromptServer
|
||||
|
||||
from . import profiles
|
||||
from .gates_compat import grid_pool_base
|
||||
|
||||
routes = PromptServer.instance.routes
|
||||
|
||||
|
||||
def _base():
|
||||
return grid_pool_base()
|
||||
|
||||
|
||||
@routes.get("/grid_pool/profiles/list")
|
||||
async def _list(request):
|
||||
return web.json_response(profiles.read_registry(_base()))
|
||||
|
||||
|
||||
@routes.post("/grid_pool/profiles/create")
|
||||
async def _create(request):
|
||||
body = await request.json()
|
||||
e = profiles.create_profile(_base(), body["name"], uuid.uuid4().hex)
|
||||
return web.json_response(e)
|
||||
|
||||
|
||||
@routes.post("/grid_pool/profiles/rename")
|
||||
async def _rename(request):
|
||||
body = await request.json()
|
||||
return web.json_response(profiles.rename_profile(_base(), body["id"], body["name"]))
|
||||
|
||||
|
||||
@routes.post("/grid_pool/profiles/delete")
|
||||
async def _delete(request):
|
||||
body = await request.json()
|
||||
return web.json_response(profiles.delete_profile(_base(), body["id"]))
|
||||
|
||||
|
||||
@routes.post("/grid_pool/profiles/duplicate")
|
||||
async def _duplicate(request):
|
||||
body = await request.json()
|
||||
e = profiles.duplicate_profile(_base(), body["id"], body["name"], uuid.uuid4().hex)
|
||||
return web.json_response(e)
|
||||
|
||||
|
||||
@routes.get("/grid_pool/profiles/export")
|
||||
async def _export(request):
|
||||
pid = request.query["id"]
|
||||
reg = profiles.read_registry(_base())
|
||||
entry = profiles.find_by_id(reg, pid)
|
||||
fname = (entry["name"] if entry else pid) + ".zip"
|
||||
tmp = os.path.join(tempfile.gettempdir(), f"profile_{pid}.zip")
|
||||
profiles.export_profile(_base(), pid, tmp)
|
||||
return web.FileResponse(tmp, headers={"Content-Disposition": f'attachment; filename="{fname}"'})
|
||||
|
||||
|
||||
@routes.post("/grid_pool/profiles/import")
|
||||
async def _import(request):
|
||||
reader = await request.multipart()
|
||||
tmp = os.path.join(tempfile.gettempdir(), f"import_{uuid.uuid4().hex}.zip")
|
||||
async for part in reader:
|
||||
if part.name == "file":
|
||||
with open(tmp, "wb") as f:
|
||||
while True:
|
||||
chunk = await part.read_chunk()
|
||||
if not chunk:
|
||||
break
|
||||
f.write(chunk)
|
||||
e = profiles.import_profile(_base(), tmp, uuid.uuid4().hex)
|
||||
return web.json_response(e)
|
||||
Reference in New Issue
Block a user