def geo_types(): """ Return a list of tables grouped by geo_type """ ordered_types = None if request.args.get('geo_type'): ordered_types = get_geo_types(request.args.get('geo_type')) else: ordered_types = get_geo_types() resp = make_response(json.dumps(ordered_types, cls=GeoTypeEncoder)) resp.headers['Content-Type'] = 'application/json' return resp
def select_geo(): if not session.get('file'): return redirect(url_for('views.index')) context = {} if request.method == 'POST': inp = StringIO(session['file']) reader = UnicodeCSVReader(inp) header = reader.next() fields = {} geo_type = None valid = True if not request.form: valid = False context['errors'] = ['Select a field that contains a geography type'] else: for k,v in request.form.items(): if k.startswith("geotype"): geo_type = v index = int(k.split('_')[1]) fields[header[index]] = { 'geo_type': v, 'column_index': index } found_geo_type = get_geo_types(geo_type)[0]['info'] sample_as_list = session['sample_data'][index][2].split(', ') valid = validate_geo_type(found_geo_type, sample_as_list) context['errors'] = ['The column you selected must be formatted like "%s" to match on %s geographies. Please pick another column or change the format of your data.' % (found_geo_type.formatting_example, found_geo_type.human_name)] if valid: mancer_data = get_data_sources(geo_type) session.update({'fields': fields, 'mancer_data': mancer_data}) return redirect(url_for('views.select_tables')) return render_template('select_geo.html', **context)
def do_the_work(file_contents, field_defs, filename): """ field_defs looks like: { 10: { 'type': 'city_state', 'append_columns': ['total_population', 'median_age'] } } or like this: { 10;2: { 'type': 'city;state', 'append_columns': ['total_population', 'median_age'] } } where the semicolon separated values represent a multicolumn geography file_contents is a string containing the contents of the uploaded file. """ contents = StringIO(file_contents) reader = UnicodeCSVReader(contents) header = reader.next() result = None geo_ids = set() mancer_mapper = {} fields_key = field_defs.keys()[0] errors = [] geo_type, col_idxs, val_fmt = find_geo_type(field_defs[fields_key]['type'], fields_key) geo_name = get_geo_types(geo_type=geo_type)[0][0]['info'].human_name 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: errors.append(e.message) continue mancer_cols = [c['table_id'] for c in m.get_metadata()] for k, v in field_defs.items(): field_cols = v['append_columns'] for f in field_cols: if f in mancer_cols: mancer_mapper[f] = { 'mancer': m, 'geo_id_map': {}, 'geo_ids': set(), 'geo_type': geo_type, }
def select_geo(): if not session.get('file'): return redirect(url_for('views.index')) context = {} if request.method == 'POST': inp = StringIO(session['file']) reader = UnicodeCSVReader(inp) header = reader.next() fields = {} geo_type = None valid = True if not request.form: valid = False context['errors'] = [ 'Select a field that contains a geography type' ] else: for k, v in request.form.items(): if k.startswith("geotype"): geo_type = v index = int(k.split('_')[1]) fields[header[index]] = { 'geo_type': v, 'column_index': index } found_geo_type = get_geo_types(geo_type)[0]['info'] sample_as_list = session['sample_data'][index][2].split(', ') valid = validate_geo_type(found_geo_type, sample_as_list) context['errors'] = [ 'The column you selected must be formatted like "%s" to match on %s geographies. Please pick another column or change the format of your data.' % (found_geo_type.formatting_example, found_geo_type.human_name) ] if valid: mancer_data = get_data_sources(geo_type) session.update({'fields': fields, 'mancer_data': mancer_data}) return redirect(url_for('views.select_tables')) return render_template('select_geo.html', **context)
def geographies(): geographies, errors = get_geo_types() for error in errors: flash(error) return render_template('geographies.html', geographies=geographies)
def geographies(): geographies = get_geo_types() return render_template('geographies.html', geographies=geographies)