@api.route('/api/table-info/')
def table_info():
    columns = OrderedDict()
    for mancer in MANCERS:
        m = import_class(mancer)
        api_key = MANCER_KEYS.get(m.machine_name)
        try:
            m = m(api_key=api_key)
        except ImportError, e:
            continue
        col_info = m.get_metadata()
        for col in col_info:
            columns[col['table_id']] = {
              'table_id': col['table_id'],
              'human_name': col['human_name'],
              'mancer': m.name, 
              'columns': col['columns'],
              'source_url': col['source_url'],
            }
    response = []
    if request.args.get('table_id'):
        table_id = request.args['table_id']
        try:
            response.append(columns[table_id])
        except KeyError:
            response.append({
                'status': 'error',
                'message': 'table_id %s not found' % table_id
            })
    else:
        response.extend(columns.values())
    resp = make_response(json.dumps(response))
    resp.headers['Content-Type'] = 'application/json'
    return resp
Return a list of data sources
dataset/ETHPy150Open associatedpress/geomancer/geomancer/api.py/table_info