29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
"""Dateien hochladen und löschen (→ Konzept 7.7)."""
|
|
|
|
from fastapi import APIRouter, Request, UploadFile
|
|
from fastapi.concurrency import run_in_threadpool
|
|
from fastapi.responses import Response
|
|
|
|
from app import web
|
|
from app.uploads import service as uploads
|
|
|
|
|
|
def router() -> APIRouter:
|
|
r = APIRouter()
|
|
|
|
@r.post("/workspaces/{workspace_id}/uploads")
|
|
async def upload(request: Request, principal: web.Checked, workspace_id: int, file: UploadFile) -> Response:
|
|
def work() -> None:
|
|
with web.db(request).session() as session:
|
|
uploads.save(session, principal, web.settings(request), workspace_id, file.filename or "",
|
|
file.file)
|
|
await run_in_threadpool(work)
|
|
return web.redirect(f"/workspaces/{workspace_id}/data#uploads")
|
|
|
|
@r.post("/uploads/{upload_id}/delete")
|
|
def delete(request: Request, principal: web.Checked, upload_id: int) -> Response:
|
|
with web.db(request).session() as session:
|
|
workspace_id = uploads.delete(session, principal, web.settings(request), upload_id)
|
|
return web.redirect(f"/workspaces/{workspace_id}/data#uploads")
|
|
|
|
return r
|