From 1c13bc8ce2db5a98cdc7b259a94fa706b70732ae Mon Sep 17 00:00:00 2001 From: qoncept96 Date: Thu, 3 Sep 2026 17:39:11 -0500 Subject: [PATCH] Don't crash when 3MF metadata is empty getMetaDataFrom3mf() returns {} on every failure path, but both callers immediately hard-index it, so a failed or unparseable 3MF raises KeyError: 'image' (cloud path) or KeyError: 'file' (local path) inside the MQTT callback instead of just recording a print without a thumbnail. The local-path crash is issue #78. The `if PENDING_PRINT_METADATA:` guard above it does not help, because by then {} has had print_type, task_id and subtask_id written onto it and is truthy. insert_print() stores both values in nullable columns, so .get() keeps the print recorded and leaves MQTT handling alive. Addresses #78 --- mqtt_bambulab.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mqtt_bambulab.py b/mqtt_bambulab.py index 2d704886..a918c416 100644 --- a/mqtt_bambulab.py +++ b/mqtt_bambulab.py @@ -263,7 +263,7 @@ def processMessage(data): if TRACK_LAYER_USAGE: FILAMENT_TRACKER.set_print_metadata(PENDING_PRINT_METADATA) - print_id = insert_print(PRINTER_STATE["print"]["subtask_name"], "cloud", PENDING_PRINT_METADATA["image"]) + print_id = insert_print(PRINTER_STATE["print"]["subtask_name"], "cloud", PENDING_PRINT_METADATA.get("image")) if PRINTER_STATE["print"].get("use_ams"): PENDING_PRINT_METADATA["ams_mapping"] = PRINTER_STATE["print"]["ams_mapping"] @@ -313,7 +313,7 @@ def processMessage(data): PENDING_PRINT_METADATA["subtask_id"] = PRINTER_STATE["print"].get("subtask_id") if not PENDING_PRINT_METADATA.get("tracking_started"): - print_id = insert_print(PENDING_PRINT_METADATA["file"], PRINTER_STATE["print"]["print_type"], PENDING_PRINT_METADATA["image"]) + print_id = insert_print(PENDING_PRINT_METADATA.get("file"), PRINTER_STATE["print"]["print_type"], PENDING_PRINT_METADATA.get("image")) PENDING_PRINT_METADATA["ams_mapping"] = [] PENDING_PRINT_METADATA["filamentChanges"] = []