Beispiel #1
0
    def python_sub(self, match):
        if isinstance(match, str):
            code = match
        else:
            code = match.group()[3:-1]

        if self.varname:
            varname = 'Var <%s>' % self.varname
        else:
            varname = '<expansion>'
        codeobj = compile(code.strip(), varname, "eval")

        parser = bb.codeparser.PythonParser(self.varname, logger)
        parser.parse_python(code)
        if self.varname:
            vardeps = self.d.getVarFlag(self.varname, "vardeps")
            if vardeps is None:
                parser.log.flush()
        else:
            parser.log.flush()
        self.references |= parser.references
        self.execs |= parser.execs

        for k in parser.contains:
            if k not in self.contains:
                self.contains[k] = parser.contains[k].copy()
            else:
                self.contains[k].update(parser.contains[k])
        value = utils.better_eval(codeobj, DataContext(self.d), {'d': self.d})
        return str(value)
Beispiel #2
0
    def python_sub(self, match):
            if isinstance(match, str):
                code = match
            else:
                code = match.group()[3:-1]

            if "_remote_data" in self.d:
                connector = self.d["_remote_data"]
                return connector.expandPythonRef(self.varname, code, self.d)

            codeobj = compile(code.strip(), self.varname or "<expansion>", "eval")

            parser = bb.codeparser.PythonParser(self.varname, logger)
            parser.parse_python(code)
            if self.varname:
                vardeps = self.d.getVarFlag(self.varname, "vardeps")
                if vardeps is None:
                    parser.log.flush()
            else:
                parser.log.flush()
            self.references |= parser.references
            self.execs |= parser.execs

            for k in parser.contains:
                if k not in self.contains:
                    self.contains[k] = parser.contains[k].copy()
                else:
                    self.contains[k].update(parser.contains[k])
            value = utils.better_eval(codeobj, DataContext(self.d), {'d' : self.d})
            return str(value)
    def python_sub(self, match):
            code = match.group()[3:-1]
            codeobj = compile(code.strip(), self.varname or "<expansion>", "eval")

            parser = bb.codeparser.PythonParser()
            parser.parse_python(code)
            self.references |= parser.references
            self.execs |= parser.execs

            value = utils.better_eval(codeobj, DataContext(self.d))
            return str(value)
    def python_sub(self, match):
            code = match.group()[3:-1]
            codeobj = compile(code.strip(), self.varname or "<expansion>", "eval")

            parser = bb.codeparser.PythonParser()
            parser.parse_python(code)
            self.references |= parser.references
            self.execs |= parser.execs

            value = utils.better_eval(codeobj, DataContext(self.d))
            return str(value)
Beispiel #5
0
    def python_sub(self, match):
        code = match.group()[3:-1]
        codeobj = compile(code.strip(), self.varname or "<expansion>", "eval")

        parser = bb.codeparser.PythonParser(self.varname, logger)
        parser.parse_python(code)
        if self.varname:
            vardeps = self.d.getVarFlag(self.varname, "vardeps", True)
            if vardeps is None:
                parser.log.flush()
        else:
            parser.log.flush()
        self.references |= parser.references
        self.execs |= parser.execs

        value = utils.better_eval(codeobj, DataContext(self.d))
        return str(value)
Beispiel #6
0
    def python_sub(self, match):
            code = match.group()[3:-1]
            codeobj = compile(code.strip(), self.varname or "<expansion>", "eval")

            parser = bb.codeparser.PythonParser(self.varname, logger)
            parser.parse_python(code)
            if self.varname:
                vardeps = self.d.getVarFlag(self.varname, "vardeps", True)
                if vardeps is None:
                    parser.log.flush()
            else:
                parser.log.flush()
            self.references |= parser.references
            self.execs |= parser.execs

            value = utils.better_eval(codeobj, DataContext(self.d))
            return str(value)
Beispiel #7
0
    def visit_PythonSnippet(self, node, code=None):
        for subnode in node.field_components:
            self.visit(subnode)

        if code is None:
            code = self.correct_indent(str(node))

        code_obj = compile(code, "<string>", "exec", ast.PyCF_ONLY_AST)

        self.visitor = self.ValueVisitor(node)
        self.visitor.visit(code_obj)

        self.references.update(self.visitor.var_references)
        self.references.update(self.visitor.var_execs)
        self.calls = self.visitor.direct_func_calls
        env = {}
        for var in self.calls:
            try:
                func_obj = utils.better_eval(var, env)
                self.function_references.add((var, func_obj))
            except (NameError, AttributeError):
                pass
Beispiel #8
0
 def python_sub(match):
     code = match.group()[3:-1]
     codeobj = compile(code.strip(), varname or "<expansion>", "eval")
     value = utils.better_eval(codeobj, DataDict(self, d=self))
     return str(value)
Beispiel #9
0
 def python_sub(match):
     code = match.group()[3:-1]
     codeobj = compile(code.strip(), varname or "<expansion>", "eval")
     s = utils.better_eval(codeobj, {"d": self})
     if type(s) == types.IntType: s = str(s)
     return s
Beispiel #10
0
 def resolve(self):
     codeobj = compile(self.code().strip(), "<expansion>", "eval")
     try:
         value = str(utils.better_eval(codeobj, {"d": self.metadata}))
     except Exception, exc:
         raise PythonExpansionError(exc, self)