{safe_name}/drivers/* — all driver files extracted from the driver ZIP on disk
Built entirely in-memory with io.BytesIO + zipfile.ZipFile(ZIP_DEFLATED)
GET /printers/{id}/packages/intunewin — Returns a .intunewin file (application/octet-stream) with:
Writes install.ps1, uninstall.ps1, detect.ps1 into a TemporaryDirectory
Extracts driver ZIP into tmpdir/drivers/
Calls build_intunewin(tmpdir, "install.ps1", output_path) — no subprocess calls
Reads bytes and returns as binary Response
Both endpoints share _get_printer_and_driver() helper (404 for missing printer, 422 for no/invalid driver) and validate the driver ZIP file exists on disk (422 if missing).
Router registered in imptune/main.py after scripts.router.
Tests
9 new tests in tests/test_packages.py:
TestNinjaDownload: 5 tests (zip response, install.ps1 in zip, driver files in zip, 404, 422)
Full suite result: 84 passed (excluding pre-existing icon upload failures in test_icon_upload.py which existed before this plan).
Deviations from Plan
None — plan executed exactly as written.
Pre-existing Issues (Out of Scope)
tests/test_icon_upload.py has 5 failing tests (/printers/{id}/icon returns 404). These failures existed before this plan was executed and are unrelated to package export. Logged for future attention.