From 6f6f0d3f134a396b4b1dc6e9286fc0613ea5d917 Mon Sep 17 00:00:00 2001 From: alfrix Date: Thu, 25 Jan 2024 14:31:04 -0300 Subject: [PATCH] job_status and base_panel: supress is twice as slow than directly checking if the key exist --- panels/base_panel.py | 40 ++++++++++---------- panels/job_status.py | 89 +++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 68 deletions(-) diff --git a/panels/base_panel.py b/panels/base_panel.py index f9c79ea9..b4894172 100644 --- a/panels/base_panel.py +++ b/panels/base_panel.py @@ -8,7 +8,6 @@ from gi.repository import GLib, Gtk, Pango from jinja2 import Environment from datetime import datetime from math import log -from contextlib import suppress from ks_includes.screen_panel import ScreenPanel @@ -198,22 +197,21 @@ class BasePanel(ScreenPanel): if action == "notify_update_response": if self.update_dialog is None: self.show_update_dialog() - with suppress(KeyError): + if 'message' in data: self.labels['update_progress'].set_text( f"{self.labels['update_progress'].get_text().strip()}\n" f"{data['message']}\n") - with suppress(KeyError): - if data['complete']: - logging.info("Update complete") - if self.update_dialog is not None: - try: - self.update_dialog.set_response_sensitive(Gtk.ResponseType.OK, True) - self.update_dialog.get_widget_for_response(Gtk.ResponseType.OK).show() - except AttributeError: - logging.error("error trying to show the updater button the dialog might be closed") - self._screen.updating = False - for dialog in self._screen.dialogs: - self._gtk.remove_dialog(dialog) + if 'complete' in data and data['complete']: + logging.info("Update complete") + if self.update_dialog is not None: + try: + self.update_dialog.set_response_sensitive(Gtk.ResponseType.OK, True) + self.update_dialog.get_widget_for_response(Gtk.ResponseType.OK).show() + except AttributeError: + logging.error("error trying to show the updater button the dialog might be closed") + self._screen.updating = False + for dialog in self._screen.dialogs: + self._gtk.remove_dialog(dialog) if action != "notify_status_update" or self._screen.printer is None: return @@ -230,13 +228,13 @@ class BasePanel(ScreenPanel): name = f"{name[:1].upper()}: " self.labels[device].set_label(f"{name}{int(temp)}°") - with suppress(Exception): - if self.current_extruder is not False and data["toolhead"]["extruder"] != self.current_extruder: - self.control['temp_box'].remove(self.labels[f"{self.current_extruder}_box"]) - self.current_extruder = data["toolhead"]["extruder"] - self.control['temp_box'].pack_start(self.labels[f"{self.current_extruder}_box"], True, True, 3) - self.control['temp_box'].reorder_child(self.labels[f"{self.current_extruder}_box"], 0) - self.control['temp_box'].show_all() + if (self.current_extruder is not False and 'toolhead' in data and 'extruder' in data['toolhead'] + and data["toolhead"]["extruder"] != self.current_extruder): + self.control['temp_box'].remove(self.labels[f"{self.current_extruder}_box"]) + self.current_extruder = data["toolhead"]["extruder"] + self.control['temp_box'].pack_start(self.labels[f"{self.current_extruder}_box"], True, True, 3) + self.control['temp_box'].reorder_child(self.labels[f"{self.current_extruder}_box"], 0) + self.control['temp_box'].show_all() return False diff --git a/panels/job_status.py b/panels/job_status.py index e97ab3fa..dbe4fe0d 100644 --- a/panels/job_status.py +++ b/panels/job_status.py @@ -5,7 +5,6 @@ import gi gi.require_version("Gtk", "3.0") from gi.repository import GLib, Gtk, Pango -from contextlib import suppress from math import pi, sqrt, trunc from statistics import median from time import time @@ -487,41 +486,41 @@ class Panel(ScreenPanel): f"{data['display_status']['message'] if data['display_status']['message'] is not None else ''}" ) - with suppress(KeyError): - if data["toolhead"]["extruder"] != self.current_extruder: + if 'toolhead' in data: + if 'extruder' in data['toolhead'] and data['toolhead']['extruder'] != self.current_extruder: self.labels['temp_grid'].remove_column(0) self.labels['temp_grid'].insert_column(0) self.current_extruder = data["toolhead"]["extruder"] self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], 0, 0, 1, 1) self._screen.show_all() - with suppress(KeyError): - self.labels['max_accel'].set_label(f"{data['toolhead']['max_accel']:.0f} {self.mms2}") - with suppress(KeyError): + if "max_accel" in data["toolhead"]: + self.labels['max_accel'].set_label(f"{data['toolhead']['max_accel']:.0f} {self.mms2}") + if 'extruder' in data and 'pressure_advance' in data['extruder']: self.labels['advance'].set_label(f"{data['extruder']['pressure_advance']:.2f}") - if "gcode_move" in data: - with suppress(KeyError): + if 'gcode_move' in data: + if 'gcode_position' in data['gcode_move']: self.pos_z = round(float(data['gcode_move']['gcode_position'][2]), 2) self.buttons['z'].set_label(f"Z: {self.pos_z:6.2f}{f'/{self.oheight}' if self.oheight > 0 else ''}") - with suppress(KeyError): - self.extrusion = round(float(data["gcode_move"]["extrude_factor"]) * 100) + if 'extrude_factor' in data['gcode_move']: + self.extrusion = round(float(data['gcode_move']['extrude_factor']) * 100) self.labels['extrude_factor'].set_label(f"{self.extrusion:3}%") - with suppress(KeyError): - self.speed = round(float(data["gcode_move"]["speed_factor"]) * 100) - self.speed_factor = float(data["gcode_move"]["speed_factor"]) + if 'speed_factor' in data['gcode_move']: + self.speed = round(float(data['gcode_move']['speed_factor']) * 100) + self.speed_factor = float(data['gcode_move']['speed_factor']) self.labels['speed_factor'].set_label(f"{self.speed:3}%") - with suppress(KeyError): + if 'speed' in data['gcode_move']: self.req_speed = round(float(data["gcode_move"]["speed"]) / 60 * self.speed_factor) self.labels['req_speed'].set_label( f"{self.speed}% {self.vel:3.0f}/{self.req_speed:3.0f} " f"{f'{self.mms}' if self.vel < 1000 and self.req_speed < 1000 and self._screen.width > 500 else ''}" ) self.buttons['speed'].set_label(self.labels['req_speed'].get_label()) - with suppress(KeyError): - self.zoffset = float(data["gcode_move"]["homing_origin"][2]) + if 'homing_origin' in data['gcode_move']: + self.zoffset = float(data['gcode_move']['homing_origin'][2]) self.labels['zoffset'].set_label(f"{self.zoffset:.3f} {self.mm}") - if "motion_report" in data: - with suppress(KeyError): + if 'motion_report' in data: + if 'live_position' in data['motion_report']: self.labels['pos_x'].set_label(f"X: {data['motion_report']['live_position'][0]:6.2f}") self.labels['pos_y'].set_label(f"Y: {data['motion_report']['live_position'][1]:6.2f}") self.labels['pos_z'].set_label(f"Z: {data['motion_report']['live_position'][2]:6.2f}") @@ -533,14 +532,14 @@ class Panel(ScreenPanel): evelocity = (pos[3] - self.prev_pos[0][3]) / interval self.flowstore.append(self.fila_section * evelocity) self.prev_pos = [pos, now] - with suppress(KeyError): + if 'live_velocity' in data['motion_report']: self.vel = float(data["motion_report"]["live_velocity"]) self.labels['req_speed'].set_label( f"{self.speed}% {self.vel:3.0f}/{self.req_speed:3.0f} " f"{f'{self.mms}' if self.vel < 1000 and self.req_speed < 1000 and self._screen.width > 500 else ''}" ) self.buttons['speed'].set_label(self.labels['req_speed'].get_label()) - with suppress(KeyError): + if 'live_extruder_velocity' in data['motion_report']: self.flowstore.append(self.fila_section * float(data["motion_report"]["live_extruder_velocity"])) fan_label = "" for fan in self.fans: @@ -549,28 +548,27 @@ class Panel(ScreenPanel): if fan_label: self.buttons['fan'].set_label(fan_label[:12]) if "print_stats" in data: - with suppress(KeyError): + if 'state' in data['print_stats']: self.set_state( data["print_stats"]["state"], msg=f'{data["print_stats"]["message"] if "message" in data["print_stats"] else ""}' ) - with suppress(KeyError): + if 'filename' in data['print_stats']: self.update_filename(data['print_stats']["filename"]) - with suppress(KeyError): - if 'filament_used' in data["print_stats"]: - self.labels['filament_used'].set_label( - f"{float(data['print_stats']['filament_used']) / 1000:.1f} m" - ) + if 'filament_used' in data['print_stats']: + self.labels['filament_used'].set_label( + f"{float(data['print_stats']['filament_used']) / 1000:.1f} m" + ) if 'info' in data["print_stats"]: - with suppress(KeyError): - if data["print_stats"]['info']['total_layer'] is not None: - self.labels['total_layers'].set_label(f"{data['print_stats']['info']['total_layer']}") - with suppress(KeyError): - if data["print_stats"]['info']['current_layer'] is not None: - self.labels['layer'].set_label( - f"{data['print_stats']['info']['current_layer']} / " - f"{self.labels['total_layers'].get_text()}" - ) + if ('total_layer' in data['print_stats']['info'] + and data["print_stats"]['info']['total_layer'] is not None): + self.labels['total_layers'].set_label(f"{data['print_stats']['info']['total_layer']}") + if ('current_layer' in data['print_stats']['info'] + and data['print_stats']['info']['current_layer'] is not None): + self.labels['layer'].set_label( + f"{data['print_stats']['info']['current_layer']} / " + f"{self.labels['total_layers'].get_text()}" + ) elif "layer_height" in self.file_metadata and "object_height" in self.file_metadata: self.labels['layer'].set_label( f"{1 + round((self.pos_z - self.f_layer_h) / self.layer_h)} / " @@ -601,18 +599,15 @@ class Panel(ScreenPanel): estimated = slicer_time = filament_time = file_time = 0 timeleft_type = self._config.get_config()['main'].get('print_estimate_method', 'auto') - with suppress(KeyError): - if self.file_metadata['estimated_time'] > 1: - # speed_factor compensation based on empirical testing - spdcomp = sqrt(self.speed_factor) - slicer_time = ((self.file_metadata['estimated_time']) / spdcomp) - self.labels["slicer_time"].set_label(self.format_time(slicer_time)) + if 'estimated_time' in self.file_metadata and self.file_metadata['estimated_time'] > 1: + spdcomp = sqrt(self.speed_factor) + slicer_time = ((self.file_metadata['estimated_time']) / spdcomp) + self.labels["slicer_time"].set_label(self.format_time(slicer_time)) - with suppress(Exception): - if self.file_metadata['filament_total'] >= fila_used: - filament_time = (print_duration / (fila_used / self.file_metadata['filament_total'])) - self.labels["filament_time"].set_label(self.format_time(filament_time)) - with suppress(ZeroDivisionError): + if 'filament_total' in self.file_metadata and self.file_metadata['filament_total'] >= fila_used > 0: + filament_time = (print_duration / (fila_used / self.file_metadata['filament_total'])) + self.labels["filament_time"].set_label(self.format_time(filament_time)) + if progress > 0: file_time = (print_duration / progress) self.labels["file_time"].set_label(self.format_time(file_time))