Example #1
0
def excepthook(exc_type, exc_value, exc_traceback):
    """
    Handle unexpected errors by popping an error window and restarting the app.
    """
    global last_failure_time
    failure_time = datetime.datetime.now()
    difference_with_last_failure = failure_time - last_failure_time
    last_failure_time = failure_time
    if difference_with_last_failure < datetime.timedelta(seconds=2):
        return

    string_tb = traceback.format_exception(exc_type, exc_value, exc_traceback)
    from_kitsupublisher = any("kitsupublisher" in tb_step
                              for tb_step in string_tb)
    if not from_kitsupublisher:
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    header = "\n=== An error occured !=== \nError message:\n"
    traceback_print = "".join(string_tb)

    message = "%s%s" % (header, traceback_print)
    if is_blender_context():
        from dccutils.dcc_blender import BlenderContext
        BlenderContext.software_print(message)
    else:
        print(message)
    app = QtWidgets.QApplication.instance()
    create_error_dialog(app.current_window, traceback_print)
    app.current_window.close()
    launch_main_window(app)
Example #2
0
    def create_preview(self):
        """
        Create the preview following the type of object to display.
        """
        if not self.preview_file:
            self.preview_widget = NoPreviewWidget(self, "No preview yet")
        else:
            try:
                if is_video(self.preview_file):
                    if (is_blender_context() or is_maya_context()
                            or is_houdini_context() or get_current_binding()
                            not in ["PySide2", "PyQt5"]):
                        # Video not supported yet on Blender nor Maya
                        # Qt video support introduced in PySide2/PyQt5
                        raise MediaNotSetUp()
                    else:
                        from kitsupublisher.views.task_panel.PreviewVideoWidget import (
                            PreviewVideoWidget, )

                        self.preview_widget = PreviewVideoWidget(
                            self, self.preview_file)
                else:
                    self.preview_widget = PreviewImageWidget(
                        self, self.preview_file)
            except MediaNotSetUp:
                self.preview_widget = None
                message = (
                    "Error while displaying the preview. <br/> Please "
                    "refer to the web interface by following this link :")

                self.preview_widget = NoPreviewWidget(self, message,
                                                      self.kitsu_task_url)
Example #3
0
 def get_preview_selector_items(self):
     """
     Return available previews depending on the context.
     """
     if is_maya_context() or is_blender_context():
         return ["Take screenshot", "Take playblast", "From local file"]
     elif is_houdini_context():
         return ["Take screenshot", "From local file"]
     else:
         return ["From local file"]
 def init_context(self):
     """
     Initialize the context class, depending on which software is used.
     """
     if is_blender_context():
         from dccutils.blender import BlenderContext as Context
     elif is_maya_context():
         from dccutils.maya import MayaContext as Context
     elif is_houdini_context():
         from dccutils.houdini import HoudiniContext as Context
     else:
         raise ContextNotFoundError
     self.context = Context()
    def display_video_preview(self, animation_path):
        """
        Display the video.
        """
        if is_blender_context() or is_maya_context() or is_houdini_context():
            raise MediaNotSetUp()

        self.clear_preview()

        self.preview_widget = QtMultimediaWidgets.QVideoWidget()
        self.preview_widget.resize(300, 300)
        self.preview_widget.move(0, 0)
        self.player = QtMultimedia.QMediaPlayer()
        self.player.setVideoOutput(self.preview_widget)
        self.player.setMedia(
            QtMultimedia.QMediaContent(
                QtCore.QUrl.fromLocalFile(animation_path)))
        self.frame_preview_layout.addWidget(self.preview_widget)
        self.player.play()