Exemple #1
0
    def contains(self, sAbsPath):

        sLibPath = normCase(self.absPath())
        sPathDirs = pathSplitDirs(normCase(sAbsPath))

        numDirs = len(pathSplitDirs(sLibPath))
        sAlignedPath = pathJoin(*sPathDirs[:numDirs])

        return sAlignedPath == sLibPath
Exemple #2
0
def projectNameFromPath(p):

    sConfPkg = os.environ.get("DAVOS_CONF_PACKAGE", "davos.config")
    pkg = importModule(sConfPkg)
    sPkgDirPath = os.path.dirname(pkg.__file__)

    sDirList = pathSplitDirs(p)

    for sFilename in os.listdir(sPkgDirPath):

        bIgnored = False
        for sPatrn in ("__*", ".*", "*.pyc"):
            if fnmatch(sFilename, sPatrn):
                bIgnored = True
                break

        if bIgnored:
            continue

        sModName = os.path.splitext(sFilename)[0]
        m = importModule(sConfPkg + "." + sModName)

        sProjDir = m.project.dir_name
        if sProjDir in sDirList:
            return sModName

    return ""
Exemple #3
0
def _belowPack(p):

    p = osp.dirname(p)
    for sDirName in pathSplitDirs(p):
        if _isPack(sDirName):
            return True

    return False
Exemple #4
0
    def sectionFromPath(self, sEntryPath, library=None):

        sEntryPath = normCase(sEntryPath)
        sEntryPathDirs = pathSplitDirs(normCase(sEntryPath))

        sectionDataList = sorted(self.iterSectionPaths(library=library),
                                 key=lambda x: len(x[2]),
                                 reverse=True)

        for sSpace, sSection, sSectionPath in sectionDataList:
            if pathStartsWith(sEntryPath, sSectionPath, pathSplits=sEntryPathDirs):
                return sSpace, sSection

        return "", ""
    def fromPaths(cls, paths):

        tree = cls()
        for p in paths:

            dirs = pathSplitDirs(p)

            children = tree
            for d in dirs:
                if d not in children:
                    nxtChilds = cls()
                    children[d] = nxtChilds
                else:
                    nxtChilds = children[d]

                children = nxtChilds

        return tree
    def fromPaths(cls, paths):

        tree = cls()
        for p in paths:

            dirs = pathSplitDirs(p)

            children = tree
            for d in dirs:
                if d not in children:
                    nxtChilds = cls()
                    children[d] = nxtChilds
                else:
                    nxtChilds = children[d]

                children = nxtChilds

        return tree
def launch_old(entityType="", dryRun=True, project="", dialogParent=None):

    global TREE_ITEM_DCT
    TREE_ITEM_DCT = {}

    app = qtGuiApp()
    if not app:
        app = QtGui.QApplication(sys.argv)

    sProject = os.environ["DAVOS_INIT_PROJECT"] if not project else project
    proj = DamProject(sProject)
    print sProject.center(80, "-")

    dlg = QuickTreeDialog(dialogParent)
    treeWdg = dlg.treeWidget
    treeWdg.setHeaderLabels(("Entity Name", "Infos"))

    dlg.show()

    missingPathItems = listMissingPathItems(proj, entityType)

    badEntityItems = []
    for damEntity, sMissingPaths in missingPathItems:

        if isinstance(damEntity, basestring):
            badEntityItems.append((damEntity, sMissingPaths))
            continue

        drcLib = proj.getLibrary("public", damEntity.libraryName)
        sLibPath = drcLib.absPath()
        sEntityTitle = damEntity.sgEntityType + 's'

        sEntityPath = damEntity.getPath("public")
        sEntityPath = re.sub("^" + sLibPath, sEntityTitle, sEntityPath)
        sEntityPathDirs = pathSplitDirs(sEntityPath)

        for sAbsPath in sMissingPaths:

            sTreePath = re.sub("^" + sLibPath, sEntityTitle, sAbsPath)

            sParentPath, sFilename = osp.split(pathNorm(sTreePath))
            parentItem = TREE_ITEM_DCT.get(sParentPath)
            if not parentItem:
                sDirList = pathSplitDirs(sParentPath)
                curParentItem = treeWdg
                for i, sDirName in enumerate(sDirList):
                    if i == 0:
                        sItemPath = sDirName
                    else:
                        sItemPath = pathJoin(*sDirList[:i + 1])

                    item = TREE_ITEM_DCT.get(sItemPath)
                    if not item:
                        flags = None
                        if sItemPath.startswith(sEntityPath):
                            if len(pathSplitDirs(sItemPath)) > len(sEntityPathDirs):
                                flags = Qt.NoItemFlags

                        userData = None
                        if sItemPath == sEntityPath:
                            userData = damEntity

                        item = loadTreeItem(curParentItem, sItemPath, [sDirName],
                                            flags=flags, userData=userData)

                    curParentItem = item

                parentItem = curParentItem

            flags = None
            if sTreePath.startswith(sEntityPath):
                if len(pathSplitDirs(sTreePath)) > len(sEntityPathDirs):
                    flags = Qt.NoItemFlags

            userData = None
            if sTreePath == sEntityPath:
                userData = damEntity

            loadTreeItem(parentItem, sTreePath, [sFilename], flags=flags, userData=userData)


    if badEntityItems:

        errorsItem = loadTreeItem(None, "Errors", ["ERRORS"])
        treeWdg.insertTopLevelItem(0, errorsItem)

        for sEntityName, sError in badEntityItems:
            loadTreeItem(errorsItem, sEntityName, [sEntityName, sError],
                         checkable=False)

    for i in xrange(treeWdg.topLevelItemCount()):
        treeWdg.topLevelItem(i).setExpanded(True)

    while True:

        bOk = dlg.exec_()
        if not bOk:
            return

        bApply = False

        flags = (QTreeWidgetItemIterator.Checked | QTreeWidgetItemIterator.Enabled)
        treeIter = QTreeWidgetItemIterator(treeWdg, flags)
        damEntities = tuple(it.value().data(0, Qt.UserRole) for it in treeIter)
        damAssets = tuple(e for e in damEntities if isinstance(e, DamAsset))
        damShots = tuple(e for e in damEntities if isinstance(e, DamShot))
        if damAssets or damShots:

            sMsg = "Create directories and files for:\n"
            if damAssets:
                sMsg += "\n     - {} Assets".format(len(damAssets))

            if damShots:
                sMsg += "\n     - {} Shots".format(len(damShots))

            sConfirm = confirmDialog(title="WARNING !",
                                     message=sMsg,
                                     button=("Yes", "No"),
                                     defaultButton="No",
                                     cancelButton="No",
                                     dismissString="No",
                                     icon="warning",
                                    )

            if sConfirm == "Yes":
                bApply = True
                break

    if bApply:
        for damEntity in damEntities:
            if not damEntity:
                continue
            damEntity.createDirsAndFiles(dryRun=dryRun)
Exemple #8
0
 def sortValue(sRcPath):
     n = len(pathSplitDirs(sRcPath))
     if n == numPubDirs:
         return sys.maxint
     else:
         return n
Exemple #9
0
    def contextFromPath(self, entryObjOrPath, library=None, warn=True):

        if isinstance(entryObjOrPath, DrcEntry):
            drcEntry = entryObjOrPath
            library = drcEntry.library
        else:
            drcEntry = self.entryFromPath(entryObjOrPath, library=library,
                                          dbNode=False, weak=True, warn=warn)
            if not drcEntry:
                logMsg("no entry found for '{}'".format(entryObjOrPath), log="debug")
                return {"abs_path":entryObjOrPath, "rc_entry":None}
            elif not library:
                library = drcEntry.library

        sAbsPath = drcEntry.absPath()
        ctxData = {"abs_path":sAbsPath, "rc_entry":drcEntry}
        sFoundRcName = ""
        bExactRc = False
        if drcEntry == library:
            sSection = library.sectionName
            sSpace = library.space
        else:
            sSpace, sSection = self.sectionFromPath(sAbsPath, library=library)
            if not sSection:
                logMsg("no section found for '{}'".format(sAbsPath), log="debug")
                return ctxData

            bIsFile = isinstance(drcEntry, DrcFile)
            if not drcEntry.isPublic():
                if bIsFile:
                    pubEntry = drcEntry.getPublicFile(fail=True, weak=True, dbNode=False)
                else:
                    pubEntry = drcEntry.getHomonym("public", weak=True)
            else:
                pubEntry = drcEntry

            pubLib = pubEntry.library

            if bIsFile and pubEntry.isVersionFile():
                ctxData["version"] = pubEntry.versionFromName()
                pubEntry = pubEntry.getHeadFile(fail=True, dbNode=False)

            sPublicPath = pubEntry.absPath()
            sPubPathDirs = pathSplitDirs(sPublicPath)
            numPubDirs = len(sPubPathDirs)

            def sortValue(sRcPath):
                n = len(pathSplitDirs(sRcPath))
                if n == numPubDirs:
                    return sys.maxint
                else:
                    return n

            sRcPathList = sorted(self.iterRcPaths("public", sSection, resVars=True),
                                 key=lambda x: sortValue(x[1]), reverse=True)

            sSectionPath = self.getPath("public", sSection, default="", resVars=False)
            if sSectionPath:
                sRcPathList.append(("", sSectionPath))

            parseRes = None
            sCurPubPath = sPublicPath
            numCurPubDirs = numPubDirs
            while (not sFoundRcName) and (not pathEqual(sCurPubPath, pubLib.absPath())):

                for sRcName, sRcPath in sRcPathList:
                    numRcDirs = len(pathSplitDirs(sRcPath))
                    if numRcDirs != numCurPubDirs:
                        continue

                    parseRes = pathParse(sRcPath, sCurPubPath)
                    #print "\n", sRcPath, sCurPubPath, parseRes, sRcName
                    if parseRes and parseRes.named:

                        sFoundRcName = sRcName
                        if numRcDirs == numPubDirs:
                            bExactRc = True
                            #print sRcName
                        break

                sCurPubPath = osp.dirname(sCurPubPath)
                numCurPubDirs = len(pathSplitDirs(sCurPubPath))

            if not parseRes:
                logMsg("no parsing results for '{}'".format(sCurPubPath), log="debug")
                return ctxData

            ctxData.update(parseRes.named)

        ctxData["section"] = sSection
        ctxData["space"] = sSpace
        ctxData["library"] = library

        if sFoundRcName:
            sRawRcPath = self.getPath("public", sSection, sFoundRcName, resVars=False)
            parseRes = pathParse(sRawRcPath, sPublicPath)
            ctxData.update((k, v) for k, v in parseRes.named.iteritems()
                                    if k not in ctxData)
            if bExactRc:
                ctxData["resource"] = sFoundRcName

        sStepDir = ctxData.get("step", "")
        if sStepDir:
            sSgStepDct = self.getVar(sSection, "sg_step_map", default={})
            if sStepDir in sSgStepDct:
                ctxData['sg_step'] = sSgStepDct[sStepDir]

        damEntity = None
        if "name" in ctxData:
            damEntity = self._entityFromContext(ctxData, fail=False)

        ctxData["dam_entity"] = damEntity

        return ctxData