Ejemplo n.º 1
0
def api_project_storage_settings():
    """ Set project storage settings: Amazon S3, Google CS, local file storages.
        Source storages store input tasks in json formats.
        Target storage store completions with labeling results
    """

    # GET: return selected form, populated with current storage parameters
    if request.method == 'GET':
        # render all forms for caching in web
        all_forms = {'source': {}, 'target': {}}
        for storage_for in all_forms:
            for name, description in g.project.get_available_storage_names(storage_for).items():
                current_type = g.project.config.get(storage_for, {'type': ''})['type']
                current = name == current_type
                form_class = get_storage_form(name)
                form = form_class(data=g.project.get_storage(storage_for).get_params()) if current else form_class()
                all_forms[storage_for][name] = {
                    'fields': [serialize_class(field) for field in form],
                    'type': name, 'current': current, 'description': description,
                    'path': getattr(g.project, storage_for + '_storage').readable_path
                }
                # generate data key automatically
                if g.project.data_types.keys():
                    for field in all_forms[storage_for][name]['fields']:
                        if field['name'] == 'data_key' and not field['data']:
                            field['data'] = list(g.project.data_types.keys())[0]
        return make_response(jsonify(all_forms), 200)

    # POST: update storage given filled form
    if request.method == 'POST':
        selected_type = request.args.get('type', '')
        storage_for = request.args.get('storage_for')
        current_type = g.project.config.get(storage_for, {'type': ''})['type']
        selected_type = selected_type if selected_type else current_type

        form = get_storage_form(selected_type)(data=request.json)

        if form.validate_on_submit():
            storage_kwargs = dict(form.data)
            storage_kwargs['type'] = request.json['type']  # storage type
            try:
                g.project.update_storage(storage_for, storage_kwargs)
            except Exception as e:
                traceback = tb.format_exc()
                logger.error(str(traceback))
                return make_response(jsonify({'detail': 'Error while storage update: ' + str(e)}), 400)
            else:
                return make_response(jsonify({'result': 'ok'}), 201)
        else:
            logger.error('Errors: ' + str(form.errors) + ' for request body ' + str(request.json))
            return make_response(jsonify({'errors': form.errors}), 400)
Ejemplo n.º 2
0
def api_project_storage_settings():
    """Set project storage settings: Amazon S3, Google CS, local file storages.
    Source storages store input tasks in json formats.
    Target storage store completions with labeling results
    """

    # GET: return selected form, populated with current storage parameters
    if request.method == "GET":
        # render all forms for caching in web
        all_forms = {"source": {}, "target": {}}
        for storage_for in all_forms:
            for name, description in g.project.get_available_storage_names(
                    storage_for).items():
                current_type = g.project.config.get(storage_for,
                                                    {"type": ""})["type"]
                current = name == current_type
                form_class = get_storage_form(name)
                form = (form_class(
                    data=g.project.get_storage(storage_for).get_params())
                        if current else form_class())
                all_forms[storage_for][name] = {
                    "fields": [serialize_class(field) for field in form],
                    "type":
                    name,
                    "current":
                    current,
                    "description":
                    description,
                    "path":
                    getattr(g.project, storage_for + "_storage").readable_path,
                }
                # generate data key automatically
                if g.project.data_types.keys():
                    for field in all_forms[storage_for][name]["fields"]:
                        if field["name"] == "data_key" and not field["data"]:
                            field["data"] = list(
                                g.project.data_types.keys())[0]
        return make_response(jsonify(all_forms), 200)

    # POST: update storage given filled form
    if request.method == "POST":
        selected_type = request.args.get("type", "")
        storage_for = request.args.get("storage_for")
        current_type = g.project.config.get(storage_for, {"type": ""})["type"]
        selected_type = selected_type if selected_type else current_type

        form = get_storage_form(selected_type)(data=request.json)

        if form.validate_on_submit():
            storage_kwargs = dict(form.data)
            storage_kwargs["type"] = request.json["type"]  # storage type
            try:
                g.project.update_storage(storage_for, storage_kwargs)
            except Exception as e:
                traceback = tb.format_exc()
                logger.error(str(traceback))
                return make_response(
                    jsonify(
                        {"detail": "Error while storage update: " + str(e)}),
                    400)
            else:
                return make_response(jsonify({"result": "ok"}), 201)
        else:
            logger.error("Errors: " + str(form.errors) + " for request body " +
                         str(request.json))
            return make_response(jsonify({"errors": form.errors}), 400)