Skip to content

Commit

Permalink
Fetch dataset readers dynamically (#1591)
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterLombaers committed Nov 23, 2023
1 parent 0dc0098 commit 0b9b58b
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 8 deletions.
15 changes: 15 additions & 0 deletions asreview/webapp/api/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
from asreview.state.errors import StateNotFoundError
from asreview.state.sql_converter import upgrade_asreview_project_file
from asreview.state.sql_converter import upgrade_project_config
from asreview.utils import _entry_points
from asreview.utils import _get_executable
from asreview.utils import _get_filename_from_url
from asreview.utils import asreview_path
Expand Down Expand Up @@ -214,6 +215,20 @@ def api_init_project(): # noqa: F401
return jsonify(project.config), 201


@bp.route("/dataset_readers", methods=["GET"])
@login_required
def api_list_data_readers():
"""Get the list of available data readers and read formats."""
payload = {"result": []}
for e in _entry_points(group="asreview.readers"):
payload["result"].append(
{
"extension": e.name
}
)
return jsonify(payload)


@bp.route("/projects/<project_id>/upgrade_if_old", methods=["GET"])
@login_required
@project_authorization
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as React from "react";
import { useMutation, useQueryClient } from "react-query";
import { useMutation, useQuery, useQueryClient } from "react-query";
import { connect } from "react-redux";
import {
Box,
Expand Down Expand Up @@ -54,6 +54,18 @@ const AddDataset = (props) => {
const [url, setURL] = React.useState("");
const [extension, setExtension] = React.useState(null);
const [benchmark, setBenchmark] = React.useState(null);
const [datasetReaders, setDatasetReaders] = React.useState(null);

const { isSuccess: fetchReadersSuccess } = useQuery(
"fetchDatasetReaders",
ProjectAPI.fetchDatasetReaders,
{
refetchOnWindowFocus: false,
onSuccess: (data) => {
setDatasetReaders(data.result);
},
}
);

const { error, isError, isLoading, mutate, reset } = useMutation(
ProjectAPI.mutateData,
Expand All @@ -66,7 +78,7 @@ const AddDataset = (props) => {
queryClient.invalidateQueries("fetchLabeledStats");
props.toggleAddDataset();
},
},
}
);

const handleDatasetSource = (event) => {
Expand Down Expand Up @@ -177,10 +189,7 @@ const AddDataset = (props) => {
</FormControl>
{(datasetSource === "file" || datasetSource === "url") && (
<Typography variant="body2" sx={{ color: "text.secondary" }}>
Supported formats are RIS (<code>.ris</code>, <code>.txt</code>)
and tabular datasets (<code>.csv</code>, <code>.tab</code>,{" "}
<code>.tsv</code>, <code>.xlsx</code>). The dataset should
contain a title and abstract for each record.{" "}
The dataset should contain a title and abstract for each record.{" "}
{props.mode !== projectModes.ORACLE
? "The dataset should contain labels for each record. "
: ""}
Expand Down Expand Up @@ -222,9 +231,11 @@ const AddDataset = (props) => {
</Link>
</Typography>
)}
{datasetSource === "file" && (
{datasetSource === "file" && fetchReadersSuccess && (
<ImportFromFile
acceptFormat=".txt,.tsv,.tab,.csv,.ris,.xlsx"
acceptFormat={datasetReaders
.map((reader) => reader.extension)
.join(",")}
addFileError={error}
file={file}
setFile={setFile}
Expand Down
14 changes: 14 additions & 0 deletions asreview/webapp/src/api/ProjectAPI.js
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,20 @@ class ProjectAPI {
});
}

static fetchDatasetReaders({ queryKey }) {
const url = api_url + `dataset_readers`;
return new Promise((resolve, reject) => {
axios
.get(url, { withCredentials: true })
.then((result) => {
resolve(result["data"]);
})
.catch((error) => {
reject(axiosErrorHandler(error));
});
});
}

static fetchDatasetWriter({ queryKey }) {
const { project_id } = queryKey[1];
const url = api_url + `projects/${project_id}/dataset_writer`;
Expand Down

0 comments on commit 0b9b58b

Please sign in to comment.