Beispiel #1
0
def calls_by_body_hash(session, body_hash):
    query = (session.query(*Call.basic_columns + (Function.data,))
                 .join(Function)
                 .filter_by(body_hash=body_hash)
                 .order_by(Call.start_time.desc())[:200])

    calls = [Call.basic_dict(withattrs(Call(), **row._asdict()))
             for row in query]

    function_data_set = {row.data for row in query}
    ranges = set()
    loop_ranges = set()
    for function_data in function_data_set:
        function_data = json.loads(function_data)

        def add(key, ranges_set):
            for node in function_data[key]:
                ranges_set.add((node['start'], node['end']))

        add('node_ranges', ranges)

        # All functions are expected to have the same set
        # of loop nodes
        current_loop_ranges = set()
        add('loop_ranges', current_loop_ranges)
        assert loop_ranges in (set(), current_loop_ranges)
        loop_ranges = current_loop_ranges

    ranges = [dict(start=start, end=end) for start, end in ranges]
    loop_ranges = [dict(start=start, end=end) for start, end in loop_ranges]

    return DecentJSONEncoder().encode(dict(
        calls=calls, ranges=ranges, loop_ranges=loop_ranges))
Beispiel #2
0
def func_view(session, path, func_name):
    path = fix_abs_path(path)
    query = get_calls(session, path, func_name, 200)
    if query:
        func = query[0]
        calls = [withattrs(Call(), **row._asdict()) for row in query]
    else:
        func = session.query(Function).filter_by(file=path, name=func_name)[0]
        calls = None

    return render_template('function.html',
                           func=func,
                           short_path=basename(path),
                           calls=calls)
Beispiel #3
0
def func_view(path, func_name):
    session = Session()
    query = (session.query(*(Call.basic_columns +
                             Function.basic_columns)).join(Function).filter_by(
                                 file=path, name=func_name).order_by(
                                     Call.start_time.desc())[:200])
    if query:
        func = query[0]
        calls = [withattrs(Call(), **row._asdict()) for row in query]
    else:
        func = session.query(Function).filter_by(file=path, name=func_name)[0]
        calls = None

    return render_template('function.html', func=func, calls=calls)
Beispiel #4
0
 def decorator(f):
     return withattrs(f, **attrs)