job_status and base_panel: supress is twice as slow than directly checking if the key exist

This commit is contained in:
alfrix 2024-01-25 14:31:04 -03:00
parent 5b7da9a9b8
commit 6f6f0d3f13
2 changed files with 61 additions and 68 deletions

View File

@ -8,7 +8,6 @@ from gi.repository import GLib, Gtk, Pango
from jinja2 import Environment from jinja2 import Environment
from datetime import datetime from datetime import datetime
from math import log from math import log
from contextlib import suppress
from ks_includes.screen_panel import ScreenPanel from ks_includes.screen_panel import ScreenPanel
@ -198,22 +197,21 @@ class BasePanel(ScreenPanel):
if action == "notify_update_response": if action == "notify_update_response":
if self.update_dialog is None: if self.update_dialog is None:
self.show_update_dialog() self.show_update_dialog()
with suppress(KeyError): if 'message' in data:
self.labels['update_progress'].set_text( self.labels['update_progress'].set_text(
f"{self.labels['update_progress'].get_text().strip()}\n" f"{self.labels['update_progress'].get_text().strip()}\n"
f"{data['message']}\n") f"{data['message']}\n")
with suppress(KeyError): if 'complete' in data and data['complete']:
if data['complete']: logging.info("Update complete")
logging.info("Update complete") if self.update_dialog is not None:
if self.update_dialog is not None: try:
try: self.update_dialog.set_response_sensitive(Gtk.ResponseType.OK, True)
self.update_dialog.set_response_sensitive(Gtk.ResponseType.OK, True) self.update_dialog.get_widget_for_response(Gtk.ResponseType.OK).show()
self.update_dialog.get_widget_for_response(Gtk.ResponseType.OK).show() except AttributeError:
except AttributeError: logging.error("error trying to show the updater button the dialog might be closed")
logging.error("error trying to show the updater button the dialog might be closed") self._screen.updating = False
self._screen.updating = False for dialog in self._screen.dialogs:
for dialog in self._screen.dialogs: self._gtk.remove_dialog(dialog)
self._gtk.remove_dialog(dialog)
if action != "notify_status_update" or self._screen.printer is None: if action != "notify_status_update" or self._screen.printer is None:
return return
@ -230,13 +228,13 @@ class BasePanel(ScreenPanel):
name = f"{name[:1].upper()}: " name = f"{name[:1].upper()}: "
self.labels[device].set_label(f"{name}{int(temp)}°") self.labels[device].set_label(f"{name}{int(temp)}°")
with suppress(Exception): if (self.current_extruder is not False and 'toolhead' in data and 'extruder' in data['toolhead']
if self.current_extruder is not False and data["toolhead"]["extruder"] != self.current_extruder: and data["toolhead"]["extruder"] != self.current_extruder):
self.control['temp_box'].remove(self.labels[f"{self.current_extruder}_box"]) self.control['temp_box'].remove(self.labels[f"{self.current_extruder}_box"])
self.current_extruder = data["toolhead"]["extruder"] 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'].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'].reorder_child(self.labels[f"{self.current_extruder}_box"], 0)
self.control['temp_box'].show_all() self.control['temp_box'].show_all()
return False return False

View File

@ -5,7 +5,6 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gtk, Pango from gi.repository import GLib, Gtk, Pango
from contextlib import suppress
from math import pi, sqrt, trunc from math import pi, sqrt, trunc
from statistics import median from statistics import median
from time import time 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 ''}" f"{data['display_status']['message'] if data['display_status']['message'] is not None else ''}"
) )
with suppress(KeyError): if 'toolhead' in data:
if data["toolhead"]["extruder"] != self.current_extruder: if 'extruder' in data['toolhead'] and data['toolhead']['extruder'] != self.current_extruder:
self.labels['temp_grid'].remove_column(0) self.labels['temp_grid'].remove_column(0)
self.labels['temp_grid'].insert_column(0) self.labels['temp_grid'].insert_column(0)
self.current_extruder = data["toolhead"]["extruder"] self.current_extruder = data["toolhead"]["extruder"]
self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], 0, 0, 1, 1) self.labels['temp_grid'].attach(self.buttons['extruder'][self.current_extruder], 0, 0, 1, 1)
self._screen.show_all() self._screen.show_all()
with suppress(KeyError): if "max_accel" in data["toolhead"]:
self.labels['max_accel'].set_label(f"{data['toolhead']['max_accel']:.0f} {self.mms2}") self.labels['max_accel'].set_label(f"{data['toolhead']['max_accel']:.0f} {self.mms2}")
with suppress(KeyError): if 'extruder' in data and 'pressure_advance' in data['extruder']:
self.labels['advance'].set_label(f"{data['extruder']['pressure_advance']:.2f}") self.labels['advance'].set_label(f"{data['extruder']['pressure_advance']:.2f}")
if "gcode_move" in data: if 'gcode_move' in data:
with suppress(KeyError): if 'gcode_position' in data['gcode_move']:
self.pos_z = round(float(data['gcode_move']['gcode_position'][2]), 2) 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 ''}") self.buttons['z'].set_label(f"Z: {self.pos_z:6.2f}{f'/{self.oheight}' if self.oheight > 0 else ''}")
with suppress(KeyError): if 'extrude_factor' in data['gcode_move']:
self.extrusion = round(float(data["gcode_move"]["extrude_factor"]) * 100) self.extrusion = round(float(data['gcode_move']['extrude_factor']) * 100)
self.labels['extrude_factor'].set_label(f"{self.extrusion:3}%") self.labels['extrude_factor'].set_label(f"{self.extrusion:3}%")
with suppress(KeyError): if 'speed_factor' in data['gcode_move']:
self.speed = round(float(data["gcode_move"]["speed_factor"]) * 100) self.speed = round(float(data['gcode_move']['speed_factor']) * 100)
self.speed_factor = float(data["gcode_move"]["speed_factor"]) self.speed_factor = float(data['gcode_move']['speed_factor'])
self.labels['speed_factor'].set_label(f"{self.speed:3}%") 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.req_speed = round(float(data["gcode_move"]["speed"]) / 60 * self.speed_factor)
self.labels['req_speed'].set_label( self.labels['req_speed'].set_label(
f"{self.speed}% {self.vel:3.0f}/{self.req_speed:3.0f} " 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 ''}" 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()) self.buttons['speed'].set_label(self.labels['req_speed'].get_label())
with suppress(KeyError): if 'homing_origin' in data['gcode_move']:
self.zoffset = float(data["gcode_move"]["homing_origin"][2]) self.zoffset = float(data['gcode_move']['homing_origin'][2])
self.labels['zoffset'].set_label(f"{self.zoffset:.3f} {self.mm}") self.labels['zoffset'].set_label(f"{self.zoffset:.3f} {self.mm}")
if "motion_report" in data: if 'motion_report' in data:
with suppress(KeyError): 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_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_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}") 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 evelocity = (pos[3] - self.prev_pos[0][3]) / interval
self.flowstore.append(self.fila_section * evelocity) self.flowstore.append(self.fila_section * evelocity)
self.prev_pos = [pos, now] self.prev_pos = [pos, now]
with suppress(KeyError): if 'live_velocity' in data['motion_report']:
self.vel = float(data["motion_report"]["live_velocity"]) self.vel = float(data["motion_report"]["live_velocity"])
self.labels['req_speed'].set_label( self.labels['req_speed'].set_label(
f"{self.speed}% {self.vel:3.0f}/{self.req_speed:3.0f} " 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 ''}" 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()) 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"])) self.flowstore.append(self.fila_section * float(data["motion_report"]["live_extruder_velocity"]))
fan_label = "" fan_label = ""
for fan in self.fans: for fan in self.fans:
@ -549,28 +548,27 @@ class Panel(ScreenPanel):
if fan_label: if fan_label:
self.buttons['fan'].set_label(fan_label[:12]) self.buttons['fan'].set_label(fan_label[:12])
if "print_stats" in data: if "print_stats" in data:
with suppress(KeyError): if 'state' in data['print_stats']:
self.set_state( self.set_state(
data["print_stats"]["state"], data["print_stats"]["state"],
msg=f'{data["print_stats"]["message"] if "message" in data["print_stats"] else ""}' 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"]) self.update_filename(data['print_stats']["filename"])
with suppress(KeyError): if 'filament_used' in data['print_stats']:
if 'filament_used' in data["print_stats"]: self.labels['filament_used'].set_label(
self.labels['filament_used'].set_label( f"{float(data['print_stats']['filament_used']) / 1000:.1f} m"
f"{float(data['print_stats']['filament_used']) / 1000:.1f} m" )
)
if 'info' in data["print_stats"]: if 'info' in data["print_stats"]:
with suppress(KeyError): if ('total_layer' in data['print_stats']['info']
if data["print_stats"]['info']['total_layer'] is not None: and data["print_stats"]['info']['total_layer'] is not None):
self.labels['total_layers'].set_label(f"{data['print_stats']['info']['total_layer']}") self.labels['total_layers'].set_label(f"{data['print_stats']['info']['total_layer']}")
with suppress(KeyError): if ('current_layer' in data['print_stats']['info']
if data["print_stats"]['info']['current_layer'] is not None: and data['print_stats']['info']['current_layer'] is not None):
self.labels['layer'].set_label( self.labels['layer'].set_label(
f"{data['print_stats']['info']['current_layer']} / " f"{data['print_stats']['info']['current_layer']} / "
f"{self.labels['total_layers'].get_text()}" f"{self.labels['total_layers'].get_text()}"
) )
elif "layer_height" in self.file_metadata and "object_height" in self.file_metadata: elif "layer_height" in self.file_metadata and "object_height" in self.file_metadata:
self.labels['layer'].set_label( self.labels['layer'].set_label(
f"{1 + round((self.pos_z - self.f_layer_h) / self.layer_h)} / " 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 estimated = slicer_time = filament_time = file_time = 0
timeleft_type = self._config.get_config()['main'].get('print_estimate_method', 'auto') timeleft_type = self._config.get_config()['main'].get('print_estimate_method', 'auto')
with suppress(KeyError): if 'estimated_time' in self.file_metadata and self.file_metadata['estimated_time'] > 1:
if self.file_metadata['estimated_time'] > 1: spdcomp = sqrt(self.speed_factor)
# speed_factor compensation based on empirical testing slicer_time = ((self.file_metadata['estimated_time']) / spdcomp)
spdcomp = sqrt(self.speed_factor) self.labels["slicer_time"].set_label(self.format_time(slicer_time))
slicer_time = ((self.file_metadata['estimated_time']) / spdcomp)
self.labels["slicer_time"].set_label(self.format_time(slicer_time))
with suppress(Exception): if 'filament_total' in self.file_metadata and self.file_metadata['filament_total'] >= fila_used > 0:
if self.file_metadata['filament_total'] >= fila_used: filament_time = (print_duration / (fila_used / self.file_metadata['filament_total']))
filament_time = (print_duration / (fila_used / self.file_metadata['filament_total'])) self.labels["filament_time"].set_label(self.format_time(filament_time))
self.labels["filament_time"].set_label(self.format_time(filament_time)) if progress > 0:
with suppress(ZeroDivisionError):
file_time = (print_duration / progress) file_time = (print_duration / progress)
self.labels["file_time"].set_label(self.format_time(file_time)) self.labels["file_time"].set_label(self.format_time(file_time))