From 4da9c04d9ed87f807ffdbbd98fbbe00d0a3dfce8 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Mon, 5 Aug 2019 14:10:19 +0200 Subject: [PATCH] feat(nks): workio integration --- pype/nukestudio/__init__.py | 21 +++++++++++++ pype/nukestudio/workio.py | 61 +++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 pype/nukestudio/workio.py diff --git a/pype/nukestudio/__init__.py b/pype/nukestudio/__init__.py index 834455168a..2e7ccdd675 100644 --- a/pype/nukestudio/__init__.py +++ b/pype/nukestudio/__init__.py @@ -4,7 +4,17 @@ from avalon.tools import workfiles from avalon import api as avalon from pyblish import api as pyblish +from .workio import ( + open, + save, + current_file, + has_unsaved_changes, + file_extensions, + work_root +) + from .. import api + from .menu import ( install as menu_install, _update_menu_task_label @@ -17,6 +27,17 @@ import hiero log = Logger().get_logger(__name__, "nukestudio") +__all__ = [ + # Workfiles API + "open", + "save", + "current_file", + "has_unsaved_changes", + "file_extensions", + "work_root", + ] + + AVALON_CONFIG = os.getenv("AVALON_CONFIG", "pype") PARENT_DIR = os.path.dirname(__file__) diff --git a/pype/nukestudio/workio.py b/pype/nukestudio/workio.py new file mode 100644 index 0000000000..7fbd85a708 --- /dev/null +++ b/pype/nukestudio/workio.py @@ -0,0 +1,61 @@ +"""Host API required Work Files tool""" +import os +import hiero + + +def file_extensions(): + return [".hrox"] + + +def has_unsaved_changes(): + return hiero.core.projects()[-1] + + +def save(filepath): + project = hiero.core.projects()[-1] + + if project: + project.saveAs(filepath) + else: + project = hiero.core.newProject() + project.saveAs(filepath) + + +def open(filepath): + try: + hiero.core.openProject(filepath) + return True + except Exception as e: + try: + from PySide.QtGui import * + from PySide.QtCore import * + except: + from PySide2.QtGui import * + from PySide2.QtWidgets import * + from PySide2.QtCore import * + + prompt = "Cannot open the selected file: `{}`".format(e) + hiero.core.log.error(prompt) + dialog = QMessageBox.critical( + hiero.ui.mainWindow(), "Error", unicode(prompt)) + + +def current_file(): + import os + import hiero + + current_file = hiero.core.projects()[-1].path() + normalised = os.path.normpath(current_file) + + # Unsaved current file + if normalised is '': + return "NOT SAVED" + + return normalised + + + +def work_root(): + from avalon import api + + return os.path.normpath(api.Session["AVALON_WORKDIR"]).replace("\\", "/")