- VERIFICATION.md: 3/3 must-haves verified, 124/124 tests green - ROADMAP.md: Phase 15 marked complete - STATE.md: advanced to post-phase state Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.8 KiB
CLAUDE.md
Guide for Claude Code (claude.ai/code) work in repo.
Commands
Run tests:
pytest tests/
pytest tests/unit/test_inf_parser.py # single test file
pytest tests/ -k "test_name" # single test by name
Run dev server:
export DATA_DIR=/tmp/imptune_data
uvicorn imptune.main:app --reload --port 8000
Docker:
docker-compose up
docker build -t imptune .
Install deps:
pip install -r requirements.txt -r requirements-dev.txt
Architecture
ImpTune make printer deploy packages (.intunewin for Intune, .zip for NinjaRMM) from Windows driver ZIPs + web UI. No external services — single FastAPI + SQLite + Docker volume.
Request flow:
- Driver upload →
api/drivers.py→services/inf_parser.pyparse INF →storage/driver_store.pystore by SHA256 → PeeweeDriverrecord - Printer config →
api/printers.py→db/models.pyPrinterrecord (links Driver FK) - Icon upload →
api/icons.py→ Pillow validate PNG 256×256 → SHA256 storage →Iconrecord - Package export →
api/packages.py→generators/script_generator.pyrender Jinja2 PS1 templates →generators/intunewin_builder.pyencrypt ZIP (AES-256-CBC + HMAC-SHA256)
Key modules:
imptune/config.py—DATA_DIR,DB_PATH,DRIVERS_DIR,ICONS_DIRfrom envimptune/db/database.py— SQLite WAL mode +foreign_keys=1; all models inheritBaseModelimptune/services/inf_parser.py— auto-detect encoding (UTF-16/UTF-8/cp1252), resolve%TOKEN%from[Strings], handle multi-model INFsimptune/generators/intunewin_builder.py— Python-native.intunewin(ZIP-in-ZIP); IV 16 bytes (not 32); match reference tool1.8.6.0outputimptune/templates/scripts/— Jinja2 templates forinstall.ps1,uninstall.ps1,detect.ps1
UI stack: Pico CSS + HTMX 2 + Alpine.js 3 + Jinja2 server-side templates.
HTMX pattern: Forms hx-post, swap #driver-list / #printer-list / #client-list targets. Errors return inline HTML fragments (HTTP 400/409) via _error_response(). Success return partials from templates/partials/.
PowerShell install script notes:
- WOW64 64-bit relaunch guard (Intune run 32-bit,
pnputilneed 64-bit) - UAC self-elevation for user context (SYSTEM context skip)
- Two-step:
pnputil /add-driverthenAdd-PrinterDriver+Add-PrinterPort+Add-Printer - All idempotent (
-ErrorAction SilentlyContinue)
Test Setup
conftest.py monkeypatch config.DATA_DIR + config.DB_PATH to temp dir per test. client fixture yield TestClient(app) with isolated SQLite. E2E in tests/e2e/ use Playwright.
Environment Variables
| Var | Default | Purpose |
|---|---|---|
DATA_DIR |
/data |
Storage root (DB + drivers + icons) |
PORT |
8000 |
Server port |