refactor: address review feedback on multipart field compatibility and form serialization

This commit is contained in:
Schmidt Till (CSS TO PME DSI PAO MUC) 2026-09-10 23:32:40 +02:00
parent 505ded0493
commit 6650298c3d
2 changed files with 18 additions and 9 deletions

18
app.py
View file

@ -47,12 +47,22 @@ def read_root():
@app.post("/api/clean") @app.post("/api/clean")
async def clean_endpoint( async def clean_endpoint(
file: UploadFile = File(...), file: UploadFile | None = File(default=None),
image: UploadFile | None = File(default=None),
prompt: str = Form(default=DEFAULT_PROMPT), prompt: str = Form(default=DEFAULT_PROMPT),
model: str = Form(default=DEFAULT_MODEL), model: str = Form(default=DEFAULT_MODEL),
api_key: str | None = Form(default=None), api_key: str | None = Form(default=None),
restore_res: bool = Form(default=True), restore_res: bool = Form(default=True),
restore_resolution: bool | None = Form(default=None),
): ):
upload_file = file or image
if upload_file is None:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Image file is required (field 'file' or 'image').",
)
effective_restore = restore_resolution if restore_resolution is not None else restore_res
effective_api_key = resolve_api_key(api_key) effective_api_key = resolve_api_key(api_key)
if not effective_api_key: if not effective_api_key:
raise HTTPException( raise HTTPException(
@ -61,9 +71,9 @@ async def clean_endpoint(
) )
try: try:
file_bytes = await file.read() file_bytes = await upload_file.read()
finally: finally:
await file.close() await upload_file.close()
if not file_bytes: if not file_bytes:
raise HTTPException( raise HTTPException(
@ -83,7 +93,7 @@ async def clean_endpoint(
prompt=prompt, prompt=prompt,
api_key=effective_api_key, api_key=effective_api_key,
model=model, model=model,
restore_res=restore_res, restore_res=effective_restore,
) )
except CleanerError as exc: except CleanerError as exc:
raise HTTPException( raise HTTPException(

View file

@ -800,6 +800,7 @@
try { try {
const formData = new FormData(); const formData = new FormData();
formData.append("file", selectedFile);
formData.append("image", selectedFile); formData.append("image", selectedFile);
formData.append("prompt", promptTextarea.value); formData.append("prompt", promptTextarea.value);
formData.append("model", modelInput.value.trim() || "meta/muse-image"); formData.append("model", modelInput.value.trim() || "meta/muse-image");
@ -808,11 +809,9 @@
if (apiKey) { if (apiKey) {
formData.append("api_key", apiKey); formData.append("api_key", apiKey);
} }
formData.append( const shouldRestore = restoreResolutionCheckbox.checked ? "true" : "false";
"restore_resolution", formData.append("restore_res", shouldRestore);
restoreResolutionCheckbox.checked ? "true" : "false" formData.append("restore_resolution", shouldRestore);
);
const response = await fetch("/api/clean", { const response = await fetch("/api/clean", {
method: "POST", method: "POST",
body: formData, body: formData,