From f2f2c93aa14fe50eab40a1ce1c597ee08ea204bb Mon Sep 17 00:00:00 2001 From: Eric Callahan Date: Sun, 2 Jun 2024 07:17:15 -0400 Subject: [PATCH] history: check for null values during database migration Signed-off-by: Eric Callahan --- moonraker/components/history.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/moonraker/components/history.py b/moonraker/components/history.py index c01e406..4966589 100644 --- a/moonraker/components/history.py +++ b/moonraker/components/history.py @@ -139,6 +139,14 @@ class HistorySqlDefinition(SqlTableDefinition): ) version = 1 + def _get_entry_item( + self, entry: Dict[str, Any], name: str, default: Any = 0. + ) -> Any: + val = entry.get(name) + if val is None: + return default + return val + def migrate(self, last_version: int, db_provider: DBProviderWrapper) -> None: if last_version == 0: conn = db_provider.connection @@ -155,16 +163,16 @@ class HistorySqlDefinition(SqlTableDefinition): conv_vals.append( ( None, - entry.get("user", "No User"), - entry["filename"], - entry["status"], - entry["start_time"], - entry["end_time"], - entry["print_duration"], - entry["total_duration"], - entry["filament_used"], - entry["metadata"], - entry.get("auxiliary_data", []), + self._get_entry_item(entry, "user", "No User"), + self._get_entry_item(entry, "filename"), + self._get_entry_item(entry, "status", "error"), + self._get_entry_item(entry, "start_time"), + self._get_entry_item(entry, "end_time"), + self._get_entry_item(entry, "print_duration"), + self._get_entry_item(entry, "total_duration"), + self._get_entry_item(entry, "filament_used"), + self._get_entry_item(entry, "metadata", {}), + self._get_entry_item(entry, "auxiliary_data", []), "default" ) ) @@ -617,7 +625,7 @@ class PrinterJob: print_stats: Dict[str, Any] = {} ) -> None: self.end_time = time.time() - self.status = status + self.status = status if status is not None else "error" self.update_from_ps(print_stats) def get(self, name: str) -> Any: @@ -638,7 +646,7 @@ class PrinterJob: def update_from_ps(self, data: Dict[str, Any]) -> None: for i in data: - if hasattr(self, i): + if hasattr(self, i) and data[i] is not None: setattr(self, i, data[i])