generated from dopt-python/py311
document selection: add Pydantic models and tests for saving/loading
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user