generated from dopt-python/py311
79 lines
2.0 KiB
Python
79 lines
2.0 KiB
Python
from pydantic import ValidationError
|
|
from PySide6.QtWidgets import QMessageBox, QWidget
|
|
|
|
from wce_crm.data_models import translate_pydantic_errors
|
|
|
|
|
|
def get_user_confirmation(
|
|
parent_widget: QWidget,
|
|
title: str,
|
|
message: str,
|
|
) -> bool:
|
|
response = QMessageBox.question(
|
|
parent_widget,
|
|
title,
|
|
message,
|
|
buttons=(QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No),
|
|
defaultButton=QMessageBox.StandardButton.No,
|
|
)
|
|
|
|
if response == QMessageBox.StandardButton.Yes:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def get_message_box(
|
|
msg_type: QMessageBox.Icon,
|
|
title: str,
|
|
message: str,
|
|
detailed_text: str | None = None,
|
|
) -> QMessageBox:
|
|
msg_box = QMessageBox()
|
|
msg_box.setIcon(msg_type)
|
|
msg_box.setWindowTitle(title)
|
|
msg_box.setText(message)
|
|
if detailed_text is not None:
|
|
msg_box.setDetailedText(detailed_text)
|
|
|
|
return msg_box
|
|
|
|
|
|
def pydantic_validation_error_handling(
|
|
val_error: ValidationError,
|
|
) -> None:
|
|
error_texts: list[str] = []
|
|
translated_errors = translate_pydantic_errors(val_error.errors())
|
|
|
|
for error in translated_errors:
|
|
error_field = str(error["loc"][0])
|
|
reason = error["msg"]
|
|
path = " → ".join(error["loc"][:-1]) # type: ignore
|
|
|
|
error_texts.append(f"- {error_field}: {reason}, (Pfad: {path})")
|
|
|
|
msg_box = get_message_box(
|
|
QMessageBox.Icon.Warning,
|
|
"Fehler bei der Validierung der Eingabedaten",
|
|
(
|
|
"Bei der Validierung der Eingaben ist ein Fehler aufgetreten. Details "
|
|
"sind unten angefügt."
|
|
),
|
|
"\n".join(error_texts),
|
|
)
|
|
msg_box.exec()
|
|
|
|
|
|
def GUI_validation_error_handling(
|
|
errors: list[str],
|
|
) -> None:
|
|
error_text = "Bitte füllen Sie die folgenden Pflichtfelder aus:\n\n▸ " + "\n▸ ".join(
|
|
errors
|
|
)
|
|
msg_box = get_message_box(
|
|
QMessageBox.Icon.Warning,
|
|
"Fehlende oder fehlerhafte Angaben",
|
|
error_text,
|
|
)
|
|
msg_box.exec()
|