diff --git a/imptune/api/drivers.py b/imptune/api/drivers.py index 123a153..b8f154c 100644 --- a/imptune/api/drivers.py +++ b/imptune/api/drivers.py @@ -6,7 +6,7 @@ import json import zipfile from pathlib import Path -from fastapi import APIRouter, Request, UploadFile +from fastapi import APIRouter, Form, Request, UploadFile from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates @@ -33,7 +33,11 @@ def _error_response(message: str, status_code: int = 400) -> HTMLResponse: @router.post("/upload", response_class=HTMLResponse) -def upload_driver(request: Request, file: UploadFile) -> HTMLResponse: +def upload_driver( + request: Request, + file: UploadFile, + caller: str = Form(""), +) -> HTMLResponse: """Accept a driver ZIP, parse its INF, persist via DriverStore + Peewee ORM. Returns an HTMX partial (partials/driver_list.html) on success, or an @@ -86,7 +90,7 @@ def upload_driver(request: Request, file: UploadFile) -> HTMLResponse: sha256 = store.save(data) # Upsert Driver record (no duplicate if same SHA256) - Driver.get_or_create( + new_driver, _created = Driver.get_or_create( sha256=sha256, defaults={ "original_filename": filename, @@ -105,6 +109,19 @@ def upload_driver(request: Request, file: UploadFile) -> HTMLResponse: names = json.loads(d.driver_desc) if d.driver_desc else [] driver_data.append({"driver": d, "names": names}) + # When called from the printer form, emit primary fragment + OOB select refresh + if caller == "printer_form": + return templates.TemplateResponse( + request=request, + name="partials/driver_upload_with_oob.html", + context={ + "driver_data": driver_data, + "new_driver_id": new_driver.id, + "parsed": parsed, + }, + ) + + # Default: existing behavior — driver list fragment only return templates.TemplateResponse( request=request, name="partials/driver_list.html", diff --git a/imptune/templates/partials/driver_upload_with_oob.html b/imptune/templates/partials/driver_upload_with_oob.html new file mode 100644 index 0000000..3504c55 --- /dev/null +++ b/imptune/templates/partials/driver_upload_with_oob.html @@ -0,0 +1,11 @@ +{% include "partials/driver_list.html" %} + +