/
githubmirror
/
setools
Обзор
Документация
Войти
/
githubmirror
/
setools
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
4.6.0
setoolsgui/widgets/util.py
53 строки
2 KB
Chris PeBenito
apol: Add graphical output for Infoflow and DTA.
14 фев 2024, 17:11
14 фев 2024, 17:11
be79ffa
Код
Авторство
О чём код?
# SPDX-License-Identifier: LGPL-2.1-only import logging import traceback import types import typing from PyQt6 import QtWidgets __all__: typing.Final[tuple[str, ...]] = ("QMessageOnException",) class QMessageOnException: """Context manager to display a message box on exception.""" def __init__(self, title: str, message: str, /, *, suppress: bool = True, log: logging.Logger | None = None, icon: QtWidgets.QMessageBox.Icon = QtWidgets.QMessageBox.Icon.Critical, parent: QtWidgets.QWidget | None = None) -> None: self.title: typing.Final[str] = title self.message: typing.Final[str] = message self.suppress: typing.Final[bool] = suppress self.parent: typing.Final[QtWidgets.QWidget | None] = parent self.log: typing.Final[logging.Logger] = log if log else logging.getLogger(__name__) self.icon: typing.Final[QtWidgets.QMessageBox.Icon] = icon def __enter__(self) -> None: pass def __exit__(self, exc_type: type[BaseException] | None, exc_value: BaseException | None, tb: types.TracebackType | None) -> bool: if exc_type: self.log.critical(self.message) self.log.debug("Backtrace", exc_info=True) msg = QtWidgets.QMessageBox(self.icon, self.title, self.message, parent=self.parent) msg.setInformativeText(str(exc_value)) msg.setDetailedText("\n".join(traceback.format_tb(tb))) msg.exec() return self.suppress return False