示例#1
0
    def resourceFromPath(self, sEntryPath):

        proj = self.project

        drcEntry = proj.entryFromPath(sEntryPath, dbNode=False)
        if not drcEntry:
            return "", ""

        if drcEntry.isPublic():
            pubEntry = drcEntry
        else:
            pubEntry = drcEntry.getPublicFile(fail=True, dbNode=False)

        sPublicPath = pubEntry.absPath()

        pathIter = proj.iterRcPaths("public", self.confSection, tokens=vars(self))
        for sVar, sPath in pathIter:
            if pathEqual(sPath, sPublicPath):
                return sVar, sPath
示例#2
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