Skip to content

Commit

Permalink
Separate injecting context data into instance to `collect_instance_da…
Browse files Browse the repository at this point in the history
…ta.py` to simplify Collectors.

- Change `familyId` to `family`
- Refactor implementation for Integrator from `plugin.py` to `integrate_asset.py` plug-in.
  • Loading branch information
BigRoy committed Jul 5, 2015
1 parent 9691383 commit b6e4d19
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 85 deletions.
51 changes: 1 addition & 50 deletions pyblish_magenta/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,53 +15,4 @@ def temp_dir(self, instance):
extract_dir = tempfile.mkdtemp()
instance.set_data('extractDir', value=extract_dir)

return extract_dir


class Integrator(pyblish.api.Integrator):

def compute_integrate_dir(self, instance):
# Get instance data
data = {'root': instance.data('root'),
'container': instance.data('container', None),
'asset': instance.data('asset')}

family_id = instance.data('familyId')
if not family_id:
raise pyblish.api.ConformError(
"No family id found on instance. Can't resolve asset path.")

# Get asset directory
schema = pyblish_magenta.schema.load()
output_template = "{0}.asset".format(family_id)
dir_path = schema.get(output_template).format(data)

return dir_path

def integrate(self, instance):

# Get the extracted directory
extract_dir = instance.data('extractDir')
if not extract_dir:
raise pyblish.api.ConformError("Cannot integrate if no `extractDir` "
"temporary directory found.")

# Define the integrate directory
integrate_dir = self.compute_integrate_dir(instance)
instance.set_data('integrateDir', value=integrate_dir)

# Copy the files/directories from extract directory to the integrate directory
self.log.info("Integrating extracted files for '{0}'..".format(instance))
if os.path.isdir(integrate_dir):
self.log.info("Existing directory found, merging..")
for fname in os.listdir(extract_dir):
abspath = os.path.join(extract_dir, fname)
commit_path = os.path.join(integrate_dir, fname)
shutil.copy(abspath, commit_path)
else:
self.log.info("No existing directory found, creating..")
shutil.copytree(extract_dir, integrate_dir)

self.log.info("Integrated to directory '{0}'".format(integrate_dir))

return integrate_dir
return extract_dir
8 changes: 3 additions & 5 deletions pyblish_magenta/plugins/collect_asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,9 @@ def process(self, context):
schema = pyblish_magenta.schema.load()
data, template = schema.parse(work_file)

# Note that this the family id retrieved from the template.
# This is not a one-to-one copy of the 'family' used in the plug-ins.
# That's why we store this information as 'familyId' to avoid confusion
family_id = template.name.split('.')[0]
context.set_data('familyId', family_id)
# Retrieve the family from the parsed template
family = template.name.split('.')[0]
context.set_data('family', family)

# Store the project root's path
root = data['root']
Expand Down
21 changes: 21 additions & 0 deletions pyblish_magenta/plugins/collect_instance_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import pyblish.api


@pyblish.api.log
class CollectInstanceData(pyblish.api.Collector):
"""Inject all instances with the Context's asset data.
This transfers data from the Context to each Instance.
"""
order = pyblish.api.Collector.order + 0.49

def process(self, context, instance):

for key in ['root', 'asset', 'container', 'workFile']:

value = context.data(key, None)
if value is not None:
instance.set_data(key, value)
else:
self.log.debug("Context does not have data '{0}'".format(key))
25 changes: 5 additions & 20 deletions pyblish_magenta/plugins/collect_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,17 @@ def process(self, context):
# Check whether to select a model
# -------------------------------
# Ensure we're in the modeling context
family_id = context.data('familyId')
if not family_id or family_id != 'model':
family = context.data('family')
if not family or family != 'model':
return

missing_data = []

root = context.data('root')
if not root:
self.log.error("Missing `root` data for asset...")
missing_data.append('root')

asset = context.data('asset')
if not asset:
self.log.error("Missing `asset` data for asset...")
missing_data.append('asset')

if missing_data:
self.log.error("Asset data incomplete. Missing: {0}".format(missing_data))
self.log.error("Missing `asset` data in Context")
return

missing_data = []

# Scene Geometry
# --------------
# Get the root transform
Expand Down Expand Up @@ -76,12 +67,6 @@ def process(self, context):
# Create Asset
# ------------
instance = context.create_instance(name=asset,
familyId=family_id,
family='model')
for node in nodes:
instance.add(node)

# Set instance pipeline data
instance.set_data("root", root)
instance.set_data("workFile", context.data('workFile'))
instance.set_data("asset", asset)
8 changes: 0 additions & 8 deletions pyblish_magenta/plugins/collect_review.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,6 @@ def process(self, context):
instance = context.create_instance(name=name, family="review")
instance.add(camera)

# Set pipeline data
#data = schema.get("model.dev").parse(scene_name)
#instance.set_data("root", data["root"])
#instance.set_data("source_file", scene_name)
#instance.set_data("asset", data["asset"])
#instance.set_data("container", data["container"])
instance.set_data("familyId", context.data('familyId'))

self.log.info("Found: {0}".format(camera))

attrs = cmds.listAttr(camera, userDefined=True) or list()
Expand Down
54 changes: 52 additions & 2 deletions pyblish_magenta/plugins/integrate_asset.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,58 @@
import pyblish_magenta.plugin
import os
import shutil

import pyblish.api
import pyblish_magenta

class IntegrateAsset(pyblish_magenta.plugin.Integrator):

class IntegrateAsset(pyblish.api.Integrator):
label = "Integrate Asset"

def process(self, instance):
self.integrate(instance)

def compute_integrate_dir(self, instance):
# Get instance data
data = {'root': instance.data('root'),
'container': instance.data('container', None),
'asset': instance.data('asset')}

family = instance.data('family')
if not family:
raise pyblish.api.ConformError(
"No family found on instance. Can't resolve asset path.")

# Get asset directory
schema = pyblish_magenta.schema.load()
output_template = "{0}.asset".format(family)
dir_path = schema.get(output_template).format(data)

return dir_path

def integrate(self, instance):

# Get the extracted directory
extract_dir = instance.data('extractDir')
if not extract_dir:
raise pyblish.api.ConformError("Cannot integrate if no `extractDir` "
"temporary directory found.")

# Define the integrate directory
integrate_dir = self.compute_integrate_dir(instance)
instance.set_data('integrateDir', value=integrate_dir)

# Copy the files/directories from extract directory to the integrate directory
self.log.info("Integrating extracted files for '{0}'..".format(instance))
if os.path.isdir(integrate_dir):
self.log.info("Existing directory found, merging..")
for fname in os.listdir(extract_dir):
abspath = os.path.join(extract_dir, fname)
commit_path = os.path.join(integrate_dir, fname)
shutil.copy(abspath, commit_path)
else:
self.log.info("No existing directory found, creating..")
shutil.copytree(extract_dir, integrate_dir)

self.log.info("Integrated to directory '{0}'".format(integrate_dir))

return integrate_dir

0 comments on commit b6e4d19

Please sign in to comment.