mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
Merge pull request #265 from pypeclub/feature/premiere-workfile-multiroot-fixes
Feature/premiere workfile multiroot fixes
This commit is contained in:
commit
9fee13a58a
5 changed files with 103 additions and 22 deletions
|
|
@ -1,7 +1,8 @@
|
||||||
import os
|
import os
|
||||||
import traceback
|
import traceback
|
||||||
|
from avalon import api, io, lib
|
||||||
from pype.lib import PypeHook
|
from pype.lib import PypeHook
|
||||||
from pype.api import Logger
|
from pype.api import Logger, Anatomy
|
||||||
from pype.hosts.premiere import lib as prlib
|
from pype.hosts.premiere import lib as prlib
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -12,6 +13,7 @@ class PremierePrelaunch(PypeHook):
|
||||||
path to the project by environment variable to Premiere launcher
|
path to the project by environment variable to Premiere launcher
|
||||||
shell script.
|
shell script.
|
||||||
"""
|
"""
|
||||||
|
project_code = None
|
||||||
|
|
||||||
def __init__(self, logger=None):
|
def __init__(self, logger=None):
|
||||||
if not logger:
|
if not logger:
|
||||||
|
|
@ -26,6 +28,33 @@ class PremierePrelaunch(PypeHook):
|
||||||
if not env:
|
if not env:
|
||||||
env = os.environ
|
env = os.environ
|
||||||
|
|
||||||
|
# initialize
|
||||||
|
self._S = api.Session
|
||||||
|
|
||||||
|
# get context variables
|
||||||
|
self._S["AVALON_PROJECT"] = env["AVALON_PROJECT"]
|
||||||
|
self._S["AVALON_ASSET"] = env["AVALON_ASSET"]
|
||||||
|
task = self._S["AVALON_TASK"] = env["AVALON_TASK"]
|
||||||
|
|
||||||
|
# get workfile path
|
||||||
|
anatomy_filled = self.get_anatomy_filled()
|
||||||
|
|
||||||
|
# if anatomy template should have different root for particular task
|
||||||
|
# just add for example > work[conforming]:
|
||||||
|
workfile_search_key = f"work[{task.lower()}]"
|
||||||
|
workfile_key = anatomy_filled.get(
|
||||||
|
workfile_search_key,
|
||||||
|
anatomy_filled.get("work")
|
||||||
|
)
|
||||||
|
workdir = env["AVALON_WORKDIR"] = workfile_key["folder"]
|
||||||
|
|
||||||
|
# create workdir if doesn't exist
|
||||||
|
os.makedirs(workdir, exist_ok=True)
|
||||||
|
self.log.info(f"Work dir is: `{workdir}`")
|
||||||
|
|
||||||
|
# adding project code to env
|
||||||
|
env["AVALON_PROJECT_CODE"] = self.project_code
|
||||||
|
|
||||||
try:
|
try:
|
||||||
__import__("pype.hosts.premiere")
|
__import__("pype.hosts.premiere")
|
||||||
__import__("pyblish")
|
__import__("pyblish")
|
||||||
|
|
@ -36,7 +65,68 @@ class PremierePrelaunch(PypeHook):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Premiere Setup integration
|
# Premiere Setup integration
|
||||||
# importlib.reload(prlib)
|
|
||||||
prlib.setup(env)
|
prlib.setup(env)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def get_anatomy_filled(self):
|
||||||
|
root_path = api.registered_root()
|
||||||
|
project_name = self._S["AVALON_PROJECT"]
|
||||||
|
asset_name = self._S["AVALON_ASSET"]
|
||||||
|
|
||||||
|
io.install()
|
||||||
|
project_entity = io.find_one({
|
||||||
|
"type": "project",
|
||||||
|
"name": project_name
|
||||||
|
})
|
||||||
|
assert project_entity, (
|
||||||
|
"Project '{0}' was not found."
|
||||||
|
).format(project_name)
|
||||||
|
self.log.debug("Collected Project \"{}\"".format(project_entity))
|
||||||
|
|
||||||
|
asset_entity = io.find_one({
|
||||||
|
"type": "asset",
|
||||||
|
"name": asset_name,
|
||||||
|
"parent": project_entity["_id"]
|
||||||
|
})
|
||||||
|
assert asset_entity, (
|
||||||
|
"No asset found by the name '{0}' in project '{1}'"
|
||||||
|
).format(asset_name, project_name)
|
||||||
|
|
||||||
|
project_name = project_entity["name"]
|
||||||
|
self.project_code = project_entity["data"].get("code")
|
||||||
|
|
||||||
|
self.log.info(
|
||||||
|
"Anatomy object collected for project \"{}\".".format(project_name)
|
||||||
|
)
|
||||||
|
|
||||||
|
hierarchy_items = asset_entity["data"]["parents"]
|
||||||
|
hierarchy = ""
|
||||||
|
if hierarchy_items:
|
||||||
|
hierarchy = os.path.join(*hierarchy_items)
|
||||||
|
|
||||||
|
template_data = {
|
||||||
|
"root": root_path,
|
||||||
|
"project": {
|
||||||
|
"name": project_name,
|
||||||
|
"code": self.project_code
|
||||||
|
},
|
||||||
|
"asset": asset_entity["name"],
|
||||||
|
"hierarchy": hierarchy.replace("\\", "/"),
|
||||||
|
"task": self._S["AVALON_TASK"],
|
||||||
|
"ext": "ppro",
|
||||||
|
"version": 1,
|
||||||
|
"username": os.getenv("PYPE_USERNAME", "").strip()
|
||||||
|
}
|
||||||
|
|
||||||
|
avalon_app_name = os.environ.get("AVALON_APP_NAME")
|
||||||
|
if avalon_app_name:
|
||||||
|
application_def = lib.get_application(avalon_app_name)
|
||||||
|
app_dir = application_def.get("application_dir")
|
||||||
|
if app_dir:
|
||||||
|
template_data["app"] = app_dir
|
||||||
|
|
||||||
|
anatomy = Anatomy(project_name)
|
||||||
|
anatomy_filled = anatomy.format_all(template_data).get_solved()
|
||||||
|
|
||||||
|
return anatomy_filled
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
import os
|
|
||||||
from avalon import api as avalon
|
from avalon import api as avalon
|
||||||
from pyblish import api as pyblish
|
from pyblish import api as pyblish
|
||||||
from pype.api import Logger
|
from pype.api import Logger
|
||||||
|
|
|
||||||
|
|
@ -61,15 +61,12 @@ var BatchRenamer = {
|
||||||
var seq = app.project.activeSequence;
|
var seq = app.project.activeSequence;
|
||||||
var metadata = $.pype.getSequencePypeMetadata(seq, true);
|
var metadata = $.pype.getSequencePypeMetadata(seq, true);
|
||||||
|
|
||||||
var startCount = 10;
|
|
||||||
var stepCount = 10;
|
|
||||||
var padding = 3;
|
var padding = 3;
|
||||||
var newItems = {};
|
var newItems = {};
|
||||||
|
var projectCode = data.projectCode
|
||||||
var episode = data.ep;
|
var episode = data.ep;
|
||||||
var episodeSuf = data.epSuffix;
|
var episodeSuf = data.epSuffix;
|
||||||
var shotPref = 'sh';
|
var shotPref = 'sh';
|
||||||
var count = 0;
|
|
||||||
var seqCheck = '';
|
|
||||||
|
|
||||||
for (var c = 0; c < selected.length; c++) {
|
for (var c = 0; c < selected.length; c++) {
|
||||||
// fill in hierarchy if set
|
// fill in hierarchy if set
|
||||||
|
|
@ -79,15 +76,7 @@ var BatchRenamer = {
|
||||||
var sequenceName = name.slice(0, 5);
|
var sequenceName = name.slice(0, 5);
|
||||||
var shotNum = Number(name.slice((name.length - 3), name.length));
|
var shotNum = Number(name.slice((name.length - 3), name.length));
|
||||||
|
|
||||||
// if (sequenceName !== seqCheck) {
|
var newName = projectCode + episode + sequenceName + shotPref + (shotNum).pad(padding);
|
||||||
// seqCheck = sequenceName;
|
|
||||||
// count = 0;
|
|
||||||
// };
|
|
||||||
//
|
|
||||||
// var seqCount = (count * stepCount) + startCount;
|
|
||||||
// count += 1;
|
|
||||||
|
|
||||||
var newName = episode + sequenceName + shotPref + (shotNum).pad(padding);
|
|
||||||
$.pype.log(newName);
|
$.pype.log(newName);
|
||||||
selected[c].clip.name = newName;
|
selected[c].clip.name = newName;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,14 +39,16 @@ var ENV;
|
||||||
<div class="input-group input-group-sm mb-1">
|
<div class="input-group input-group-sm mb-1">
|
||||||
|
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text" id="basic-addon6">Rename targeted text layers<br />
|
<span class="input-group-text" id="basic-addon6">
|
||||||
converts sc010sh020
|
Rename targeted text layers<br />
|
||||||
<br />to lbb201sc010sh020<br />and creates ftrack metadata</span>
|
converts `sc010sh020`<br />
|
||||||
|
to `proj01ep01sc01sh01`<br />
|
||||||
|
and creates ftrack metadata</span>
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<input type="text" name="episode" placeholder="lbb2" aria-label="episode" aria-describedby="basic-addon5" value="" style="width:75px;">
|
<input type="text" name="episode" placeholder="ep01" aria-label="episode" aria-describedby="basic-addon5" value="" style="width:75px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<input type="text" name="ep_suffix" placeholder="nameofepisode" aria-label="Name of episode" aria-describedby="basic-addon5" value="">
|
<input type="text" name="ep_suffix" placeholder="longerEpisodeName" aria-label="Name of episode" aria-describedby="basic-addon5" value="">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ class Pype {
|
||||||
let data = {};
|
let data = {};
|
||||||
data.ep = $('input[name=episode]', $renameId).val();
|
data.ep = $('input[name=episode]', $renameId).val();
|
||||||
data.epSuffix = $('input[name=ep_suffix]', $renameId).val();
|
data.epSuffix = $('input[name=ep_suffix]', $renameId).val();
|
||||||
|
data.projectCode = this.env.AVALON_PROJECT_CODE;
|
||||||
|
|
||||||
if (!data.ep) {
|
if (!data.ep) {
|
||||||
this.csi.evalScript('$.pype.alert_message("' + 'Need to fill episode code' + '")');
|
this.csi.evalScript('$.pype.alert_message("' + 'Need to fill episode code' + '")');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue