Exemplo n.º 1
0
    def deleteJob(self, jobID):
        """ Delete a render job and associated tasks and log files.
			Searches for all JSON files with job UUID under the queue folder
			structure and deletes them.
			TODO: Also kill processes for tasks that are rendering.
		"""
        datafile = os.path.join(self.db['jobs'], '%s.json' % jobID)
        os_wrapper.remove(datafile)
        self.queue_logger.info("Deleted job %s" % jobID)

        # Delete task data files and log files...
        task_count = self.deleteTasks(jobID)
        log_count = self.deleteJobLogs(jobID)

        return True
Exemplo n.º 2
0
    def deleteJobLogs(self, jobID):
        """ Delete log files associated with a particular job.
		"""
        log_count = 0

        path = '%s/%s_*.log' % (self.db['logs'], jobID)
        for logfile in glob.glob(path):
            log_count += 1
            os_wrapper.remove(logfile)

        if log_count:
            self.queue_logger.info("Deleted %d log files for job %s" %
                                   (log_count, jobID))

        return log_count
Exemplo n.º 3
0
    def deleteTasks(self, jobID):
        """ Delete task data files associated with a particular job.
		"""
        task_count = 0

        path = '%s/*/*/%s_*.json' % (self.db['root'], jobID)
        for filename in glob.glob(path):
            if 'workers' in filename:
                # TODO: Deal nicely with tasks that are currently rendering
                print("Task %s currently rendering." % filename)
            task_count += 1
            os_wrapper.remove(filename)  # add return value for check

        if task_count:
            self.queue_logger.info("Deleted %d tasks for job %s" %
                                   (task_count, jobID))

        return task_count
Exemplo n.º 4
0
    def clearRecentFiles(self):
        """ Clear all recent files.
		"""
        dialog = prompt.dialog()
        message = "About to delete all recent files information. Are you sure?"
        if dialog.display(message, "Confirm"):
            success, msg = os_wrapper.remove(os.environ['IC_RECENTFILESDIR'])
            if not success:
                dialog.display(msg, "Error", conf=True)
Exemplo n.º 5
0
    def deleteWorker(self, workerID):
        """ Delete a worker from the database.
		"""
        path = os.path.join(self.db['workers'], workerID)

        if os_wrapper.remove(path)[0]:
            self.queue_logger.info("Deleted worker %s" % workerID)
            return True
        else:
            self.queue_logger.warning("Failed to delete worker %s" % workerID)
            return False
Exemplo n.º 6
0
def purgeScene(scene, GUIFormDialog, particles=True, meshes=True, preview=True):
	dialog = GUIFormDialog.new()
	dialog.setTitle('GPS - Purge Scene')
	dialog.addStringField('All unused data will be deleted.This operation is not undoable. Continue?','')
	dialogResult = dialog.show()
	if not dialogResult:
		return
	
	#purges particles
	if particles:
		#getting particles direcotry and particle emitter names in scene
		particleDir = os.path.join(scene.getRootPath(), 'particles')
		particleLs = os.listdir(particleDir)
		inUseParticleLs = []
		emitters = scene.get_PB_Emitters()
		emitterNameLs = []
		for emitter in emitters:
		 emitterNameLs.append(emitter.getName())

		#determining particles in use	
		for particle in particleLs:
			for emitterName in emitterNameLs:
				if emitterName in particle:
					inUseParticleLs.append(particle)
		#removing unused particles			
		for particle in particleLs:
				if particle not in inUseParticleLs:
					scene.message(str(particle))
					os_wrapper.remove(os.path.join(particleDir,  particle))
	
	#purges meshes
	if meshes:
		meshFileDir = os.path.join(scene.getRootPath(), 'meshes')
		meshFileLs = os.listdir(meshFileDir)
		inUseMeshLs = []
		meshLs = scene.getParticleMeshesLegacy()
		meshNameLs = []
		for mesh in meshLs:
 			meshNameLs.append(mesh.getName())
			
		#determining meshes in use	
		for meshFile in meshFileLs:
			for meshName in meshNameLs:
				if meshName in meshFile:
					inUseMeshLs.append(meshFile)
					
		#removing unused meshes			
		for meshFile in meshFileLs:
			if meshFile not in inUseMeshLs:
				scene.message(str(meshFile))
				os_wrapper.remove(os.path.join(meshFileDir,  meshFile))
				
	#purges preivew
	if preview:
		previewDir = os.path.join(scene.getRootPath(), 'preview')
		os_wrapper.remove(previewDir)
    def deleteShots(self):
        """ Delete the selected shot(s).
			TODO: implement properly
		"""
        # Confirmation dialog
        dialog_title = "Delete shot: %s" % self.shot
        dialog_msg = "Are you sure?"
        dialog = prompt.dialog()
        if dialog.display(dialog_msg, dialog_title):
            shot_path = os_wrapper.absolutePath("%s/$IC_SHOTSDIR/%s" %
                                                (self.job_path, self.shot))
            result, msg = os_wrapper.remove(shot_path)
            if result:
                verbose.message("Shot '%s' deleted: %s" %
                                (self.shot, self.job_path))
                self.populateShots()
            else:
                dialog.display(msg, "Failed to delete shot", conf=True)
Exemplo n.º 8
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)
Exemplo n.º 9
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)
Exemplo n.º 10
0
def publish(renderDic, pblTo, mainLayer, streamPbl, pblNotes):

    job = os.environ['IC_JOB']
    assetType = 'render'
    prefix = ''
    convention = ''
    suffix = ''
    subsetName = os.environ['IC_SHOT']
    assetExt = ''
    assetPblName = '%s%s%s' % (prefix, convention, suffix)
    assetName = assetPblName

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

    # Version control
    currentVersion = vCtrl.version(pblDir, current=True)
    version = vCtrl.version(pblDir)

    # Checks if no main layer was set and cancels publish if publishing first version
    if version == 'v001':
        if not mainLayer:
            verbose.noMainLayer()
            return

    # Confirmation dialog
    dialogMsg = ''
    dialogTitle = 'Publishing Render'
    if not streamPbl:
        dialogMsg += "Warning:\n\nPublish won't be streamed.\nLayers from previous renders will not be ported.\n\n\n"
    if not mainLayer:
        dialogMsg += 'Warning:\n\nNo main layer was set.\nThe main render layer will be ported from the previous publish.\n\nContinue?\n\n\n'
    dialogMsg += 'Render:\t%s\n\nVersion:\t%s\n\nNotes:\t%s' % (
        assetPblName, version, pblNotes)
    dialog = prompt.dialog()
    if not dialog.display(dialogMsg, dialogTitle):
        return

    try:
        verbose.pblFeed(begin=True)
        pblResult = 'SUCCESS'

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

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

        # File operations
        if not mainLayer:
            streamPbl = True
        elif version == 'v001':
            streamPbl = True
        # Streaming publish. Hard linking previous version and removing previous icarus data files
        if streamPbl:
            if version != 'v001':
                # Get all layers in current publish
                currentPblLayerLs = os.listdir(
                    os.path.join(renderRootPblDir, currentVersion))
                for currentPblLayer in currentPblLayerLs:
                    # Create respective layer folder in new version
                    if os.path.isdir(
                            os.path.join(renderRootPblDir, currentVersion,
                                         currentPblLayer)):
                        os_wrapper.createDir(
                            os.path.join(pblDir, currentPblLayer))
                        # Get all files in current layer
                        currentLayerFileLs = sorted(
                            os.listdir(
                                os.path.join(renderRootPblDir, currentVersion,
                                             currentPblLayer)))
                        # Hard linking files to new version
                        for currentLayerFile in currentLayerFileLs:
                            verbose.pblFeed(msg='Processing %s' %
                                            currentLayerFile)
                            os_wrapper.hardLink(
                                os.path.join(renderRootPblDir, currentVersion,
                                             currentPblLayer,
                                             currentLayerFile),
                                os.path.join(pblDir, currentPblLayer))

        # Process all new layers and passes
        for key in renderDic.keys():
            srcLayerDir = os.path.expandvars(
                renderDic[key])  # expand environment variables in render path
            dirContents = sorted(os.listdir(srcLayerDir))
            for file_ in dirContents:
                verbose.pblFeed(msg='Processing %s' % file_)
                if key == mainLayer:
                    os_wrapper.createDir(os.path.join(pblDir, 'main'))
                    #if os.path.isfile(os.path.join(srcLayerDir, file_)):
                    #	prcFile = pblOptsPrc.renderName_prc(key, 'main', file_)
                    #	if prcFile:
                    #		os_wrapper.hardLink(os.path.join(srcLayerDir, file_), os.path.join(pblDir, 'main', prcFile))
                    os_wrapper.hardLink(os.path.join(srcLayerDir, file_),
                                        os.path.join(pblDir, key))
                else:
                    destLayerDir = os.path.join(pblDir, key)
                    if not os.path.isdir(destLayerDir):
                        os_wrapper.createDir(destLayerDir)
                    os_wrapper.hardLink(os.path.join(srcLayerDir, file_),
                                        destLayerDir)

        # Create publish snapshot from main layer new version
        mainLayerDir = os.path.join(pblDir, 'main')
        mainLayerFileLs = sorted(os.listdir(mainLayerDir))
        mainLayerPaddingLs = []
        snapShot = False
        #print(mainLayerFileLs)
        for mainLayerFile in mainLayerFileLs:
            #if '_main.' in mainLayerFile:
            if '_main' in mainLayerFile:  # use regex for better matching
                snapShot = True
                mainLayerBody, mainLayerPadding, mainLayerExtension = pblOptsPrc.render_split(
                    mainLayerFile)
                mainLayerPaddingLs.append(mainLayerPadding)

        if snapShot:
            verbose.pblSaveSnapshot()
            startFrame = int(min(mainLayerPaddingLs))
            endFrame = int(max(mainLayerPaddingLs))
            # midFrame = int((int(startFrame) + int(endFrame))/2)

            try:
                posterFrame = int(os.environ['IC_POSTER_FRAME'])
            except ValueError:
                posterFrame = -1
            if not (
                    startFrame <= posterFrame <= endFrame
            ):  # if poster frame is not within frame range, use mid frame
                posterFrame = int((startFrame + endFrame) / 2)

            inFile = os.path.join(mainLayerDir, mainLayerBody)
            outFile = os.path.join(pblDir, 'preview')
            djvOps.prcImg(inFile,
                          outFile,
                          posterFrame,
                          posterFrame,
                          mainLayerExtension[1:],
                          resize=(512, 288),
                          outExt='jpg')
            #djvOps.prcQt(inFile, pblDir, startFrame, endFrame, mainLayerExtension, resize=(256,144))

        # Store asset metadata in file
        assetPblName += '_%s' % version
        # src = renderDic['main']
        src = None
        icPblData.writeData(pblDir, assetPblName, assetName, assetType,
                            assetExt, version, pblNotes, src)

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

        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 = "Render:\t%s\n\nVersion:\t%s\n\n\n%s" % (assetPblName, version,
                                                         pblResult)
    dialog = prompt.dialog()
    dialog.display(dialogMsg, dialogTitle, conf=True)
Exemplo n.º 11
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)
Exemplo n.º 12
0
def publish(pblTo, slShot, subtype, pblNotes):

	# Get selection
	nodeLs = nuke.root().nodes()

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

	# 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)

		# File operations
		pathToPblAsset = os.path.join(pblDir, '%s.%s' % (assetPblName, extension))
		verbose.pblFeed(msg=assetPblName)
		# nukeOps.saveAs(pathToPblAsset)
		nuke.scriptSaveAs(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)
Exemplo n.º 13
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
    shot_ = os.environ['IC_SHOT']
    assetType = 'ic_camera'
    subsetName = ''
    prefix = ''
    convention = subtype
    suffix = '_camera'
    fileType = 'mayaAscii'
    extension = 'ma'

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

    # Check if selection is a camera
    if not mayaOps.cameraNodeCheck(objLs[0]):
        verbose.notCamera()
        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)
    assetPblName += '_%s' % slShot

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

    # Confirmation dialog
    dialogTitle = 'Publishing %s' % assetPblName  # 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)
        icPblData.writeData(pblDir, assetPblName, assetPblName, assetType,
                            extension, version, pblNotes, src)

        # Maya operations
        mayaOps.deleteICDataSet(allObjLs)
        newcamLs = mayaOps.cameraBake(objLs, assetPblName)
        objLs = [newcamLs[0]]
        attrLs = [
            '.tx', '.ty', '.tz', '.rx', '.ry', '.rz', '.sx', '.sy', '.sz'
        ]
        mayaOps.lockAttr(objLs, attrLs)

        # File operations
        pathToPblAsset = os.path.join(pblDir,
                                      '%s.%s' % (assetPblName, extension))
        verbose.pblFeed(msg=assetPblName)
        mayaOps.exportSelection(pathToPblAsset, fileType)
        mayaOps.nkCameraExport(objLs, pblDir, assetPblName, version)
        mayaOps.exportGeo(objLs, 'fbx', pathToPblAsset)
        #	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)
Exemplo n.º 14
0
def publish(dailyPblOpts, pblTo, pblNotes):

	dailySeq, dailyRange, dailyType, dailyPath = dailyPblOpts
	#nameBody, extension = os.path.splitext(dailySeq)
	#extension = extension[1:] # remove leading dot from file extension
	nameBody, padding_, extension = dailySeq.rsplit('.', 2)
	padding = len(padding_)

	job = os.environ['IC_JOB']
	assetType = 'dailies'
	prefix = ''
	convention = ''
	suffix = ''
	subsetName = dailyType
	assetExt = ''
	assetPblName = '%s%s%s' % (prefix, convention, suffix)
	assetName = assetPblName
	shotSaneName = os.environ['IC_SHOT'].replace('/', '_')

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

	# Version control
	currentVersion = vCtrl.version(pblDir, current=True)
	version = vCtrl.version(pblDir)

	# Confirmation dialog
	dialogMsg = ''
	dialogTitle = 'Publishing'
	dialogMsg += 'Name:\t%s_%s\n\nVersion:\t%s\n\nNotes:\t%s' % (shotSaneName, subsetName, version, pblNotes)
	dialog = prompt.dialog()
	if not dialog.display(dialogMsg, dialogTitle):
		return

	try:	
		verbose.pblFeed(begin=True)
		pblResult = 'SUCCESS'

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

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

		# File operations
		dailyPath = os.path.expandvars(dailyPath)

		try:
			startFrame, endFrame = dailyRange.split('-')
		except ValueError:
			startFrame = endFrame = dailyRange # if frame range is a single frame

		try:
			posterFrame_ = int(os.environ['IC_POSTER_FRAME'])
		except ValueError:
			posterFrame_ = -1
		if not (int(startFrame) <= posterFrame_ <= int(endFrame)): # if poster frame is not within frame range, use mid frame
			posterFrame_ = (int(startFrame)+int(endFrame)) / 2
		posterFrame = str(posterFrame_).zfill(padding)

		# Pass arguments to djv to process the files in djvOps
		dailyFileBody = '%s_dailies_%s' % (shotSaneName, subsetName)
		dailyFile = '%s.%s.jpg' % (dailyFileBody, startFrame)
		inFile = os.path.join(dailyPath, nameBody)
		#print(inFile)
		outFile = os.path.join(pblDir, dailyFileBody)
		#djvOps.prcImg(inFile, outFile, startFrame, endFrame, extension, outExt='jpg', fps=os.environ['IC_FPS'])
		djvOps.prcQt(inFile, pblDir, startFrame, endFrame, extension, name='%s_%s' % (dailyFileBody, version))

		# Hard linking daily to dated folder in wips dir
		dailyFileLs = os.listdir(pblDir)
		dailyDateDir = time.strftime('%Y_%m_%d')
		dailyDatePath = os.path.join(os.environ['IC_WIPS_DIR'], 'CGI', dailyDateDir, '%s_%s_%s' % (shotSaneName, subsetName, version))
		os_wrapper.createDir(dailyDatePath)
		excludeLs = ['in_progress.tmp']
		for file_ in dailyFileLs:
			if file_ not in excludeLs:
				os_wrapper.hardLink(os.path.join(pblDir, file_), os.path.join(dailyDatePath, file_))
				dailyFile = file_

		# Create daily snapshot
		previewoutFile = os.path.join(pblDir, 'preview')

		djvOps.prcImg(inFile, previewoutFile, posterFrame, posterFrame, extension, resize=(512,288), outExt='jpg')
		#djvOps.prcQt(inFile, pblDir, startFrame, endFrame, extension, resize=(512,288))

		# Store asset metadata in file
		assetPblName += '_%s' % version
		#src = renderDic['main']
		src = dailySeq
		icPblData.writeData(pblDir, assetPblName, assetName, assetType, assetExt, version, pblNotes, src)

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

		# Published asset check
		pblDirResult = pblChk.success(os.path.join(pblDir, dailyFile))
		dailyDirResult = pblChk.success(os.path.join(dailyDatePath, dailyFile))
		print(os.path.join(pblDir, dailyFile))
		print(os.path.join(dailyDatePath, dailyFile))
		pblResult = 'SUCCESS'
		if pblDirResult != pblResult or dailyDirResult != pblResult:
			pblResult = 'FAILED'
			raise Exception(verbose.dailyFail())

		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)
		os_wrapper.remove(dailyDatePath)
		pblResult = pblChk.success(pathToPblAsset)
		pblResult += " - " + verbose.pblRollback()

	# Show publish result dialog
	dialogTitle = "Publish Report"
	dialogMsg = "Render:\t%s\n\nVersion:\t%s\n\n%s" % (assetPblName, version, pblResult)
	dialog = prompt.dialog()
	dialog.display(dialogMsg, dialogTitle, conf=True)
Exemplo n.º 15
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)
Exemplo n.º 16
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)
Exemplo n.º 17
0
def end(pblDir):
    in_progressFile = os.path.join(pblDir, 'in_progress.tmp')
    if os.path.isfile(in_progressFile):
        os_wrapper.remove(in_progressFile)
Exemplo n.º 18
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)
Exemplo n.º 19
0
def publish(pblTo, pblNotes):

	# Define main variables
	assetType = 'ma_shot'
	subsetName = ''
	prefix = ''
	convention = os.environ['IC_SHOT']
	suffix = '_shot'
	fileType = 'mayaAscii'
	extension = 'ma'

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

	# 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))
		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, assetPblName, assetType, extension, version, pblNotes, src)

		# Publish operations
		# 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 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)