def downloader_worker(): lambda_result = awslambda.generate_cartogram( map_handler.gen_area_data(areas), map_handler.get_gen_file(), settings.CARTOGRAM_LAMBDA_URL, settings.CARTOGRAM_LAMDA_API_KEY, unique_key) cartogram_gen_output = lambda_result['stdout'] q.put(cartogram_gen_output)
def cartogram(): if 'handler' not in request.form: return Response('{"error":"badrequest"}', status=400, content_type="application/json") if request.form['handler'] not in cartogram_handlers: return Response('{"error":"badhandler"}', status=404, content_type="application/json") handler = request.form['handler'] cartogram_handler = cartogram_handlers[handler] if 'values' not in request.form: return Response('{"error":"badrequest"}', status=400, content_type="application/json") values = request.form['values'].split(";") # The existing verificaiton code expects all floats. To avoid modifying it, we replace the string "NA" with the # number 0.0 for verification purposes only. values_to_verify = [] try: for i in range(len(values)): if values[i] == "NA": values_to_verify.append(0.0) else: values[i] = float(values[i]) values_to_verify.append(values[i]) except ValueError: return Response('{"error":"badvalues"}', status=400, content_type="application/json") if cartogram_handler.validate_values(values_to_verify) != True: return Response('{"error":"badvalues"}', status=400, content_type="application/json") unique_sharing_key = "" if 'unique_sharing_key' in request.form: unique_sharing_key = request.form['unique_sharing_key'] lambda_result = awslambda.generate_cartogram( cartogram_handler.gen_area_data(values), cartogram_handler.get_gen_file(), settings.CARTOGRAM_LAMBDA_URL, settings.CARTOGRAM_LAMDA_API_KEY, unique_sharing_key) cartogram_gen_output = lambda_result['stdout'] if cartogram_handler.expect_geojson_output(): # Just confirm that we've been given valid JSON. Calculate the extrema if necessary cartogram_json = json.loads(cartogram_gen_output) if "bbox" not in cartogram_json: cartogram_json["bbox"] = geojson_extrema.get_extrema_from_geojson( cartogram_json) else: cartogram_json = gen2dict.translate(io.StringIO(cartogram_gen_output), settings.CARTOGRAM_COLOR, cartogram_handler.remove_holes()) cartogram_json['unique_sharing_key'] = unique_sharing_key if settings.USE_DATABASE: cartogram_entry = CartogramEntry.query.filter_by( string_key=unique_sharing_key).first() if cartogram_entry != None: cartogram_entry.cartogram_data = json.dumps(cartogram_json) db.session.commit() return Response(json.dumps({'cartogram_data': cartogram_json}), content_type='application/json', status=200)