def GetAssetNameById(id): for t in ftrack.getAssetTypes(): try: if t.get('typeid') == id: return t.get('name') except: return None
def get_asset_name_by_id(id): for t in ftrack.getAssetTypes(): try: if t.get('typeid') == id: return t.get('name') except: return None
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 = ftrackConnector.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 __init__(self, parent, task=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_ListAssets() self.ui.setupUi(self) self.currentAssetType = None self.ui.ListAssetsViewModel = QtGui.QStandardItemModel() self.ui.ListAssetsSortModel = QtGui.QSortFilterProxyModel() self.ui.ListAssetsSortModel.setDynamicSortFilter(True) self.ui.ListAssetsSortModel.setFilterKeyColumn(1) self.ui.ListAssetsSortModel.setSourceModel(self.ui.ListAssetsViewModel) self.ui.ListAssetsView.setModel(self.ui.ListAssetsSortModel) self.ui.ListAssetsComboBoxModel = QtGui.QStandardItemModel() assetTypes = ftrack.getAssetTypes() assetTypes = sorted(assetTypes, key=lambda a: a.getName().lower()) assetTypeItem = QtGui.QStandardItem('Show All') self.ui.ListAssetsComboBoxModel.appendRow(assetTypeItem) for assetType in assetTypes: assetTypeItem = QtGui.QStandardItem(assetType.getName()) assetTypeItem.type = assetType.getShort() self.ui.ListAssetsComboBoxModel.appendRow(assetTypeItem) self.ui.ListAssetsComboBox.setModel(self.ui.ListAssetsComboBoxModel)
def launch(self, event): if "values" in event["data"]: success = True msg = "" try: for item in event["data"]["selection"]: values = event["data"]["values"] task = ftrack.Task(item["entityId"]) parent = task.getParent() version_name = values["version_name"] version_type = values["version_type"] asset = parent.createAsset(name=version_name, assetType=version_type) version = asset.createVersion(taskid=task.getId()) version.publish() version.set("version", value=int(values["version_number"])) msg = "Version %s " % values["version_name"] msg += "v%s created." % values["version_number"].zfill(3) except Exception as e: self.logger.error(traceback.format_exc()) success = False msg = str(e) return { "success": success, "message": msg } asset_types = [] for at in ftrack.getAssetTypes(): asset_types.append({"label": at.getName(), "value": at.getShort()}) return { "items": [ { "label": "Version Name", "type": "text", "name": "version_name", }, { "label": "Version Type", "type": "enumerator", "name": "version_type", "data": asset_types }, { "label": "Version Number", "type": "number", "name": "version_number", } ] }
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 renameandcopytoVFX(self, copypath, FTRACK_SERVER='http://192.168.9.200', FTRACK_APIKEY='b445309f-1c5d-40ac-b68b-3fdfb4f3ccb9', LOGNAME='andyguo', PROJECTNAME='Piggy Bank' ): digitregex = re.compile(r'(\d{3,})') os.environ['FTRACK_SERVER'] = FTRACK_SERVER os.environ['FTRACK_APIKEY'] = FTRACK_APIKEY os.environ['LOGNAME'] = LOGNAME import ftrack try: project = ftrack.getProject(PROJECTNAME) print('== get asset types ==') platetypes = [x for x in ftrack.getAssetTypes() if x.get('name') == 'Plate'] # print(platetypes) print('== get task types ==') tasktypes = [x for x in ftrack.getTaskTypes() if x.get('name') == 'Plate'] # print(tasktypes) except: print('this project not available in ftrack') for j in xrange(len(self._cliplist)): # rename every frame as VFX needs item = self._cliplist[j] duration = int(item['endframe']) - int(item['startframe']) + 1 for i in xrange(duration): # diframe = str(item['startframe'] + i).zfill(m.end() - m.start()) oldname = item['metadata'][i]['filepath'] newname = item['sequence'][0] + '_' + item['shot'][0] + '_plate_' + ('%04d' % (1001 + i)) + \ os.path.splitext(oldname)[-1] try: newname = os.path.join(os.path.dirname(oldname), newname) os.rename(oldname, newname) except: print('something error in rename files') # print(oldname, newname) copyfoldername = os.path.dirname(oldname) if self._shouldrenamefolder: oldfolder = os.path .dirname(oldname) newfolder = os.path.join(os.path.dirname(os.path.dirname(oldname)), ('%04d' % (j + 1)) + '_' + item['sequence'][0] + '_' + item['shot'][0]) # print(oldfolder, newfolder) try: os.rename(oldfolder, newfolder) copyfoldername = newfolder except: print('something error in rename folders') # copy to NAS using rsync cmd = 'rsync -avr --progress %s %s' % (copyfoldername.replace(' ', r'\ '), copypath.replace(' ', '\ ')) print(cmd) terminal = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, bufsize=1) with terminal.stdout: for line in iter(terminal.stdout.readline, b''): print line, terminal.wait() # update ftrack Assetbuild and shot try: print('== update shot info ==') shot = ftrack.getShot([PROJECTNAME, item['sequence'][0], item['shot'][0]]) except: print('no such shot %s_%s' % (item['sequence'][0], item['shot'][0])) break try: assetbuildname = '%s_%s_plate' % (item['sequence'][0], item['shot'][0]) previousvesions = [x for x in ftrack.getShot([PROJECTNAME, 'Asset builds']).getShots() if assetbuildname in x.getName()] # print(previousvesions) print('== check previous versions ==') if len(previousvesions) > 0: # print('already got %d verions' % len(previousvesions)) assetbuildname = '%s_%s_plate_%02d' % (item['sequence'][0], item['shot'][0], len(previousvesions)+1) else: assetbuildname = '%s_%s_plate_01' % (item['sequence'][0], item['shot'][0]) print('== create new assetbuild ==') newassetbuild = project.createAssetBuild(assetbuildname) newassetbuild.set('typeid', tasktypes[0].get('typeid')) temp = {} temp['01_sequence'] = item['sequence'][0] temp['02_shot'] = item['shot'][0] temp['05_s3d'] = item['s3d'] temp['06_metadata'] = str(item['metadata']) temp['03_startframe'] = item['startframe'] temp['04_endframe'] = item['endframe'] newassetbuild.setMeta(temp) print('== create new asset ==') asset = newassetbuild.createAsset(name=assetbuildname, assetType=platetypes[0].get('short')) version = asset.createVersion(comment='uploaded by IOFTRACK') for index, frame in enumerate(item['metadata']): # print(item['sequence'][0] + '_' + item['shot'][0] # + '_plate_' + # ('%04d' % (1001 + index)) + # os.path.splitext(oldname)[-1] # ) version.createComponent(name=(item['sequence'][0] + '_' + item['shot'][0] + '_plate_' + ('%04d' % (1001 + index)) + os.path.splitext(oldname)[-1] ), path=(item['sequence'][0] + '_' + item['shot'][0] + '_plate_' + ('%04d' % (1001 + index)) + os.path.splitext(oldname)[-1] )) asset.publish() try: print('== link asset to shot and link reverse ==') # print('asset', newassetbuild) # print('shot', shot) newassetbuild.addSuccessor(shot) newassetbuild.addPredecessor(shot) except: print('something error in link asset to shot') break newassetbuild.createTask('upload by IO', taskType=[x for x in ftrack.getTaskTypes() if x.get('name') == 'Plate'][0], taskStatus=[y for y in ftrack.getTaskStatuses() if y.get('name') == 'Approved'][0]) try: print('== create thumbnails ==') convertcmd = 'convert %s -size 1280x720 %s' % ( os.path.join(os.path.dirname(item['metadata'][0]['filepath']), (item['sequence'][0] + '_' + item['shot'][0] + '_plate_' + ('%04d' % (1001)) + os.path.splitext(oldname)[-1] )).replace(' ', r'\ '), os.path.join(APP_PATH, assetbuildname+'.jpg').replace(' ', r'\ ')) print(convertcmd) convermessage = subprocess.Popen(convertcmd, shell=True, stdout=subprocess.PIPE).communicate()[0] newassetbuild.createThumbnail(os.path.join(APP_PATH, assetbuildname + '.jpg')) except: print('== something error in creating thumbnails') except: print('something error with creating assetbuild') break
def __init__(self, parent, task=None, connector=None): '''Instantiate asset manager with *connector*.''' QtWidgets.QWidget.__init__(self, parent) if not connector: raise ValueError( 'Please provide a connector object for {0}'.format( self.__class__.__name__)) self.connector = connector self.ui = Ui_AssetManager() self.ui.setupUi(self) self.setMinimumWidth(500) self.ui.AssertManagerTableWidget.setSortingEnabled(True) self.ui.AssertManagerTableWidget.setShowGrid(False) self.ui.AssertManagerTableWidget.verticalHeader().hide() self.ui.AssertManagerTableWidget.setColumnCount(16) self.ui.AssertManagerTableWidget.horizontalHeader( ).setDefaultSectionSize(65) self.ui.AssertManagerTableWidget.setColumnWidth(0, 20) self.ui.AssertManagerTableWidget.setColumnWidth(5, 55) self.ui.AssertManagerTableWidget.setColumnWidth(6, 65) self.ui.AssertManagerTableWidget.setColumnWidth(9, 20) self.ui.AssertManagerTableWidget.setColumnWidth(10, 20) self.ui.AssertManagerTableWidget.setColumnWidth(11, 20) self.ui.AssertManagerTableWidget.setColumnWidth(15, 20) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( QtWidgets.QHeaderView.Stretch) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 0, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 5, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 6, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 9, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 10, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 11, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.horizontalHeader().setResizeMode( 15, QtWidgets.QHeaderView.Fixed) self.ui.AssertManagerTableWidget.setColumnHidden(2, True) self.ui.AssertManagerTableWidget.setColumnHidden(3, True) self.ui.AssertManagerTableWidget.setColumnHidden(6, True) self.ui.AssertManagerTableWidget.setColumnHidden(10, True) self.ui.AssertManagerTableWidget.setColumnHidden(12, True) self.ui.AssertManagerTableWidget.setColumnHidden(13, True) self.ui.AssertManagerTableWidget.setColumnHidden(14, True) self.columnHeaders = [ '', 'Component', 'CmpId', 'AssetTypeShort', 'Type', 'Version', 'LatestV', 'Name', 'SceneName', '', '', '', 'AssetId', 'AssetVersionId', 'CurrentVersionFallback', '' ] self.ui.AssertManagerTableWidget.setHorizontalHeaderLabels( self.columnHeaders) self.ui.AssetManagerComboBoxModel = QtGui.QStandardItemModel() assetTypes = ftrack.getAssetTypes() assetTypes = sorted(assetTypes, key=lambda a: a.getName().lower()) assetTypeItem = QtGui.QStandardItem('Show All') self.ui.AssetManagerComboBoxModel.appendRow(assetTypeItem) for assetType in assetTypes: assetTypeItem = QtGui.QStandardItem(assetType.getName()) assetTypeItem.type = assetType.getShort() self.ui.AssetManagerComboBoxModel.appendRow(assetTypeItem) self.ui.AssetManagerComboBox.setModel( self.ui.AssetManagerComboBoxModel) self.signalMapperSelect = QtCore.QSignalMapper() self.signalMapperSelect.mapped[str].connect(self.selectObject) self.signalMapperRemove = QtCore.QSignalMapper() self.signalMapperRemove.mapped[str].connect(self.removeObject) self.signalMapperComment = QtCore.QSignalMapper() self.signalMapperComment.mapped[str].connect(self.openComments) extraOptionsMenu = QtWidgets.QMenu(self.ui.menuButton) extraOptionsMenu.addAction('Get SceneSelection', self.getSceneSelection) extraOptionsMenu.addAction('Set SceneSelection', self.setSceneSelection) self.ui.menuButton.setMenu(extraOptionsMenu) self.refreshAssetManager()
def loadAssetTypes(self): '''Load asset types and add to selector.''' assetTypes = ftrack.getAssetTypes() assetTypes = sorted(assetTypes, key=lambda assetType: assetType.getName()) self.setItems(assetTypes)