def api_get_project_data(project_id): # noqa: F401 """Get info on the article""" if not is_project(project_id): response = jsonify(message="Project not found.") return response, 404 try: filename = get_data_file_path(project_id).stem # get statistics of the dataset statistics = get_data_statistics(project_id) statistics["filename"] = filename except FileNotFoundError as err: print(err) statistics = {"filename": None} except Exception as err: print(err) message = f"Failed to get file. {err}" return jsonify(message=message), 400 response = jsonify(statistics) response.headers.add('Access-Control-Allow-Origin', '*') return response
def api_get_progress_efficiency(project_id): """Get cumulative number of inclusions by ASReview/at random""" try: statistics = get_data_statistics(project_id) labeled = read_label_history(project_id) data = [] for [key, value] in labeled: data.append(value) # create a dataset with the cumulative number of inclusions df = pd.DataFrame(data, columns=["Relevant"]).cumsum() df["Total"] = df.index + 1 df["Random"] = ( df["Total"] * (df["Relevant"][-1:] / statistics["n_rows"]).values).round() df = df.round(1).to_dict(orient="records") except Exception as err: logging.error(err) return jsonify(message="Failed to load efficiency plot."), 500 response = jsonify(df) response.headers.add('Access-Control-Allow-Origin', '*') return response
def api_upload_data_project(project_id): # noqa: F401 """Get info on the article""" if not is_project(project_id): response = jsonify(message="Project not found.") return response, 404 if request.form.get('demo_data', None): # download file and save to folder demo_data = DatasetManager().find(request.form['demo_data']) if demo_data.dataset_id in ["hall", "ace", "ptsd"]: download_url = demo_data.url_demo else: download_url = demo_data.url url_parts = urllib.parse.urlparse(download_url) filename = secure_filename(url_parts.path.rsplit('/', 1)[-1]) urlretrieve( download_url, get_data_path(project_id) / filename ) elif request.form.get('url', None): # download file and save to folder download_url = request.form['url'] try: url_parts = urllib.parse.urlparse(download_url) filename = secure_filename(url_parts.path.rsplit('/', 1)[-1]) urlretrieve( download_url, get_data_path(project_id) / filename ) except ValueError as err: logging.error(err) message = f"Invalid URL '{download_url}'." if isinstance(download_url, str) \ and not download_url.startswith("http"): message += " Usually, the URL starts with 'http' or 'https'." return jsonify(message=message), 400 except Exception as err: logging.error(err) message = f"Can't retrieve data from URL {download_url}." return jsonify(message=message), 400 elif 'file' in request.files: data_file = request.files['file'] # check the file is file is in a correct format check_dataset(data_file) # TODO{qubixes}: implement val strategy try: filename = secure_filename(data_file.filename) fp_data = get_data_path(project_id) / filename # save the file data_file.save(str(fp_data)) except Exception as err: logging.error(err) response = jsonify( message=f"Failed to upload file '{filename}'. {err}" ) return response, 400 else: response = jsonify(message="No file or dataset found to upload.") return response, 400 try: # add the file to the project add_dataset_to_project(project_id, filename) # get statistics of the dataset statistics = get_data_statistics(project_id) statistics["filename"] = filename # Bad format. TODO{Jonathan} Return informative message with link. except BadFileFormatError as err: message = f"Failed to upload file '{filename}'. {err}" return jsonify(message=message), 400 except Exception as err: message = f"Failed to upload file '{filename}'. {err}" return jsonify(message=message), 400 response = jsonify(statistics) response.headers.add('Access-Control-Allow-Origin', '*') return response