Merge branch 'develop' into feature/OP-3506_Use-query-functions-in-openpype-lib

This commit is contained in:
Jakub Trllo 2022-07-04 16:51:07 +02:00
commit 24305ca803
70 changed files with 1542 additions and 538 deletions

View file

@ -1,12 +1,10 @@
from .window import Window
from .app import (
show,
validate_host_requirements,
)
__all__ = [
"Window",
"show",
"validate_host_requirements",
]

View file

@ -1,6 +1,7 @@
import sys
import logging
from openpype.host import IWorkfileHost
from openpype.pipeline import (
registered_host,
legacy_io,
@ -14,31 +15,6 @@ module = sys.modules[__name__]
module.window = None
def validate_host_requirements(host):
if host is None:
raise RuntimeError("No registered host.")
# Verify the host has implemented the api for Work Files
required = [
"open_file",
"save_file",
"current_file",
"has_unsaved_changes",
"work_root",
"file_extensions",
]
missing = []
for name in required:
if not hasattr(host, name):
missing.append(name)
if missing:
raise RuntimeError(
"Host is missing required Work Files interfaces: "
"%s (host: %s)" % (", ".join(missing), host)
)
return True
def show(root=None, debug=False, parent=None, use_context=True, save=True):
"""Show Work Files GUI"""
# todo: remove `root` argument to show()
@ -50,7 +26,7 @@ def show(root=None, debug=False, parent=None, use_context=True, save=True):
pass
host = registered_host()
validate_host_requirements(host)
IWorkfileHost.validate_workfile_methods(host)
if debug:
legacy_io.Session["AVALON_ASSET"] = "Mock"

View file

@ -6,12 +6,12 @@ import copy
import Qt
from Qt import QtWidgets, QtCore
from openpype.host import IWorkfileHost
from openpype.client import get_asset_by_id
from openpype.tools.utils import PlaceholderLineEdit
from openpype.tools.utils.delegates import PrettyTimeDelegate
from openpype.lib import (
emit_event,
Anatomy,
get_workfile_template_key,
create_workdir_extra_folders,
)
@ -22,6 +22,7 @@ from openpype.lib.avalon_context import (
from openpype.pipeline import (
registered_host,
legacy_io,
Anatomy,
)
from .model import (
WorkAreaFilesModel,
@ -125,7 +126,7 @@ class FilesWidget(QtWidgets.QWidget):
filter_layout.addWidget(published_checkbox, 0)
# Create the Files models
extensions = set(self.host.file_extensions())
extensions = set(self._get_host_extensions())
views_widget = QtWidgets.QWidget(self)
# --- Workarea view ---
@ -452,7 +453,12 @@ class FilesWidget(QtWidgets.QWidget):
def open_file(self, filepath):
host = self.host
if host.has_unsaved_changes():
if isinstance(host, IWorkfileHost):
has_unsaved_changes = host.workfile_has_unsaved_changes()
else:
has_unsaved_changes = host.has_unsaved_changes()
if has_unsaved_changes:
result = self.save_changes_prompt()
if result is None:
# Cancel operation
@ -460,7 +466,10 @@ class FilesWidget(QtWidgets.QWidget):
# Save first if has changes
if result:
current_file = host.current_file()
if isinstance(host, IWorkfileHost):
current_file = host.get_current_workfile()
else:
current_file = host.current_file()
if not current_file:
# If the user requested to save the current scene
# we can't actually automatically do so if the current
@ -471,7 +480,10 @@ class FilesWidget(QtWidgets.QWidget):
return
# Save current scene, continue to open file
host.save_file(current_file)
if isinstance(host, IWorkfileHost):
host.save_workfile(current_file)
else:
host.save_file(current_file)
event_data_before = self._get_event_context_data()
event_data_before["filepath"] = filepath
@ -482,7 +494,10 @@ class FilesWidget(QtWidgets.QWidget):
source="workfiles.tool"
)
self._enter_session()
host.open_file(filepath)
if isinstance(host, IWorkfileHost):
host.open_workfile(filepath)
else:
host.open_file(filepath)
emit_event(
"workfile.open.after",
event_data_after,
@ -524,7 +539,7 @@ class FilesWidget(QtWidgets.QWidget):
filepath = self._get_selected_filepath()
extensions = [os.path.splitext(filepath)[1]]
else:
extensions = self.host.file_extensions()
extensions = self._get_host_extensions()
window = SaveAsDialog(
parent=self,
@ -572,9 +587,14 @@ class FilesWidget(QtWidgets.QWidget):
self.open_file(path)
def _get_host_extensions(self):
if isinstance(self.host, IWorkfileHost):
return self.host.get_workfile_extensions()
return self.host.file_extensions()
def on_browse_pressed(self):
ext_filter = "Work File (*{0})".format(
" *".join(self.host.file_extensions())
" *".join(self._get_host_extensions())
)
kwargs = {
"caption": "Work Files",
@ -632,10 +652,16 @@ class FilesWidget(QtWidgets.QWidget):
self._enter_session()
if not self.published_enabled:
self.host.save_file(filepath)
if isinstance(self.host, IWorkfileHost):
self.host.save_workfile(filepath)
else:
self.host.save_file(filepath)
else:
shutil.copy(src_path, filepath)
self.host.open_file(filepath)
if isinstance(self.host, IWorkfileHost):
self.host.open_workfile(filepath)
else:
self.host.open_file(filepath)
# Create extra folders
create_workdir_extra_folders(