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