Files
bambuddy/backend/app
maziggy 0827ebc5b7 fix(backup): let the nozzle_id default apply, and prefer the live one (#2656)
`set_kprofiles_batch` defaults the field with
    `p.get("nozzle_id", f"HS00-{diameter}")`, and a `dict.get` default only
    fires when the key is *absent*. The restore always set the key —
    `"nozzle_id": p.get("nozzle_id")` — so a backup that carries no nozzle_id
    published `nozzle_id: null` to the printer instead. Printers that omit the
    field (KProfilesView's own #1748 comments) are exactly why the default is
    there, and it was unreachable from this path.

    Set only when known, on the same precedence the `setting_id` line beside it
    already uses: the live profile first, then the backup, then absent. Live
    first is the point rather than a bonus — `nozzle_id` encodes the fitted
    nozzle's type as well as its diameter (`HS00-` hardened vs `SS00-`
    stainless), so a nozzle swapped since the backup makes the stored value
    stale, and the write lands on the nozzle fitted now.

    Read with `getattr`, matching the defensive read of `extruder_id` in
    `_match_kprofile`: not every live profile carries every field, and
    `test_a_live_index_that_reports_no_extruder_still_matches` is the standing
    control for that.

    Four tests, two of which fail without the fix. The `_live` double also
    gained `nozzle_id` — it is a non-default field on the real `KProfile`
    dataclass, so omitting it let the double license code the real object
    would have accepted.
2026-08-15 14:17:36 +02:00
..
…
…
…