Пример #1
0
def GetAssetNameById(id):
    for t in ftrack.getAssetTypes():
        try:
            if t.get('typeid') == id:
                return t.get('name')
        except:
            return None
Пример #2
0
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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #7
0
    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
Пример #8
0
    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()
Пример #9
0
 def loadAssetTypes(self):
     '''Load asset types and add to selector.'''
     assetTypes = ftrack.getAssetTypes()
     assetTypes = sorted(assetTypes,
                         key=lambda assetType: assetType.getName())
     self.setItems(assetTypes)