Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
- Add sourcefile extractor
- Repair ability to include multiple representations
- Round up, shape up, and get ready for tests on virtual machines.
  • Loading branch information
mottosso committed Sep 26, 2016
1 parent d953a83 commit 4198ba0
Show file tree
Hide file tree
Showing 12 changed files with 236 additions and 429 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
dist
cover
.coverage
user
stage
shared
478 changes: 138 additions & 340 deletions README.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions pyblish_starter/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
)

from .lib import (
format_user_dir,
format_staging_dir,
format_shared_dir,
format_version,

Expand All @@ -57,7 +57,7 @@

"deregister_plugins",

"format_user_dir",
"format_staging_dir",
"format_shared_dir",
"format_version",

Expand Down
4 changes: 2 additions & 2 deletions pyblish_starter/lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ def format_shared_dir(root):
return os.path.join(root, "shared")


def format_user_dir(root, name):
dirname = os.path.join(root, "user", time(), name)
def format_staging_dir(root, name):
dirname = os.path.join(root, "stage", time(), name)
return dirname


Expand Down
43 changes: 0 additions & 43 deletions pyblish_starter/maya/lib.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,6 @@
from maya import cmds, mel


def hierarchy_from_string(hierarchy):
parents = {}

for line in hierarchy.split("\n"):
if not line:
continue

name = line.strip()
padding = len(line[:-len(name)])
parents[padding] = name

name = cmds.createNode("transform", name=name)

for parent in sorted(parents):
if parent < padding:
cmds.parent(name, parents[parent])
break

# Return assembly
return parents[0]


def outmesh(shape, name=None):
"""Construct a new shape with a connection to source.inMesh
Arguments:
shape (str): Long name of source shape
name (str, optional): Default "outMesh1"
Returns:
transform of new shape
"""

outmesh = cmds.createNode("mesh")
cmds.connectAttr(shape + ".outMesh", outmesh + ".inMesh")
outmesh = cmds.listRelatives(outmesh, parent=True)[0]
outmesh = cmds.rename(outmesh, name or "outMesh1")
cmds.sets(outmesh, addElement="initialShadingGroup")

return outmesh


def export_alembic(nodes, file, frame_range=None, uv_write=True):
"""Wrap native MEL command with limited set of arguments
Expand Down
12 changes: 4 additions & 8 deletions pyblish_starter/maya/pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from .. import pipeline
from ..vendor.Qt import QtWidgets, QtGui, QtCore

from maya import cmds, mel
from maya import cmds

from . import lib

Expand Down Expand Up @@ -113,7 +113,8 @@ def load(asset, version=-1):
try:
representation = next(
rep for rep in version["representations"]
if rep["format"] in supported_formats
if rep["format"] in supported_formats and
rep["path"] != "{dirname}/source{format}"
)

except StopIteration:
Expand Down Expand Up @@ -168,8 +169,6 @@ def create(name, family):

assert item is not None, "{0} is not a valid family".format(family)

print("%s + %s" % (pipeline.registered_data(), item.get("data", [])))

data = pipeline.registered_data() + item.get("data", [])

# Convert to dictionary
Expand All @@ -193,12 +192,8 @@ def create(name, family):
raise KeyError("Invalid dynamic property: %s" % e)

lib.imprint(instance, data)

cmds.select(instance, noExpand=True)

# Display instance attributes to user
# mel.eval("updateEditorToggleCheckboxes; copyAEWindow;")

return instance


Expand All @@ -223,6 +218,7 @@ def containerise(name, nodes, version):
("author", version["author"]),
("loader", self.__name__),
("time", version["time"]),
("version", version["version"]),
("source", version["source"]),
("comment", version.get("comment", ""))
]
Expand Down
11 changes: 6 additions & 5 deletions pyblish_starter/plugins/extract_animation.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def process(self, instance):
cmds.loadPlugin("AbcExport.mll", quiet=True)

self.log.info("Extracting animation..")
dirname = api.format_user_dir(
dirname = api.format_staging_dir(
root=instance.context.data["workspaceDir"],
name=instance.data["name"])

Expand All @@ -46,9 +46,10 @@ def process(self, instance):
)

# Store reference for integration
instance.data.update({
"userDir": dirname,
"filename": filename,
})
if "files" not in instance.data:
instance.data["files"] = list()

instance.data["files"].append(filename)
instance.data["stagingDir"] = dirname

self.log.info("Extracted {instance} to {dirname}".format(**locals()))
11 changes: 6 additions & 5 deletions pyblish_starter/plugins/extract_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def process(self, instance):
from pyblish_starter import api
from pyblish_maya import maintained_selection

dirname = api.format_user_dir(
dirname = api.format_staging_dir(
root=instance.context.data["workspaceDir"],
name=instance.data["name"])

Expand Down Expand Up @@ -50,9 +50,10 @@ def process(self, instance):
constructionHistory=False)

# Store reference for integration
instance.data.update({
"userDir": dirname,
"filename": filename,
})
if "files" not in instance.data:
instance.data["files"] = list()

instance.data["files"].append(filename)
instance.data["stagingDir"] = dirname

self.log.info("Extracted {instance} to {path}".format(**locals()))
11 changes: 6 additions & 5 deletions pyblish_starter/plugins/extract_rig.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def process(self, instance):
from pyblish_starter import api
from pyblish_maya import maintained_selection

dirname = api.format_user_dir(
dirname = api.format_staging_dir(
root=instance.context.data["workspaceDir"],
name=instance.data["name"])

Expand All @@ -46,9 +46,10 @@ def process(self, instance):
constructionHistory=True)

# Store reference for integration
instance.data.update({
"userDir": dirname,
"filename": filename,
})
if "files" not in instance.data:
instance.data["files"] = list()

instance.data["files"].append(filename)
instance.data["stagingDir"] = dirname

self.log.info("Extracted {instance} to {path}".format(**locals()))
50 changes: 50 additions & 0 deletions pyblish_starter/plugins/extract_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import pyblish.api


class ExtractStarterSource(pyblish.api.InstancePlugin):
"""Extract copy of working file at time of publish"""

label = "Starter Source"
order = pyblish.api.ExtractorOrder
hosts = ["maya"]
families = [
"starter.model",
"starter.rig",
"starter.animation",
]

def process(self, instance):
import os
from maya import cmds
from pyblish_starter import api

dirname = api.format_staging_dir(
root=instance.context.data["workspaceDir"],
name=instance.data["name"])

try:
os.makedirs(dirname)
except OSError:
pass

filename = "source.ma"

path = os.path.join(dirname, filename)

# Perform extraction
self.log.info("Performing extraction..")
cmds.file(path,
force=True,
typ="mayaAscii",
exportAll=True,
preserveReferences=False,
constructionHistory=True)

# Store reference for integration
if "files" not in instance.data:
instance.data["files"] = list()

instance.data["files"].append(filename)
instance.data["stagingDir"] = dirname

self.log.info("Extracted {instance} to {path}".format(**locals()))
38 changes: 21 additions & 17 deletions pyblish_starter/plugins/integrate_asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ def process(self, instance):
# ^
# |
#
userdir = instance.data.get("userDir")
assert userdir, (
stagingdir = instance.data.get("stagingDir")
assert stagingdir, (
"Incomplete instance \"%s\": "
"Missing reference to user directory."
"Missing reference to staging area."
% instance
)

Expand All @@ -91,11 +91,12 @@ def process(self, instance):
# | |
# |_________|
#
fname = os.path.join(userdir, ".metadata.json")
fname = os.path.join(stagingdir, ".metadata.json")

try:
with open(fname) as f:
metadata = json.load(f)

except IOError:
metadata = {
"schema": "pyblish-starter:version-1.0",
Expand All @@ -108,21 +109,24 @@ def process(self, instance):
"author": context.data["user"],

# Collected by pyblish-maya
"source": os.path.relpath(
context.data["currentFile"],
api.root()
"source": os.path.join(
"{root}",
os.path.relpath(
context.data["currentFile"],
api.root()
)
),
}

filename = instance.data["filename"]
name, ext = os.path.splitext(filename)
metadata["representations"].append(
{
"schema": "pyblish-starter:representation-1.0",
"format": ext,
"path": "{dirname}/%s{format}" % name
}
)
for filename in instance.data.get("files", list()):
name, ext = os.path.splitext(filename)
metadata["representations"].append(
{
"schema": "pyblish-starter:representation-1.0",
"format": ext,
"path": "{dirname}/%s{format}" % name
}
)

# Write to disk
# _
Expand All @@ -141,7 +145,7 @@ def process(self, instance):
# this way, if validation fails, the data can be
# inspected by hand from within the user directory.
api.schema.validate(metadata, "version")
shutil.copytree(userdir, versiondir)
shutil.copytree(stagingdir, versiondir)

self.log.info("Successfully integrated \"%s\" to \"%s\"" % (
instance, versiondir))
1 change: 0 additions & 1 deletion pyblish_starter/tools/loader/app.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import sys
import contextlib

from ...vendor.Qt import QtWidgets, QtCore
from ... import api
Expand Down

0 comments on commit 4198ba0

Please sign in to comment.