0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

feat: monitor.py error message popup

This commit is contained in:
wyzula-jan
2023-11-30 18:16:23 +01:00
parent af71e35e73
commit a3b24f9242

View File

@ -136,6 +136,35 @@ config_no_entry = {
], ],
} }
config_wrong = {
"plot_settings": {
"background_color": "white",
"num_columns": 5,
"colormap": "plasma",
"scan_types": False,
},
"plot_data": [
{
"plot_name": "BPM4i plots vs samx",
"x": {"label": "Motor Y", "signals": [{"name": "samx"}]},
"y": {"label": "bpm4i", "signals": [{"name": "bpm4i"}]},
},
{
"plot_name": "Gauss plots vs samx",
"x": {"label": "Motor X", "signals": [{"name": "samx"}]},
"y": {
"label": "Gauss",
"signals": [
{"name": "gauss_bpm"},
{"name": "non_exist1"},
{"name": "non_exist2"},
{"name": "gauss_bpm", "entry": "samx"},
],
},
},
],
}
test_config = { test_config = {
"plot_settings": { "plot_settings": {
"background_color": "white", "background_color": "white",
@ -459,9 +488,30 @@ class BECMonitor(pg.GraphicsLayoutWidget):
self.config = validated_config.model_dump() self.config = validated_config.model_dump()
self._init_config() self._init_config()
except ValidationError as e: except ValidationError as e:
error_message = f"Monitor configuration validation error: {e}" error_str = str(e)
print(error_message) formatted_error_message = BECMonitor.format_validation_error(error_str)
# QMessageBox.critical(self, "Configuration Error", error_message) #TODO do better error popups
# Display the formatted error message in a popup
QMessageBox.critical(self, "Configuration Error", formatted_error_message)
@staticmethod
def format_validation_error(error_str: str) -> str:
error_lines = error_str.split("\n")
# The first line contains the number of errors.
error_header = f"<p><b>{error_lines[0]}</b></p><hr>"
formatted_error_message = error_header
# Skip the first line as it's the header.
error_details = error_lines[1:]
# Iterate through pairs of lines (each error's two lines).
for i in range(0, len(error_details), 2):
location = error_details[i]
message = error_details[i + 1] if i + 1 < len(error_details) else ""
formatted_error_message += f"<p><b>{location}</b><br>{message}</p><hr>"
return formatted_error_message
def flush(self) -> None: def flush(self) -> None:
"""Flush the data dictionary.""" """Flush the data dictionary."""