Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #270 from tokejepsen/2.x/feature/harmony_validate_…
Browse files Browse the repository at this point in the history
…scene_settings

Validate scene settings.
  • Loading branch information
mkolar authored Jun 16, 2020
2 parents 9820552 + 2c398c0 commit 3ca9c8c
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 37 deletions.
82 changes: 45 additions & 37 deletions pype/hosts/harmony/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,64 @@
from pype import lib


def ensure_scene_settings():
def set_scene_settings(settings):
func = """function func(args)
{
if (args[0]["fps"])
{
scene.setFrameRate(args[0]["fps"]);
}
if (args[0]["frameStart"] && args[0]["frameEnd"])
{
var duration = args[0]["frameEnd"] - args[0]["frameStart"] + 1
if (frame.numberOf() > duration)
{
frame.remove(
duration, frame.numberOf() - duration
);
}
if (frame.numberOf() < duration)
{
frame.insert(
duration, duration - frame.numberOf()
);
}
scene.setStartFrame(1);
scene.setStopFrame(duration);
}
if (args[0]["resolutionWidth"] && args[0]["resolutionHeight"])
{
scene.setDefaultResolution(
args[0]["resolutionWidth"], args[0]["resolutionHeight"], 41.112
)
}
}
func
"""
harmony.send({"function": func, "args": [settings]})


def get_asset_settings():
asset_data = lib.get_asset()["data"]
fps = asset_data.get("fps")
frame_start = asset_data.get("frameStart")
frame_end = asset_data.get("frameEnd")
resolution_width = asset_data.get("resolutionWidth")
resolution_height = asset_data.get("resolutionHeight")

settings = {
return {
"fps": fps,
"frameStart": frame_start,
"frameEnd": frame_end,
"resolutionWidth": resolution_width,
"resolutionHeight": resolution_height
}


def ensure_scene_settings():
settings = get_asset_settings()

invalid_settings = []
valid_settings = {}
for key, value in settings.items():
Expand All @@ -47,41 +89,7 @@ def ensure_scene_settings():
# Garbage collect QApplication.
del app

func = """function func(args)
{
if (args[0]["fps"])
{
scene.setFrameRate(args[0]["fps"]);
}
if (args[0]["frameStart"] && args[0]["frameEnd"])
{
var duration = args[0]["frameEnd"] - args[0]["frameStart"] + 1
if (frame.numberOf() > duration)
{
frame.remove(
duration, frame.numberOf() - duration
);
}
if (frame.numberOf() < duration)
{
frame.insert(
duration, duration - frame.numberOf()
);
}
scene.setStartFrame(1);
scene.setStopFrame(duration);
}
if (args[0]["resolutionWidth"] && args[0]["resolutionHeight"])
{
scene.setDefaultResolution(
args[0]["resolutionWidth"], args[0]["resolutionHeight"], 41.112
)
}
}
func
"""
harmony.send({"function": func, "args": [valid_settings]})
set_scene_settings(valid_settings)


def install():
Expand Down
60 changes: 60 additions & 0 deletions pype/plugins/harmony/publish/validate_scene_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import json

import pyblish.api

import avalon.harmony
import pype.hosts.harmony


class ValidateSceneSettingsRepair(pyblish.api.Action):
"""Repair the instance."""

label = "Repair"
icon = "wrench"
on = "failed"

def process(self, context, plugin):
pype.hosts.harmony.set_scene_settings(
pype.hosts.harmony.get_asset_settings()
)


class ValidateSceneSettings(pyblish.api.InstancePlugin):
"""Ensure the scene settings are in sync with database."""

order = pyblish.api.ValidatorOrder
label = "Validate Scene Settings"
families = ["workfile"]
hosts = ["harmony"]
actions = [ValidateSceneSettingsRepair]

def process(self, instance):
expected_settings = pype.hosts.harmony.get_asset_settings()

func = """function func()
{
return {
"fps": scene.getFrameRate(),
"frameStart": scene.getStartFrame(),
"frameEnd": scene.getStopFrame(),
"resolutionWidth": scene.defaultResolutionX(),
"resolutionHeight": scene.defaultResolutionY()
};
}
func
"""
current_settings = avalon.harmony.send({"function": func})["result"]

invalid_settings = []
for key, value in expected_settings.items():
if value != current_settings[key]:
invalid_settings.append({
"name": key,
"expected": value,
"current": current_settings[key]
})

msg = "Found invalid settings:\n{}".format(
json.dumps(invalid_settings, sort_keys=True, indent=4)
)
assert not invalid_settings, msg

0 comments on commit 3ca9c8c

Please sign in to comment.