Upload files to "frontend/routes"
This commit is contained in:
parent
d009e0da62
commit
57ee7f3419
5 changed files with 153 additions and 0 deletions
BIN
frontend/routes/__init__.py
Normal file
BIN
frontend/routes/__init__.py
Normal file
Binary file not shown.
58
frontend/routes/admin.py
Normal file
58
frontend/routes/admin.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
import api_client
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
def _render(request: Request, template: str, **kwargs) -> HTMLResponse:
|
||||
"""Render using JinjaX catalog for all .jinja templates"""
|
||||
catalog = request.app.state.catalog
|
||||
html_content = catalog.render(template, **kwargs)
|
||||
return HTMLResponse(content=html_content)
|
||||
|
||||
|
||||
@router.get("/admin/list", response_class=HTMLResponse)
|
||||
async def admin_list(request: Request):
|
||||
try:
|
||||
pointclouds = await api_client.list_pointclouds()
|
||||
return _render(
|
||||
request, "partials/cloud_list",
|
||||
pointclouds=pointclouds, error=None,
|
||||
)
|
||||
except Exception as e:
|
||||
return _render(
|
||||
request, "partials/cloud_list",
|
||||
pointclouds=[], error=str(e),
|
||||
)
|
||||
|
||||
|
||||
@router.get("/admin/debug/{pc_id}", response_class=HTMLResponse)
|
||||
async def admin_debug(request: Request, pc_id: str):
|
||||
try:
|
||||
data = await api_client.get_debug(pc_id)
|
||||
return _render(
|
||||
request, "partials/debug_panel",
|
||||
pc_id=pc_id, data=data, error=None,
|
||||
)
|
||||
except Exception as e:
|
||||
return _render(
|
||||
request, "partials/debug_panel",
|
||||
pc_id=pc_id, data=None, error=str(e),
|
||||
)
|
||||
|
||||
|
||||
@router.delete("/admin/delete/{pc_id}", response_class=HTMLResponse)
|
||||
async def admin_delete(request: Request, pc_id: str):
|
||||
try:
|
||||
await api_client.delete_pointcloud(pc_id)
|
||||
pointclouds = await api_client.list_pointclouds()
|
||||
return _render(
|
||||
request, "partials/cloud_list",
|
||||
pointclouds=pointclouds, error=None,
|
||||
)
|
||||
except Exception as e:
|
||||
return _render(
|
||||
request, "partials/cloud_list",
|
||||
pointclouds=[], error=str(e),
|
||||
)
|
||||
19
frontend/routes/crop.py
Normal file
19
frontend/routes/crop.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import JSONResponse
|
||||
from pydantic import BaseModel
|
||||
import api_client
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class CropPayload(BaseModel):
|
||||
matrix: list[float]
|
||||
scale: list[float]
|
||||
subset_name: str = ""
|
||||
|
||||
|
||||
@router.post("/crop/{pc_id}")
|
||||
async def crop(pc_id: str, payload: CropPayload):
|
||||
"""Proxifie la requête de clipping vers le backend FastAPI."""
|
||||
result = await api_client.crop_pointcloud(pc_id, payload.model_dump())
|
||||
return JSONResponse(result)
|
||||
54
frontend/routes/upload.py
Normal file
54
frontend/routes/upload.py
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# routes/upload.py
|
||||
|
||||
from fastapi import APIRouter, Request, UploadFile, File, HTTPException
|
||||
from fastapi.responses import HTMLResponse
|
||||
from pathlib import Path
|
||||
import api_client
|
||||
import config
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
def _render(request: Request, template: str, **kwargs) -> HTMLResponse:
|
||||
"""Render using JinjaX catalog for all .jinja templates"""
|
||||
catalog = request.app.state.catalog
|
||||
html_content = catalog.render(template, **kwargs)
|
||||
return HTMLResponse(content=html_content)
|
||||
|
||||
|
||||
@router.get("/", response_class=HTMLResponse)
|
||||
async def index(request: Request):
|
||||
return _render(request, "index")
|
||||
|
||||
|
||||
@router.get("/health-check", response_class=HTMLResponse)
|
||||
async def health_check(request: Request):
|
||||
try:
|
||||
data = await api_client.check_health()
|
||||
return _render(
|
||||
request,
|
||||
"partials/health_status",
|
||||
ok=True,
|
||||
entwine_available=data.get("entwine_available", False),
|
||||
disk_free_gb=data.get("disk_free_gb", "?"),
|
||||
)
|
||||
except Exception as e:
|
||||
return _render(request, "partials/health_status", ok=False, error=str(e))
|
||||
|
||||
|
||||
@router.post("/upload", response_class=HTMLResponse)
|
||||
async def upload(request: Request, file: UploadFile = File(...)):
|
||||
suffix = Path(file.filename).suffix.lower()
|
||||
if suffix not in config.SUPPORTED_EXTENSIONS:
|
||||
return _render(
|
||||
request,
|
||||
"partials/upload_result",
|
||||
error=f"Format non supporté : {suffix}. "
|
||||
f"Formats acceptés : {', '.join(config.SUPPORTED_EXTENSIONS)}",
|
||||
result=None,
|
||||
)
|
||||
try:
|
||||
data = await api_client.upload_file(file.filename, await file.read())
|
||||
return _render(request, "partials/upload_result", result=data, error=None)
|
||||
except Exception as e:
|
||||
return _render(request, "partials/upload_result", error=str(e), result=None)
|
||||
22
frontend/routes/viewer.py
Normal file
22
frontend/routes/viewer.py
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
import config
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
def _render(request: Request, template: str, **kwargs) -> HTMLResponse:
|
||||
"""Render using JinjaX catalog for all .jinja templates"""
|
||||
catalog = request.app.state.catalog
|
||||
html_content = catalog.render(template, **kwargs)
|
||||
return HTMLResponse(content=html_content)
|
||||
|
||||
|
||||
@router.get("/viewer/{pc_id}", response_class=HTMLResponse)
|
||||
async def viewer(request: Request, pc_id: str):
|
||||
return _render(
|
||||
request,
|
||||
"partials/viewer",
|
||||
pc_id=pc_id,
|
||||
embed_url=f"{config.BACKEND_INTERNAL_URL}/viewer-embed/{pc_id}",
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue