def temp_file(scene, suffix=""):
    """ Return a path to a config file stored in a temp dir according to OS.
		The filename is derived from the 'scene' parameter.
		We add the current system username as a prefix to keep the filename
		unique, to prevent permission errors arising if a different user
		attempts to submit the same file.
	"""
    if os.path.isfile(scene):
        scene_file = os.path.basename(scene)
        prefix = os_wrapper.sanitize(getpass.getuser(), replace='_') + '_'
        settings_file = prefix + os_wrapper.sanitize(scene_file,
                                                     replace='_') + suffix

        return os.path.join(tempfile.gettempdir(), settings_file)

    else:
        return False
Beispiel #2
0
	def loadReplaceStr(self, item=None, column=0):
		""" Copies the selected file name prefix to the 'Replace' text field.
			Non-alphanumeric characters will be replaced with underscores.
		"""
		if not item:
			item = self.ui.taskList_treeWidget.selectedItems()[0]

		text = item.text(self.header("Prefix"))
		text = os_wrapper.sanitize(text, pattern=r'[^\w\.-]', replace='_')

		if self.ui.replace_comboBox.findText(text) == -1:
			self.ui.replace_comboBox.insertItem(0, text)
		self.ui.replace_comboBox.setCurrentIndex(self.ui.replace_comboBox.findText(text))
Beispiel #3
0
def settings_file(scene, suffix=""):
	""" Determine the path to the settings file based on the full path of the
		scene file. N.B. This function is duplicated in render_submit.py
	"""
	if os.path.isfile(scene):
		scene_dir, scene_file = os.path.split(scene)
		# settings_dir = os.path.join(scene_dir, os.environ['IC_METADATA'])
		settings_file = os_wrapper.sanitize(scene_file, replace='_') + suffix

		# # Create settings directory if it doesn't exist
		# if not os.path.isdir(settings_dir):
		# 	os_wrapper.createDir(settings_dir)

		# return os.path.join(settings_dir, settings_file)
		return os.path.join('/var/tmp', settings_file)  # temp - linux only

	else:
		return False
Beispiel #4
0
def publish(pblTo, slShot, nodeType, textures, pblNotes):

    # Get selection
    objLs = mc.ls(sl=True)

    # Check item count
    if not pblChk.itemCount(objLs):
        return

    # Define main variables
    assetType = '%s_node' % nodeType
    subsetName = mc.nodeType(objLs[0])
    prefix = ''
    convention = objLs[0]
    suffix = '_node'
    fileType = 'mayaAscii'
    extension = 'ma'

    # Check for illegal characters
    cleanObj = os_wrapper.sanitize(convention)
    if cleanObj != convention:
        verbose.illegalCharacters(convention)
        return

    # Check if asset to publish is a set
    if mc.nodeType(convention) == 'objectSet':
        verbose.noSetsPbl()
        return

    # Check if asset to publish is an icSet
    if mayaOps.chkIcDataSet(convention):
        verbose.noICSetsPbl()
        return

    # Check if asset to publish is referenced
    if mc.referenceQuery(convention, inr=True):
        verbose.noRefPbl()
        return

    # Process asset publish options
    assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName,
                                                    assetType, prefix,
                                                    convention, suffix)

    # Add shot name to assetPblName if asset is being publish to a shot
    # Determining publish env var for relative directory
    if pblTo != os.environ['IC_JOBPUBLISHDIR']:
        assetPblName += '_%s' % slShot

    # Version control
    version = '%s' % vCtrl.version(pblDir)
    #	if approved:
    #		version += '_apv'

    # Confirmation dialog
    dialogTitle = 'Publishing %s' % convention
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (
        assetPblName, version, subsetName, pblNotes)
    dialog = prompt.dialog()
    if not dialog.display(dialogMsg, dialogTitle):
        return

    # Publishing
    try:
        verbose.pblFeed(begin=True)

        # Create publish directories
        pblDir = os_wrapper.createDir(os.path.join(pblDir, version))
        if textures:
            os_wrapper.createDir(os.path.join(pblDir, 'tx'))

        # Create in-progress tmp file
        inProgress.start(pblDir)

        # Store asset metadata in file
        src = mayaOps.getScene()
        icPblData.writeData(pblDir, assetPblName, convention, assetType,
                            extension, version, pblNotes, src)

        # Maya operations
        mayaOps.deleteICDataSet(objLs)
        if textures:
            # Copy textures to publish directory (use hardlink instead?)
            txFullPath = os.path.join(pblDir, 'tx')
            # txRelPath = txFullPath.replace(os.path.expandvars('$IC_JOBPATH'), '$IC_JOBPATH')
            # txPaths = (txFullPath, txRelPath)

            # Returns a dict for fileNodes and oldTxPaths if updateMaya = True
            oldTxPaths = mayaOps.updateTextures(txFullPath,
                                                txObjLs=objLs,
                                                updateMaya=True)

        # File operations
        pathToPblAsset = os.path.join(pblDir,
                                      '%s.%s' % (assetPblName, extension))
        verbose.pblFeed(msg=assetPblName)
        mayaOps.exportSelection(pathToPblAsset, fileType)
        # Write Nuke file if ic and file node type
        if nodeType == 'ic':
            if subsetName == 'file':
                fileTypeLs = ('.jpg', '.jpeg', '.hdr', '.exr', '.tif', '.tiff',
                              '.tga', '.png')
                fileLs = os.listdir(os.path.join(pblDir, 'tx'))
                for file_ in fileLs:
                    if file_.endswith(fileTypeLs, -4):
                        fileName = file_
                        mayaOps.nkFileNodeExport(objLs, nodeType, fileName,
                                                 pblDir, pblDir, assetPblName,
                                                 version)

        # Reverts the texture paths
        if textures and oldTxPaths:
            mayaOps.relinkTextures(oldTxPaths)

        # Delete in-progress tmp file
        inProgress.end(pblDir)

        # Published asset check
        pblResult = pblChk.success(pathToPblAsset)

        verbose.pblFeed(end=True)

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_traceback)
        pathToPblAsset = ''
        os_wrapper.remove(pblDir)
        pblResult = pblChk.success(pathToPblAsset)
        pblResult += verbose.pblRollback()

    # Show publish result dialog
    dialogTitle = 'Publish Report'
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (
        assetPblName, version, subsetName, pblResult)
    dialog = prompt.dialog()
    dialog.display(dialogMsg, dialogTitle, conf=True)
Beispiel #5
0
def publish(pblTo, slShot, subtype, textures, pblNotes):

    # Get selection
    objLs = mc.ls(sl=True)

    # Check item count
    if not pblChk.itemCount(objLs):
        return

    # Define main variables
    geoType = 'abc'
    subsetName = subtype
    assetType = 'ic_pointCloud'
    prefix = ''
    convention = objLs[0]
    suffix = '_pointCloud'
    ma_fileType = 'mayaBinary'
    extension = geoType

    # Check for illegal characters
    cleanObj = os_wrapper.sanitize(convention)
    if cleanObj != convention:
        verbose.illegalCharacters(convention)
        return

    # Check if item is particle
    objSh = mc.listRelatives(objLs[0])[0]
    objType = mayaOps.nodetypeCheck(objSh)
    if objType not in ('particle', 'nParticle'):
        verbose.pointCloudParticle()
        return

    # Get all dependents
    allObjLs = mc.listRelatives(convention, ad=True, f=True, typ='transform')
    if allObjLs:
        allObjLs.append(convention)
    else:
        allObjLs = [convention]

    # Check if asset to publish is a set
    if mc.nodeType(convention) == 'objectSet':
        verbose.noSetsPbl()
        return

    # Check if asset to publish is an icSet
    if mayaOps.chkIcDataSet(convention):
        verbose.noICSetsPbl()
        return

    # Check if asset to publish is referenced
    for allObj in allObjLs:
        if mc.referenceQuery(allObj, inr=True):
            verbose.noRefPbl()
            return

    # Process asset publish options
    assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName,
                                                    assetType, prefix,
                                                    convention, suffix)

    # Add shot name to assetPblName if asset is being publish to a shot
    # Determining publish env var for relative directory
    if pblTo != os.environ['IC_JOBPUBLISHDIR']:
        assetPblName += '_%s' % slShot
        pblRelDir = '$IC_SHOTPUBLISHDIR'
    else:
        pblRelDir = '$IC_JOBPUBLISHDIR'

    # Version control
    version = '%s' % vCtrl.version(pblDir)
    #	if approved:
    #		version += '_apv'

    # Confirmation dialog
    dialogTitle = 'Publishing %s' % convention
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (
        assetPblName, version, subsetName, pblNotes)
    dialog = prompt.dialog()
    if not dialog.display(dialogMsg, dialogTitle):
        return

    # Publishing
    try:
        verbose.pblFeed(begin=True)

        # Create publish directories
        pblDir = os_wrapper.createDir(os.path.join(pblDir, version))
        if textures:
            os_wrapper.createDir(os.path.join(pblDir, 'tx'))

        # Create in-progress tmp file
        inProgress.start(pblDir)

        # Store asset metadata in file
        src = mayaOps.getScene()
        icPblData.writeData(pblDir, assetPblName, convention, assetType,
                            extension, version, pblNotes, src)

        # Maya operations
        if textures:
            # Copy textures to publish directory (use hardlink instead?)
            txFullPath = os.path.join(pblDir, 'tx')
            # txRelPath = txFullPath.replace(pblTo, pblRelDir)
            # txPaths = (txFullPath, txRelPath)

            # Returns a dict for fileNodes and oldTxPaths if updateMaya = True
            oldTxPaths = mayaOps.updateTextures(txFullPath,
                                                txObjLs=allObjLs,
                                                updateMaya=True)

        # Get transform data, write to file and zero obj out
        objTrs = mayaOps.getTransforms(convention)
        if objTrs:
            objT, objR, objS = objTrs
        else:
            raise RuntimeError(verbose.noGetTranforms())

        trsDataFile = open('%s/trsData.py' % (pblDir), 'w')
        trsDataFile.write('t=%s\nr=%s\ns=%s' % (objT, objR, objS))
        trsDataFile.close()
        mayaOps.applyTransforms(convention, [0, 0, 0], [0, 0, 0], [1, 1, 1])

        # Take snapshot
        mayaOps.snapShot(pblDir, isolate=True, fit=True)

        # File operations
        pathToPblAsset = os.path.join(pblDir,
                                      '%s.%s' % (assetPblName, extension))
        verbose.pblFeed(msg=assetPblName)
        mayaOps.exportSelection(pathToPblAsset, ma_fileType)
        mayaOps.exportGeo(objLs, geoType, pathToPblAsset)

        # Re-apply original transforms to object
        mayaOps.applyTransforms(convention, objT, objR, objS)

        # Reverts the texture paths
        if textures and oldTxPaths:
            mayaOps.relinkTextures(oldTxPaths)

        # Delete in-progress tmp file
        inProgress.end(pblDir)

        # Published asset check
        pblResult = pblChk.success(pathToPblAsset)

        verbose.pblFeed(end=True)

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_traceback)
        pathToPblAsset = ''
        os_wrapper.remove(pblDir)
        pblResult = pblChk.success(pathToPblAsset)
        pblResult += verbose.pblRollback()

    # Show publish result dialog
    dialogTitle = 'Publish Report'
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (
        assetPblName, version, subsetName, pblResult)
    dialog = prompt.dialog()
    dialog.display(dialogMsg, dialogTitle, conf=True)
Beispiel #6
0
def publish(pblTo, slShot, pblNotes):

    # Get selection
    objLs = mc.ls(sl=True)

    # Check item count
    if not pblChk.itemCount(objLs):
        return

    # Define main variables
    shot_ = os.environ['IC_SHOT']
    assetType = 'ma_anim'
    subsetName = ''
    prefix = ''
    convention = objLs[0]
    suffix = '_anim'
    fileType = 'atomExport'
    extension = 'atom'

    # Check for illegal characters
    cleanObj = os_wrapper.sanitize(convention)
    if cleanObj != convention:
        verbose.illegalCharacters(convention)
        return

    # Get all dependents
    allObjLs = mc.listRelatives(convention, ad=True, f=True)
    # Add original selection to allObj if no dependents are found
    if allObjLs:
        allObjLs.append(convention)
    else:
        allObjLs = [convention]

    # Check if asset to publish is a set
    if mc.nodeType(convention) == 'objectSet':
        verbose.noSetsPbl()
        return

    # Check if asset to publish is an icSet
    if mayaOps.chkIcDataSet(convention):
        verbose.noICSetsPbl()
        return

    # Check if asset to publish is referenced
    for allObj in allObjLs:
        if mc.referenceQuery(allObj, inr=True):
            verbose.noRefPbl()
            return

    # Check if selected asset is a published asset and matches the asset name
    try:
        ICSetConn = mc.listConnections('%s.icARefTag' % convention)
        if not ICSetConn[0].startswith('ICSet'):
            raise RuntimeError('ICSet')
    except:
        verbose.pblAssetReq()
        return

    # Process asset publish options
    assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName,
                                                    assetType, prefix,
                                                    convention, suffix)

    # Add shot name to assetPblName if asset is being publish to a shot
    # Determining publish env var for relative directory
    if pblTo != os.environ['IC_JOBPUBLISHDIR']:
        assetPblName += '_%s' % slShot

    # Version control
    version = '%s' % vCtrl.version(pblDir)
    #	if approved:
    #		version += '_apv'

    # Confirmation dialog
    dialogTitle = 'Publishing %s' % convention
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (
        assetPblName, version, subsetName, pblNotes)
    dialog = prompt.dialog()
    if not dialog.display(dialogMsg, dialogTitle):
        return

    # Publishing
    try:
        verbose.pblFeed(begin=True)

        # Create publish directories
        pblDir = os_wrapper.createDir(os.path.join(pblDir, version))

        # Create in-progress tmp file
        inProgress.start(pblDir)

        # Store asset metadata in file
        src = mayaOps.getScene()
        requires = mc.getAttr('%s.icRefTag' % ICSetConn[0])
        compatible = '%s_%s' % (requires,
                                mc.getAttr('ICSet_%s.icVersion' % requires))
        icPblData.writeData(pblDir, assetPblName, convention, assetType,
                            extension, version, pblNotes, src, requires,
                            compatible)

        # Maya operations
        pathToPblAsset = os.path.join(pblDir,
                                      '%s.%s' % (assetPblName, extension))
        verbose.pblFeed(msg=assetPblName)
        mayaOps.exportAnimation(pathToPblAsset, pblDir, objLs)
        #	os_wrapper.setPermissions(os.path.join(pblDir, '*'))

        # Delete in-progress tmp file
        inProgress.end(pblDir)

        # Published asset check
        pblResult = pblChk.success(pathToPblAsset)

        verbose.pblFeed(end=True)

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_traceback)
        pathToPblAsset = ''
        os_wrapper.remove(pblDir)
        pblResult = pblChk.success(pathToPblAsset)
        pblResult += verbose.pblRollback()

    # Show publish result dialog
    dialogTitle = 'Publish Report'
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (
        assetPblName, version, subsetName, pblResult)
    dialog = prompt.dialog()
    dialog.display(dialogMsg, dialogTitle, conf=True)
Beispiel #7
0
def publish(pblTo, slShot, subtype, textures, pblNotes):

	# Get selection
	objLs = mc.ls(sl=True)

	# Check item count
	if not pblChk.itemCount(objLs):
		return

	# Define main variables
	assetType = 'ma_model'
	subsetName = subtype
	prefix = ''
	convention = objLs[0]
	suffix = '_%s_model' % subtype
	fileType = 'mayaBinary'
	extension = 'mb'
	autoLods = False

	# Check for illegal characters
	cleanObj = os_wrapper.sanitize(convention)
	if cleanObj != convention:
		verbose.illegalCharacters(convention)
		return

	# Get all dependents. Creates a group for LODs with just dependents
	allObjLs = mc.listRelatives(convention, ad=True, f=True, typ='transform')
	objLodLs = allObjLs
	# Add original selection to allObj if no dependents are found
	if allObjLs:
		allObjLs.append(convention)
	else:
		allObjLs = [convention]
		objLodLs = [convention]

	# Check if asset to publish is a set
	if mc.nodeType(convention) == 'objectSet':
		verbose.noSetsPbl()
		return

	# Check if asset to publish is an icSet
	if mayaOps.chkIcDataSet(convention):
		verbose.noICSetsPbl()
		return

	# Check if asset to publish is referenced
	for allObj in allObjLs:
		if mc.referenceQuery(allObj, inr=True):
			verbose.noRefPbl()
			return

	# Process asset publish options
	assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName, assetType, prefix, convention, suffix)

	# Add shot name to assetPblName if asset is being publish to a shot
	# Determining publish env var for relative directory
	if pblTo != os.environ['IC_JOBPUBLISHDIR']:
		assetPblName += '_%s' % slShot

	# Version control
	version = '%s' % vCtrl.version(pblDir)
#	if approved:
#		version += '_apv'

	# Confirmation dialog
	dialogTitle = 'Publishing %s' % convention
	dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (assetPblName, version, subsetName, pblNotes)
	dialog = prompt.dialog()
	if not dialog.display(dialogMsg, dialogTitle):
		return

	# Publishing
	try:
		verbose.pblFeed(begin=True)

		# Create publish directories
		pblDir = os_wrapper.createDir(os.path.join(pblDir, version))
		if textures:
			os_wrapper.createDir(os.path.join(pblDir, 'tx'))

		# Create in-progress tmp file
		inProgress.start(pblDir)

		# Store asset metadata in file
		src = mayaOps.getScene()
		#for i in ('pblDir', 'assetPblName', 'convention', 'assetType', 'extension', 'version', 'src', 'pblNotes')
		#	publishVars[i] = locals()[i]
		#icPblData.writeData(publishVars)
		icPblData.writeData(pblDir, assetPblName, convention, assetType, extension, version, pblNotes, src)

		# Publish operations
		mayaOps.deleteICDataSet(allObjLs)
		if textures:
			# Copy textures to publish directory (use hardlink instead?)
			txFullPath = os.path.join(pblDir, 'tx')
			# txRelPath = txFullPath.replace(os.path.expandvars('$IC_JOBPATH'), '$IC_JOBPATH')
			# txPaths = (txFullPath, txRelPath)
			
			# Returns a dict for fileNodes and oldTxPaths if updateMaya = True
			oldTxPaths = mayaOps.updateTextures(txFullPath, txObjLs=allObjLs, updateMaya=True)

		# Take snapshot
		mayaOps.snapShot(pblDir, isolate=True, fit=True)

		# File operations
		pathToPblAsset = os.path.join(pblDir, '%s.%s' % (assetPblName, extension))
		verbose.pblFeed(msg=assetPblName)
		mayaOps.exportSelection(pathToPblAsset, fileType)

		# Reverts the texture paths
		if textures and oldTxPaths:
				mayaOps.relinkTextures(oldTxPaths)

		# Delete in-progress tmp file
		inProgress.end(pblDir)

		# Published asset check
		pblResult = pblChk.success(pathToPblAsset)

		verbose.pblFeed(end=True)

	except:
		exc_type, exc_value, exc_traceback = sys.exc_info()
		traceback.print_exception(exc_type, exc_value, exc_traceback)
		pathToPblAsset = ''
		os_wrapper.remove(pblDir) # was commented out?
		pblResult = pblChk.success(pathToPblAsset)
		pblResult += verbose.pblRollback()

	# Show publish result dialog
	dialogTitle = 'Publish Report'
	dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (assetPblName, version, subsetName, pblResult)
	dialog = prompt.dialog()
	dialog.display(dialogMsg, dialogTitle, conf=True)
Beispiel #8
0
def publish(pblTo, slShot, subtype, pblNotes):

	# Get selection
	objLs = mc.ls(sl=True)

	# Check item count
	if not pblChk.itemCount(objLs):
		return

	# Define main variables
	assetType = 'ma_geoCache'
	subsetName = subtype
	prefix = ''
	convention = objLs[0]
	suffix = '_%s_geoCache' % subtype
	if subtype == 'vrmesh':
		fileType = 'vrmesh'
		extension = 'vrmesh'
	elif subtype == 'realflow':
		fileType = 'sd'
		extension = 'sd'
	else:
		fileType = 'abc'
		extension = 'abc'

	# Check for illegal characters
	cleanObj = os_wrapper.sanitize(convention)
	if cleanObj != convention:
		verbose.illegalCharacters(convention)
		return

	# Get all dependents
	allObjLs = mc.listRelatives(convention, ad=True, f=True, typ='transform')
	if allObjLs:
		allObjLs.append(convention)
	else:
		allObjLs = [convention]

	# Check if asset to publish is a set
	if mc.nodeType(convention) == 'objectSet':
		verbose.noSetsPbl()
		return

	# Check if asset to publish is an icSet
	if mayaOps.chkIcDataSet(convention):
		verbose.noICSetsPbl()
		return

	# Check if asset to publish is referenced
	for allObj in allObjLs:
		if mc.referenceQuery(allObj, inr=True):
			verbose.noRefPbl()
			return

	# Process asset publish options
	assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName, assetType, prefix, convention, suffix)

	# Add shot name to assetPblName if asset is being publish to a shot
	# Determining publish env var for relative directory
	if pblTo != os.environ['IC_JOBPUBLISHDIR']:
		assetPblName += '_%s' % slShot

	# Version control
	version = '%s' % vCtrl.version(pblDir)
#	if approved:
#		version += '_apv'

	# Confirmation dialog
	dialogTitle = 'Publishing %s' % convention
	dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (assetPblName, version, subsetName, pblNotes)
	dialog = prompt.dialog()
	if not dialog.display(dialogMsg, dialogTitle):
		return

	# Publishing
	try:
		verbose.pblFeed(begin=True)

		# Create publish directories
		pblDir = os_wrapper.createDir(os.path.join(pblDir, version))

		# Create in-progress tmp file
		inProgress.start(pblDir)

		# Store asset metadata in file
		src = mayaOps.getScene()
		icPblData.writeData(pblDir, assetPblName, convention, assetType, extension, version, pblNotes, src)

		# Maya operations
		mayaOps.deleteICDataSet(allObjLs)

		# Take snapshot
		mayaOps.snapShot(pblDir, isolate=True, fit=True)

		# File operations
		pathToPblAsset = os.path.join(pblDir, '%s.%s' % (assetPblName, extension))
		verbose.pblFeed(msg=assetPblName)
		mayaOps.exportGeo(objLs, fileType, pathToPblAsset)

		# Delete in-progress tmp file
		inProgress.end(pblDir)

		# Published asset check
		pblResult = pblChk.success(pathToPblAsset)

		verbose.pblFeed(end=True)

	except:
		exc_type, exc_value, exc_traceback = sys.exc_info()
		traceback.print_exception(exc_type, exc_value, exc_traceback)
		pathToPblAsset = ''
		os_wrapper.remove(pblDir)
		pblResult = pblChk.success(pathToPblAsset)
		pblResult += verbose.pblRollback()

	# Show publish result dialog
	dialogTitle = 'Publish Report'
	dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (assetPblName, version, subsetName, pblResult)
	dialog = prompt.dialog()
	dialog.display(dialogMsg, dialogTitle, conf=True)
Beispiel #9
0
def publish(pblTo, slShot, subtype, pblName, pblNotes):

    # Get selection
    nodeLs = nuke.selectedNodes()

    # Check item count
    if subtype == 'node':
        if not pblChk.itemCount(nodeLs):
            return
    else:
        if not pblChk.itemCount(nodeLs, mult=True):
            return

    # Define main variables
    shot_ = ''
    assetType = 'nk_%s' % subtype
    subsetName = ''
    prefix = ''
    convention = pblName
    suffix = '_%s' % subtype
    fileType = 'nk'
    extension = 'nk'

    # Check for illegal characters
    cleanObj = os_wrapper.sanitize(convention)
    if cleanObj != convention:
        verbose.illegalCharacters(convention)
        return

    # Process asset publish options
    assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName,
                                                    assetType, prefix,
                                                    convention, suffix)

    # Add shot name to assetPblName if asset is being publish to a shot
    if pblTo != os.environ['IC_JOBPUBLISHDIR']:
        assetPblName += '_%s' % slShot

    # Version control
    version = '%s' % vCtrl.version(pblDir)
    #	if approved:
    #		version += '_apv'

    # Confirmation dialog
    dialogTitle = 'Publishing %s' % convention
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (
        assetPblName, version, subsetName, pblNotes)
    dialog = prompt.dialog()
    if not dialog.display(dialogMsg, dialogTitle):
        return

    # Publishing
    try:
        verbose.pblFeed(begin=True)

        # Create publish directories
        pblDir = os_wrapper.createDir(os.path.join(pblDir, version))

        # Create in-progress tmp file
        inProgress.start(pblDir)

        # Store asset metadata in file
        src = nuke.root().name()  #nukeOps.getScriptName()
        icPblData.writeData(pblDir, assetPblName, assetPblName, assetType,
                            extension, version, pblNotes, src)

        # Nuke operations
        icSet = nukeOps.createBackdrop(assetPblName, nodeLs)
        icSet['selected'].setValue(True)

        # File operations
        pathToPblAsset = os.path.join(pblDir,
                                      '%s.%s' % (assetPblName, extension))
        verbose.pblFeed(msg=assetPblName)
        nukeOps.exportSelection(pathToPblAsset)
        nuke.delete(icSet)

        # Take snapshot
        nukeOps.viewerSnapshot(pblDir)

        # Delete in-progress tmp file
        inProgress.end(pblDir)

        # Published asset check
        pblResult = pblChk.success(pathToPblAsset)

        verbose.pblFeed(end=True)

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_traceback)
        pathToPblAsset = ''
        os_wrapper.remove(pblDir)
        pblResult = pblChk.success(pathToPblAsset)
        pblResult += verbose.pblRollback()

    # Show publish result dialog
    dialogTitle = 'Publish Report'
    dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (
        assetPblName, version, subsetName, pblResult)
    dialog = prompt.dialog()
    dialog.display(dialogMsg, dialogTitle, conf=True)
Beispiel #10
0
def publish(pblTo, slShot, scnName, subtype, textures, pblNotes):

	# Define main variables
	assetType = 'ma_scene'
	subsetName = subtype
	prefix = ''
	convention = scnName
	suffix = '_scene'
	fileType = 'mayaAscii'
	extension = 'ma'

	# Check for illegal characters
	cleanObj = os_wrapper.sanitize(convention)
	if cleanObj != convention:
		verbose.illegalCharacters(convention)
		return

	# Get all dependents
	allObjLs = mc.ls(tr=True)

	# Remove Maya's default cameras from list
	defaultCamLs = ['front', 'persp', 'side', 'top']
	for defaultCam in defaultCamLs:
		allObjLs.remove(defaultCam)

	# Check if asset to publish is referenced
	for allObj in allObjLs:
		if mc.referenceQuery(allObj, inr=True):
			verbose.noRefPbl()
			return

	# Process asset publish options
	assetPblName, assetDir, pblDir = pblOptsPrc.prc(pblTo, subsetName, assetType, prefix, convention, suffix)

	# Add shot name to assetPblName if asset is being publish to a shot
	# Determining publish env var for relative directory
	if pblTo != os.environ['IC_JOBPUBLISHDIR']:
		assetPblName += '_%s' % slShot

	# Version control
	version = '%s' % vCtrl.version(pblDir)
#	if approved:
#		version += '_apv'

	# Confirmation dialog
	dialogTitle = 'Publishing %s' % convention
	dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\nNotes:\t%s' % (assetPblName, version, subsetName, pblNotes)
	dialog = prompt.dialog()
	if not dialog.display(dialogMsg, dialogTitle):
		return

	# Publishing
	try:
		verbose.pblFeed(begin=True)

		# Create publish directories
		pblDir = os_wrapper.createDir(os.path.join(pblDir, version))
		if textures:
			os_wrapper.createDir(os.path.join(pblDir, 'tx'))

		# Create in-progress tmp file
		inProgress.start(pblDir)

		# Store asset metadata in file
		src = mayaOps.getScene()
		icPblData.writeData(pblDir, assetPblName, convention, assetType, extension, version, pblNotes, src)

		# Publish operations
		try:
			mc.select('ICSet_*', ne=True, r=True)
			icSetLs = mc.ls(sl=True)
			for icSet in icSetLs:
				mc.delete(icSet)
		except:
			pass
		if textures:
			# Copy textures to publish directory (use hardlink instead?)
			txFullPath = os.path.join(pblDir, 'tx')
			# txRelPath = txFullPath.replace(os.path.expandvars('$IC_JOBPATH'), '$IC_JOBPATH')
			# txPaths = (txFullPath, txRelPath)

			# Returns a dict for fileNodes and oldTxPaths if updateMaya = True
			oldTxPaths = mayaOps.updateTextures(txFullPath, updateMaya=True)

		# Take snapshot
		mayaOps.snapShot(pblDir, isolate=False, fit=False)

		# File operations
		pathToPblAsset = os.path.join(pblDir, '%s.%s' % (assetPblName, extension))
		verbose.pblFeed(msg=assetPblName)
		activeScene = mayaOps.getScene()
		mayaOps.redirectScene(pathToPblAsset)
		mayaOps.saveFile(fileType, updateRecentFiles=False)

		# Reverts the texture paths
		if textures and oldTxPaths:
				mayaOps.relinkTextures(oldTxPaths)

		mayaOps.redirectScene(activeScene)

		# Delete in-progress tmp file
		inProgress.end(pblDir)

		# Published asset check
		pblResult = pblChk.success(pathToPblAsset)

		verbose.pblFeed(end=True)

	except:
		exc_type, exc_value, exc_traceback = sys.exc_info()
		traceback.print_exception(exc_type, exc_value, exc_traceback)
		pathToPblAsset = ''
		os_wrapper.remove(pblDir)
		pblResult = pblChk.success(pathToPblAsset)
		pblResult += verbose.pblRollback()

	# Show publish result dialog
	dialogTitle = 'Publish Report'
	dialogMsg = 'Asset:\t%s\n\nVersion:\t%s\n\nSubset:\t%s\n\n\n%s' % (assetPblName, version, subsetName, pblResult)
	dialog = prompt.dialog()
	dialog.display(dialogMsg, dialogTitle, conf=True)