def getAsset(self, shot, assetName): assetType = ftrack.AssetType('Upload') try: asset = shot.getAsset(assetName, assetType) except: asset = shot.createAsset(assetName, assetType) return asset
def __init__(self, parent, browseMode='Shot'): QtWidgets.QWidget.__init__(self, parent) self.ui = Ui_ExportAssetOptions() self.ui.setupUi(self) self.currentAssetType = None self.currentTask = None self.browseMode = browseMode self.ui.ListAssetsViewModel = QtGui.QStandardItemModel() self.ui.ListAssetsSortModel = QtCore.QSortFilterProxyModel() self.ui.ListAssetsSortModel.setDynamicSortFilter(True) self.ui.ListAssetsSortModel.setFilterKeyColumn(1) self.ui.ListAssetsSortModel.setSourceModel(self.ui.ListAssetsViewModel) self.ui.ListAssetNamesComboBox.setModel(self.ui.ListAssetsSortModel) self.ui.ListAssetsComboBoxModel = QtGui.QStandardItemModel() assetTypeItem = QtGui.QStandardItem('Select AssetType') self.assetTypes = [] self.assetTypes.append('') self.ui.ListAssetsComboBoxModel.appendRow(assetTypeItem) assetHandler = FTAssetHandlerInstance.instance() self.assetTypesStr = sorted(assetHandler.getAssetTypes()) for assetTypeStr in self.assetTypesStr: try: assetType = ftrack.AssetType(assetTypeStr) except: log.warning('{0} not available in ftrack'.format(assetTypeStr)) continue assetTypeItem = QtGui.QStandardItem(assetType.getName()) assetTypeItem.type = assetType.getShort() self.assetTypes.append(assetTypeItem.type) self.ui.ListAssetsComboBoxModel.appendRow(assetTypeItem) self.ui.ListAssetsComboBox.setModel(self.ui.ListAssetsComboBoxModel) self.ui.AssetTaskComboBoxModel = QtGui.QStandardItemModel() self.ui.AssetTaskComboBox.setModel(self.ui.AssetTaskComboBoxModel) self.ui.ListAssetNamesComboBox.currentIndexChanged[str].connect( self.onAssetChanged) if browseMode == 'Task': self.ui.AssetTaskComboBox.hide() self.ui.assetTaskLabel.hide()
def __init__(self): super(GizmoPublisherDialog, self).__init__( QtGui.QApplication.desktop() ) applyTheme(self, 'integration') self.setupUI() self.session = ftrack_api.Session() try: ftrack.AssetType('nuke_gizmo') except ftrack.FTrackError as error: self.header.setMessage( 'No Asset type with short name "nuke_gizmo" found. Contact your ' 'supervisor or system administrator to add it.', 'warning' ) self.exec_()
def updateAssetTypeOptions(self): '''Update list of asset types to filter by.''' self.assetTypeSelectorModel.clear() assetTypes = ftrack.getAssetTypes() assetTypes = sorted(assetTypes, key=lambda assetType: assetType.getName().lower()) assetTypeItem = QtGui.QStandardItem('Show All') self.assetTypeSelectorModel.appendRow(assetTypeItem) assetHandler = FTAssetHandlerInstance.instance() assetTypesStr = sorted(assetHandler.getAssetTypes()) for assetTypeStr in assetTypesStr: try: assetType = ftrack.AssetType(assetTypeStr) except: print assetTypeStr + ' not available in ftrack' continue assetTypeItem = QtGui.QStandardItem(assetType.getName()) assetTypeItem.type = assetType.getShort() self.assetTypeSelectorModel.appendRow(assetTypeItem)
def publishAsset(n, assetName, content, comment, shot, currentTask): header = getHeaderKnob(n) if not currentTask: header.setMessage('Could not find current task', 'warning') else: publishProgress = nuke.ProgressTask('Publishing assets') publishProgress.setProgress(0) currentTaskId = currentTask.getId() assetType = n['ftrackassettype'].value() publishProgress.setMessage('Validating asset types') try: ftrack.AssetType(assetType) except ftrack.FTrackError: header.setMessage( 'No Asset type with short name "{0}" found. Contact your ' 'system administrator to add it.'.format(assetType), 'warning') return publishProgress.setMessage('Creating new version') asset = shot.createAsset(assetName, assetType) assetVersion = asset.createVersion(comment=comment, taskid=currentTaskId) if assetType in ['img', 'cam', 'geo', 'render']: if assetType == 'img': imgAsset = nukeassets.ImageSequenceAsset() publishedComponents = imgAsset.publishContent( content, assetVersion, progressCallback=publishProgress.setProgress) elif assetType == 'cam': camAsset = nukeassets.CameraAsset() publishedComponents = camAsset.publishContent( content, assetVersion, progressCallback=publishProgress.setProgress) elif assetType == 'geo': geoAsset = nukeassets.GeometryAsset() publishedComponents = geoAsset.publishContent( content, assetVersion, progressCallback=publishProgress.setProgress) elif assetType == 'render': renderAsset = nukeassets.RenderAsset() publishedComponents = renderAsset.publishContent( content, assetVersion, progressCallback=publishProgress.setProgress) if n['fscript'].value(): if n['fcopy'].value(): temporaryPath = HelpFunctions.temporaryFile(suffix='.nk') nuke.scriptSave(temporaryPath) mainPath = temporaryPath else: if nuke.Root().name() == 'Root': tmp_script = tempfile.NamedTemporaryFile(suffix='.nk') curScript = nuke.toNode("root").name() nuke.scriptSaveAs(tmp_script.name) mainAbsPath = tmp_script.name else: mainAbsPath = nuke.root()['name'].value() mainPath = mainAbsPath publishedComponents.append( FTComponent(componentname='nukescript', path=mainPath)) if publishedComponents: pubObj = FTAssetObject(assetVersionId=assetVersion.getId()) connector.Connector.publishAssetFiles( publishedComponents, assetVersion, pubObj, copyFiles=n['fcopy'].value(), progressCallback=publishProgress.setProgress) else: header.setMessage("Can't publish this assettype yet", 'info') return publishProgress.setMessage('Setting up version dependencies') dependencies = get_dependencies() if dependencies: for name, version in dependencies.items(): assetVersion.addUsesVersions(versions=version) assetVersion.publish() publishProgress.setProgress(100) header.setMessage('Asset published!')