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)
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)
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)
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)
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
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)
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
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)