Пример #1
0
            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)
Пример #2
0
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)