上傳 Avalon 工作檔至 NCHC 算圖
===
```python
"""
Upload scene file and loaded representation to NCHC
File will be placed at Avalon Work dir
"""
import os
import re
import getpass
import subprocess
from maya import cmds
from avalon import api
from reveries.maya import capsule
def process(inputs):
popen = subprocess.Popen(inputs,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
shell=True)
output, _ = popen.communicate()
print(output)
def is_versioned_path(path):
pattern = (
".*[/\\\]publish" # publish root
"[/\\\]texture.*" # subset dir
"[/\\\]v[0-9]{3}" # version dir
"[/\\\]TexturePack" # representation dir
)
return bool(re.match(pattern, path))
project_name = api.Session["AVALON_PROJECT"]
# Upload loaded representations
host = api.registered_host()
processed = set()
for container in host.ls():
container_node = container["objectName"]
id = container["representation"]
if id not in processed:
process(["upload_repr_to_nchc", id])
processed.add(id)
print("\nAll dependnies uploaded.\n")
# Upload stray files...
stray = ["upload_files_to_nchc"]
for file_node in cmds.ls(type="file"):
file_path = cmds.getAttr(file_node + ".fileTextureName")
if not is_versioned_path(file_path):
if not any(file_path.startswith(root) for root in ["O:", "P:", "Q:"]):
continue
if project_name not in file_path:
continue
stray.append(file_path)
process(stray)
print("\nAll stray files uploaded.\n")
# Unlock colorSpace...
with capsule.ref_edit_unlock():
cmds.setAttr("*:*.colorSpace", lock=False)
# Upload scene file
scene = cmds.file(query=True, sceneName=True)
scene_dir, scene_fname = os.path.split(scene)
scene_fname, ext = scene_fname.rsplit(".")
safe_name = scene_dir + "/" + scene_fname + "_" + getpass.getuser() + "." + ext
cmds.file(rename=safe_name)
cmds.file(save=True, force=True)
process(["upload_scene_to_nchc", safe_name])
```