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)
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)