def trace_func(frame, event, _arg): filename = frame.f_code.co_filename if event == "call": if include_file(filename): return trace_func elif event == "line": lineno = frame.f_lineno queues[filename].append(lineno) totals[filename][lineno] += 1 Source.lazycache(frame)
def tester(arg, returns=None): frame = inspect.currentframe().f_back Source.lazycache(frame) call = Source.executing(frame).node result = eval( compile(ast.Expression(only(call.args)), '<>', 'eval'), frame.f_globals, frame.f_locals, ) assert result == result, (result, arg) if returns is None: return arg return returns
def get_node(self, typ): frame = inspect.currentframe().f_back.f_back Source.lazycache(frame) node = Source.executing(frame).node assert isinstance(node, typ), (node, typ) return node
def get_executing(self, frame): Source.lazycache(frame) return Source.executing(frame)