mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge remote-tracking branch 'origin/develop' into 3.0/refactoring
This commit is contained in:
commit
f9c9214e35
9 changed files with 191 additions and 32 deletions
14
build.ps1
14
build.ps1
|
|
@ -26,13 +26,13 @@ function Exit-WithCode($exitcode) {
|
|||
$art = @'
|
||||
|
||||
|
||||
____________
|
||||
/ \ __ \
|
||||
\ \ \/_\ \
|
||||
\ \ _____/ ______
|
||||
\ \ \___// \ \
|
||||
\ \____\ \ \_____\
|
||||
\/_____/ \/______/ PYPE Club .
|
||||
____________
|
||||
/\ ___ \
|
||||
\ \ \/_\ \
|
||||
\ \ _____/ ______ ___ ___ ___
|
||||
\ \ \___/ /\ \ \ \\ \\ \
|
||||
\ \____\ \ \_____\ \__\\__\\__\
|
||||
\/____/ \/_____/ . PYPE Club .
|
||||
|
||||
'@
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from .tools import validate_path_string
|
|||
|
||||
class InstallDialog(QtWidgets.QDialog):
|
||||
_size_w = 400
|
||||
_size_h = 300
|
||||
_size_h = 400
|
||||
_path = None
|
||||
_controls_disabled = False
|
||||
|
||||
|
|
@ -72,21 +72,8 @@ class InstallDialog(QtWidgets.QDialog):
|
|||
# --------------------------------------------------------------------
|
||||
|
||||
self.pype_path_label = QtWidgets.QLabel(
|
||||
"""This can be:
|
||||
<ul>
|
||||
<li>
|
||||
<b>Path to studio location<b>
|
||||
<p>This will install and configure Pype from path provided
|
||||
by your studio. You need to be inside the studio or use
|
||||
vpn or common cloud storage path.</p></li>
|
||||
<li>
|
||||
<b>Database connection string</b>
|
||||
<p>This is used to determine Pype and its settings directly
|
||||
from database.</p></li>
|
||||
<li>
|
||||
<b>Pype Token</b>
|
||||
<p>This feature is coming soon.</p></li>
|
||||
</ul>
|
||||
"""This can be either <b>Path to studio location</b>
|
||||
or <b>Database connection string</b> or <b>Pype Token</b>.
|
||||
<p>
|
||||
Leave it empty if you want to use Pype version that come with this
|
||||
installation.
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ from avalon.vendor import Qt
|
|||
import avalon.tools.sceneinventory
|
||||
import pyblish.api
|
||||
from pype import lib
|
||||
from pype.api import config
|
||||
|
||||
|
||||
signature = str(uuid4())
|
||||
|
|
@ -53,7 +54,7 @@ def get_asset_settings():
|
|||
resolution_width = asset_data.get("resolutionWidth")
|
||||
resolution_height = asset_data.get("resolutionHeight")
|
||||
|
||||
return {
|
||||
scene_data = {
|
||||
"fps": fps,
|
||||
"frameStart": frame_start,
|
||||
"frameEnd": frame_end,
|
||||
|
|
@ -61,6 +62,15 @@ def get_asset_settings():
|
|||
"resolutionHeight": resolution_height
|
||||
}
|
||||
|
||||
harmony_config = config.get_presets().["harmony"]["general"]
|
||||
|
||||
skip_resolution_check = harmony_config.get(["skip_resolution_check"], [])
|
||||
if os.getenv('AVALON_TASK') in skip_resolution_check:
|
||||
scene_data.pop("resolutionWidth")
|
||||
scene_data.pop("resolutionHeight")
|
||||
|
||||
return scene_data
|
||||
|
||||
|
||||
def ensure_scene_settings():
|
||||
settings = get_asset_settings()
|
||||
|
|
|
|||
163
pype/plugins/nuke/load/load_gizmo.py
Normal file
163
pype/plugins/nuke/load/load_gizmo.py
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
from avalon import api, style, io
|
||||
import nuke
|
||||
from avalon.nuke import lib as anlib
|
||||
from avalon.nuke import containerise, update_container
|
||||
|
||||
|
||||
class LoadGizmo(api.Loader):
|
||||
"""Loading nuke Gizmo"""
|
||||
|
||||
representations = ["gizmo"]
|
||||
families = ["gizmo"]
|
||||
|
||||
label = "Load Gizmo"
|
||||
order = 0
|
||||
icon = "dropbox"
|
||||
color = style.colors.light
|
||||
node_color = "0x75338eff"
|
||||
|
||||
def load(self, context, name, namespace, data):
|
||||
"""
|
||||
Loading function to get Gizmo into node graph
|
||||
|
||||
Arguments:
|
||||
context (dict): context of version
|
||||
name (str): name of the version
|
||||
namespace (str): asset name
|
||||
data (dict): compulsory attribute > not used
|
||||
|
||||
Returns:
|
||||
nuke node: containerised nuke node object
|
||||
"""
|
||||
|
||||
# get main variables
|
||||
version = context['version']
|
||||
version_data = version.get("data", {})
|
||||
vname = version.get("name", None)
|
||||
first = version_data.get("frameStart", None)
|
||||
last = version_data.get("frameEnd", None)
|
||||
namespace = namespace or context['asset']['name']
|
||||
colorspace = version_data.get("colorspace", None)
|
||||
object_name = "{}_{}".format(name, namespace)
|
||||
|
||||
# prepare data for imprinting
|
||||
# add additional metadata from the version to imprint to Avalon knob
|
||||
add_keys = ["frameStart", "frameEnd", "handleStart", "handleEnd",
|
||||
"source", "author", "fps"]
|
||||
|
||||
data_imprint = {"frameStart": first,
|
||||
"frameEnd": last,
|
||||
"version": vname,
|
||||
"colorspaceInput": colorspace,
|
||||
"objectName": object_name}
|
||||
|
||||
for k in add_keys:
|
||||
data_imprint.update({k: version_data[k]})
|
||||
|
||||
# getting file path
|
||||
file = self.fname.replace("\\", "/")
|
||||
|
||||
# adding nodes to node graph
|
||||
# just in case we are in group lets jump out of it
|
||||
nuke.endGroup()
|
||||
|
||||
with anlib.maintained_selection():
|
||||
# add group from nk
|
||||
nuke.nodePaste(file)
|
||||
|
||||
GN = nuke.selectedNode()
|
||||
|
||||
GN["name"].setValue(object_name)
|
||||
|
||||
return containerise(
|
||||
node=GN,
|
||||
name=name,
|
||||
namespace=namespace,
|
||||
context=context,
|
||||
loader=self.__class__.__name__,
|
||||
data=data_imprint)
|
||||
|
||||
def update(self, container, representation):
|
||||
"""Update the Loader's path
|
||||
|
||||
Nuke automatically tries to reset some variables when changing
|
||||
the loader's path to a new file. These automatic changes are to its
|
||||
inputs:
|
||||
|
||||
"""
|
||||
|
||||
# get main variables
|
||||
# Get version from io
|
||||
version = io.find_one({
|
||||
"type": "version",
|
||||
"_id": representation["parent"]
|
||||
})
|
||||
# get corresponding node
|
||||
GN = nuke.toNode(container['objectName'])
|
||||
|
||||
file = api.get_representation_path(representation).replace("\\", "/")
|
||||
name = container['name']
|
||||
version_data = version.get("data", {})
|
||||
vname = version.get("name", None)
|
||||
first = version_data.get("frameStart", None)
|
||||
last = version_data.get("frameEnd", None)
|
||||
namespace = container['namespace']
|
||||
colorspace = version_data.get("colorspace", None)
|
||||
object_name = "{}_{}".format(name, namespace)
|
||||
|
||||
add_keys = ["frameStart", "frameEnd", "handleStart", "handleEnd",
|
||||
"source", "author", "fps"]
|
||||
|
||||
data_imprint = {"representation": str(representation["_id"]),
|
||||
"frameStart": first,
|
||||
"frameEnd": last,
|
||||
"version": vname,
|
||||
"colorspaceInput": colorspace,
|
||||
"objectName": object_name}
|
||||
|
||||
for k in add_keys:
|
||||
data_imprint.update({k: version_data[k]})
|
||||
|
||||
# adding nodes to node graph
|
||||
# just in case we are in group lets jump out of it
|
||||
nuke.endGroup()
|
||||
|
||||
with anlib.maintained_selection():
|
||||
xpos = GN.xpos()
|
||||
ypos = GN.ypos()
|
||||
avalon_data = anlib.get_avalon_knob_data(GN)
|
||||
nuke.delete(GN)
|
||||
# add group from nk
|
||||
nuke.nodePaste(file)
|
||||
|
||||
GN = nuke.selectedNode()
|
||||
anlib.set_avalon_knob_data(GN, avalon_data)
|
||||
GN.setXYpos(xpos, ypos)
|
||||
GN["name"].setValue(object_name)
|
||||
|
||||
# get all versions in list
|
||||
versions = io.find({
|
||||
"type": "version",
|
||||
"parent": version["parent"]
|
||||
}).distinct('name')
|
||||
|
||||
max_version = max(versions)
|
||||
|
||||
# change color of node
|
||||
if version.get("name") not in [max_version]:
|
||||
GN["tile_color"].setValue(int("0xd88467ff", 16))
|
||||
else:
|
||||
GN["tile_color"].setValue(int(self.node_color, 16))
|
||||
|
||||
self.log.info("udated to version: {}".format(version.get("name")))
|
||||
|
||||
return update_container(GN, data_imprint)
|
||||
|
||||
def switch(self, container, representation):
|
||||
self.update(container, representation)
|
||||
|
||||
def remove(self, container):
|
||||
from avalon.nuke import viewer_update_and_undo_stop
|
||||
node = nuke.toNode(container['objectName'])
|
||||
with viewer_update_and_undo_stop():
|
||||
nuke.delete(node)
|
||||
|
|
@ -102,7 +102,6 @@ class LoadGizmoInputProcess(api.Loader):
|
|||
GN = nuke.toNode(container['objectName'])
|
||||
|
||||
file = api.get_representation_path(representation).replace("\\", "/")
|
||||
context = representation["context"]
|
||||
name = container['name']
|
||||
version_data = version.get("data", {})
|
||||
vname = version.get("name", None)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class CollectGizmo(pyblish.api.InstancePlugin):
|
|||
|
||||
# get version
|
||||
version = pype.get_version_from_path(nuke.root().name())
|
||||
instance.data['version'] = version
|
||||
instance.data['version'] = int(version)
|
||||
|
||||
# Add version data to instance
|
||||
version_data = {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ class CollectNukeInstances(pyblish.api.ContextPlugin):
|
|||
except Exception as E:
|
||||
self.log.warning(E)
|
||||
|
||||
|
||||
# get data from avalon knob
|
||||
self.log.debug("node[name]: {}".format(node['name'].value()))
|
||||
avalon_knob_data = get_avalon_knob_data(node, ["avalon:", "ak:"])
|
||||
|
|
@ -60,7 +59,6 @@ class CollectNukeInstances(pyblish.api.ContextPlugin):
|
|||
|
||||
families.append(family)
|
||||
|
||||
|
||||
# except disabled nodes but exclude backdrops in test
|
||||
if ("nukenodes" not in family) and (node["disable"].value()):
|
||||
continue
|
||||
|
|
@ -75,8 +73,7 @@ class CollectNukeInstances(pyblish.api.ContextPlugin):
|
|||
# Add all nodes in group instances.
|
||||
if node.Class() == "Group":
|
||||
# only alter families for render family
|
||||
if "write" in families_ak:
|
||||
|
||||
if "write" == families_ak:
|
||||
if node["render"].value():
|
||||
self.log.info("flagged for render")
|
||||
add_family = "{}.local".format("render")
|
||||
|
|
@ -97,7 +94,6 @@ class CollectNukeInstances(pyblish.api.ContextPlugin):
|
|||
|
||||
self.log.debug("__ families: `{}`".format(families))
|
||||
|
||||
|
||||
# Get format
|
||||
format = root['format'].value()
|
||||
resolution_width = format.width()
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ M_ENVIRONMENT_KEY = "__environment_keys__"
|
|||
M_POP_KEY = "__pop_key__"
|
||||
|
||||
# Folder where studio overrides are stored
|
||||
STUDIO_OVERRIDES_PATH = os.environ["PYPE_PROJECT_CONFIGS"]
|
||||
STUDIO_OVERRIDES_PATH = os.environ.get("PYPE_PROJECT_CONFIGS", "")
|
||||
|
||||
# File where studio's system overrides are stored
|
||||
SYSTEM_SETTINGS_KEY = "system_settings"
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
<<<<<<< HEAD
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring Pype version."""
|
||||
__version__ = "3.0.0"
|
||||
=======
|
||||
__version__ = "2.12.3"
|
||||
>>>>>>> origin/develop
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue