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 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

View File

@ -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))