Exemple #1
0
    def checkCache(self, fileId, variants, optimize, format=False):
        filePath = self._classes[fileId]["path"]

        classVariants     = self._classesObj[fileId].classVariants()
        relevantVariants  = Class.projectClassVariantsToCurrent(classVariants, variants)
        variantsId = util.toString(relevantVariants)

        optimizeId = self.generateOptimizeId(optimize)

        cacheId = "compiled-%s-%s-%s-%s" % (filePath, variantsId, optimizeId, format)
        compiled, _ = self._cache.read(cacheId, filePath)

        return cacheId, compiled
Exemple #2
0
    def checkCache(self, fileId, variants, optimize, format=False):
        filePath = self._classes[fileId]["path"]

        classVariants = self._classesObj[fileId].classVariants()
        relevantVariants = Class.projectClassVariantsToCurrent(
            classVariants, variants)
        variantsId = util.toString(relevantVariants)

        optimizeId = self.generateOptimizeId(optimize)

        cacheId = "compiled-%s-%s-%s-%s" % (filePath, variantsId, optimizeId,
                                            format)
        compiled, _ = self._cache.read(cacheId, filePath)

        return cacheId, compiled
Exemple #3
0
    def getTranslation(self, fileId, variants):
        fileEntry = self._classes[fileId]
        filePath = fileEntry["path"]

        classVariants     = self._classesObj[fileId].classVariants()
        relevantVariants  = Class.projectClassVariantsToCurrent(classVariants, variants)
        variantsId        = util.toString(relevantVariants)

        cacheId = "translation-%s-%s" % (filePath, variantsId)

        translation = self._cache.readmulti(cacheId, filePath)
        if translation != None:
            return translation

        self._console.debug("Looking for translation strings: %s..." % fileId)
        self._console.indent()

        #tree = self._treeLoader.getTree(fileId, variants)
        tree = self._classesObj[fileId].tree(variants)

        try:
            translation = self._findTranslationBlocks(tree, [])
        except NameError, detail:
            raise RuntimeError("Could not extract translation from %s!\n%s" % (fileId, detail))
Exemple #4
0
    def getDeps(self, fileId, variants):

        ##
        # Wrapper around the tree recurser, _analyzeClassDepsNode
        def analyzeClassDeps(fileId, variants):

            loadtimeDeps = []
            runtimeDeps  = []
            undefDeps    = []

            tree = self._classesObj[fileId].tree(variants)
            self._analyzeClassDepsNode(fileId, tree, loadtimeDeps, runtimeDeps, undefDeps, False, variants)

            return loadtimeDeps, runtimeDeps, undefDeps

        ##
        # Handle meta hints and call analyzeClassDeps
        def buildShallowDeps():
            # Notes:
            # load time = before class = require
            # runtime = after class = use

            load   = []
            run    = []
            ignore = [DependencyItem(x,-1) for x in self._defaultIgnore]

            self._console.debug("Gathering dependencies: %s" % fileId)
            self._console.indent()

            # Read meta data
            meta         = self.getMeta(fileId)
            metaLoad     = meta.get("loadtimeDeps", [])
            metaRun      = meta.get("runtimeDeps" , [])
            metaOptional = meta.get("optionalDeps", [])
            metaIgnore   = meta.get("ignoreDeps"  , [])

            # Process meta data
            load.extend(DependencyItem(x,-1) for x in metaLoad)
            run.extend(DependencyItem(x,-1) for x in metaRun)
            ignore.extend(DependencyItem(x,-1) for x in metaIgnore)

            # Read content data
            (autoLoad, autoRun, autoWarn) = analyzeClassDeps(fileId, variants)
            
            # Process content data
            if not "auto-require" in metaIgnore:
                for dep in autoLoad:
                    item = dep.name
                    if item in metaOptional:
                        pass
                    elif item in (x.name for x in load):
                        self._console.warn("%s: #require(%s) is auto-detected" % (fileId, item))
                    else:
                        load.append(dep)

            if not "auto-use" in metaIgnore:
                for dep in autoRun:
                    item = dep.name
                    if item in metaOptional:
                        pass
                    elif item in (x.name for x in load):
                        pass
                    elif item in (x.name for x in run):
                        self._console.warn("%s: #use(%s) is auto-detected" % (fileId, item))
                    else:
                        run.append(dep)

            self._console.outdent()

            # Build data structure
            deps = {
                "load"   : load,
                "run"    : run,
                "ignore" : ignore,
                'undef'  : autoWarn
            }

            return deps

        # -- Main ---------------------------------------------------------

        #
        # Handle caching and invoke buildShallowDeps
        #

        if fileId not in self._classesObj:
            raise NameError("Could not find class to fulfill dependency: %s" % fileId)

        clazz            = self._classesObj[fileId]
        filePath         = clazz.path
        classVariants    = clazz.classVariants()
        #classVariants    = variants.keys()  # a do-nothing alternative
        relevantVariants = Class.projectClassVariantsToCurrent(classVariants, variants)
        cacheId = "deps-%s-%s" % (filePath, util.toString(relevantVariants))

        # print "Read from cache: %s" % fileId
        
        deps = self._cache.readmulti(cacheId, filePath)
        if deps == None:
            deps = buildShallowDeps()
            self._cache.writemulti(cacheId, deps)
        
        #deps = self._traverseDependencies(deps)
        return deps