diff --git a/openpype/tools/publisher/widgets/create_dialog.py b/openpype/tools/publisher/widgets/create_dialog.py
index c5b77eca8b..5ebcd7291d 100644
--- a/openpype/tools/publisher/widgets/create_dialog.py
+++ b/openpype/tools/publisher/widgets/create_dialog.py
@@ -14,6 +14,8 @@ from openpype.pipeline.create import (
SUBSET_NAME_ALLOWED_SYMBOLS
)
+from openpype.tools.utils import ErrorMessageBox
+
from .widgets import IconValuePixmapLabel
from .assets_widget import CreateDialogAssetsWidget
from .tasks_widget import CreateDialogTasksWidget
@@ -27,7 +29,7 @@ from ..constants import (
SEPARATORS = ("---separator---", "---")
-class CreateErrorMessageBox(QtWidgets.QDialog):
+class CreateErrorMessageBox(ErrorMessageBox):
def __init__(
self,
creator_label,
@@ -35,24 +37,38 @@ class CreateErrorMessageBox(QtWidgets.QDialog):
asset_name,
exc_msg,
formatted_traceback,
- parent=None
+ parent
):
- super(CreateErrorMessageBox, self).__init__(parent)
- self.setWindowTitle("Creation failed")
- self.setFocusPolicy(QtCore.Qt.StrongFocus)
- if not parent:
- self.setWindowFlags(
- self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint
- )
+ self._creator_label = creator_label
+ self._subset_name = subset_name
+ self._asset_name = asset_name
+ self._exc_msg = exc_msg
+ self._formatted_traceback = formatted_traceback
+ super(CreateErrorMessageBox, self).__init__("Creation failed", parent)
- body_layout = QtWidgets.QVBoxLayout(self)
-
- main_label = (
+ def _create_top_widget(self, parent_widget):
+ label_widget = QtWidgets.QLabel(parent_widget)
+ label_widget.setText(
"Failed to create"
)
- main_label_widget = QtWidgets.QLabel(main_label, self)
- body_layout.addWidget(main_label_widget)
+ return label_widget
+ def _get_report_data(self):
+ report_message = (
+ "{creator}: Failed to create Subset: \"{subset}\""
+ " in Asset: \"{asset}\""
+ "\n\nError: {message}"
+ ).format(
+ creator=self._creator_label,
+ subset=self._subset_name,
+ asset=self._asset_name,
+ message=self._exc_msg,
+ )
+ if self._formatted_traceback:
+ report_message += "\n\n{}".format(self._formatted_traceback)
+ return [report_message]
+
+ def _create_content(self, content_layout):
item_name_template = (
"Creator: {}
"
"Subset: {}
"
@@ -61,48 +77,29 @@ class CreateErrorMessageBox(QtWidgets.QDialog):
exc_msg_template = "{}"
line = self._create_line()
- body_layout.addWidget(line)
+ content_layout.addWidget(line)
- item_name = item_name_template.format(
- creator_label, subset_name, asset_name
- )
- item_name_widget = QtWidgets.QLabel(
- item_name.replace("\n", "
"), self
- )
- body_layout.addWidget(item_name_widget)
-
- exc_msg = exc_msg_template.format(exc_msg.replace("\n", "
"))
- message_label_widget = QtWidgets.QLabel(exc_msg, self)
- body_layout.addWidget(message_label_widget)
-
- if formatted_traceback:
- tb_widget = QtWidgets.QLabel(
- formatted_traceback.replace("\n", "
"), self
+ item_name_widget = QtWidgets.QLabel(self)
+ item_name_widget.setText(
+ item_name_template.format(
+ self._creator_label, self._subset_name, self._asset_name
)
- tb_widget.setTextInteractionFlags(
- QtCore.Qt.TextBrowserInteraction
- )
- body_layout.addWidget(tb_widget)
-
- footer_widget = QtWidgets.QWidget(self)
- footer_layout = QtWidgets.QHBoxLayout(footer_widget)
- button_box = QtWidgets.QDialogButtonBox(QtCore.Qt.Vertical)
- button_box.setStandardButtons(
- QtWidgets.QDialogButtonBox.StandardButton.Ok
)
- button_box.accepted.connect(self._on_accept)
- footer_layout.addWidget(button_box, alignment=QtCore.Qt.AlignRight)
- body_layout.addWidget(footer_widget)
+ content_layout.addWidget(item_name_widget)
- def _on_accept(self):
- self.close()
+ message_label_widget = QtWidgets.QLabel(self)
+ message_label_widget.setText(
+ exc_msg_template.format(self.convert_text_for_html(self._exc_msg))
+ )
+ content_layout.addWidget(message_label_widget)
- def _create_line(self):
- line = QtWidgets.QFrame(self)
- line.setFixedHeight(2)
- line.setFrameShape(QtWidgets.QFrame.HLine)
- line.setFrameShadow(QtWidgets.QFrame.Sunken)
- return line
+ if self._formatted_traceback:
+ line_widget = self._create_line()
+ tb_widget = self._create_traceback_widget(
+ self._formatted_traceback
+ )
+ content_layout.addWidget(line_widget)
+ content_layout.addWidget(tb_widget)
# TODO add creator identifier/label to details
@@ -201,7 +198,7 @@ class CreateDialog(QtWidgets.QDialog):
self._prereq_available = False
- self.message_dialog = None
+ self._message_dialog = None
name_pattern = "^[{}]*$".format(SUBSET_NAME_ALLOWED_SYMBOLS)
self._name_pattern = name_pattern
@@ -694,14 +691,18 @@ class CreateDialog(QtWidgets.QDialog):
"family": family
}
- error_info = None
+ error_msg = None
+ formatted_traceback = None
try:
self.controller.create(
- creator_identifier, subset_name, instance_data, pre_create_data
+ creator_identifier,
+ subset_name,
+ instance_data,
+ pre_create_data
)
except CreatorError as exc:
- error_info = (str(exc), None)
+ error_msg = str(exc)
# Use bare except because some hosts raise their exceptions that
# do not inherit from python's `BaseException`
@@ -710,12 +711,17 @@ class CreateDialog(QtWidgets.QDialog):
formatted_traceback = "".join(traceback.format_exception(
exc_type, exc_value, exc_traceback
))
- error_info = (str(exc_value), formatted_traceback)
+ error_msg = str(exc_value)
- if error_info:
+ if error_msg is not None:
box = CreateErrorMessageBox(
- creator_label, subset_name, asset_name, *error_info
+ creator_label,
+ subset_name,
+ asset_name,
+ error_msg,
+ formatted_traceback,
+ parent=self
)
box.show()
# Store dialog so is not garbage collected before is shown
- self.message_dialog = box
+ self._message_dialog = box