mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-01 15:37:32 +08:00
Use /api/tool_data endpoints in DataTables.vue & DataManagerTable.vue
Switch from legacy controller axios calls to the typed GalaxyApi() fetcher for both loading and reloading tool data tables. Remove the now-unused tool_data_table_info, tool_data_table_info_1, and reload_tool_data_tables methods from the data_manager controller. Fixes https://github.com/galaxyproject/galaxy/issues/22227
This commit is contained in:
@@ -2,8 +2,7 @@
|
||||
<div>
|
||||
<b-breadcrumb v-if="dataTable && !loading" id="breadcrumb" :items="breadcrumbItems" />
|
||||
<Alert :message="message" :variant="status" />
|
||||
<Alert v-if="viewOnly" message="Not implemented" variant="dark" />
|
||||
<Alert v-else-if="loading" message="Waiting for data" status="info" />
|
||||
<Alert v-if="loading" message="Waiting for data" status="info" />
|
||||
<Alert
|
||||
v-else-if="dataTable && !dataTable['data'].length"
|
||||
message="There are currently no entries in this tool data table."
|
||||
@@ -40,8 +39,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import axios from "axios";
|
||||
import { getAppRoot } from "onload/loadConfig";
|
||||
import { GalaxyApi } from "@/api";
|
||||
|
||||
import GButton from "@/components/BaseComponents/GButton.vue";
|
||||
import Alert from "components/Alert.vue";
|
||||
@@ -60,7 +58,6 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
dataTable: {},
|
||||
viewOnly: false,
|
||||
message: "",
|
||||
status: "",
|
||||
loading: true,
|
||||
@@ -85,37 +82,42 @@ export default {
|
||||
];
|
||||
},
|
||||
},
|
||||
created() {
|
||||
axios
|
||||
.get(`${getAppRoot()}data_manager/tool_data_table_info?table_name=${this.name}`)
|
||||
.then((response) => {
|
||||
this.dataTable = response.data.dataTable;
|
||||
this.viewOnly = response.data.viewOnly;
|
||||
this.message = response.data.message;
|
||||
this.status = response.data.status;
|
||||
this.loading = false;
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
async created() {
|
||||
const { data, error } = await GalaxyApi().GET("/api/tool_data/{table_name}", {
|
||||
params: { path: { table_name: this.name } },
|
||||
});
|
||||
if (error) {
|
||||
this.message = error.err_msg || "Failed to load tool data table.";
|
||||
this.status = "error";
|
||||
} else {
|
||||
this.dataTable = {
|
||||
name: data.name,
|
||||
columns: data.columns,
|
||||
data: data.fields,
|
||||
};
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
methods: {
|
||||
fields(columns) {
|
||||
return columns.map((elem, index) => ({ key: index.toString(), label: elem }));
|
||||
},
|
||||
reload() {
|
||||
axios
|
||||
.get(`${getAppRoot()}data_manager/reload_tool_data_tables?table_name=${this.dataTableName}`)
|
||||
.then((response) => {
|
||||
if (response.data.dataTable) {
|
||||
this.dataTable = response.data.dataTable;
|
||||
}
|
||||
this.message = response.data.message;
|
||||
this.status = response.data.status;
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
async reload() {
|
||||
const { data, error } = await GalaxyApi().GET("/api/tool_data/{table_name}/reload", {
|
||||
params: { path: { table_name: this.dataTableName } },
|
||||
});
|
||||
if (error) {
|
||||
this.message = error.err_msg || "Failed to reload tool data table.";
|
||||
this.status = "error";
|
||||
} else {
|
||||
this.dataTable = {
|
||||
name: data.name,
|
||||
columns: data.columns,
|
||||
data: data.fields,
|
||||
};
|
||||
this.message = `Reloaded data table '${data.name}'.`;
|
||||
this.status = "done";
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
import axios from "axios";
|
||||
import { getAppRoot } from "onload/loadConfig";
|
||||
|
||||
import { GalaxyApi } from "@/api";
|
||||
|
||||
import Message from "../Message.vue";
|
||||
import DataManagerGrid from "./DataManagerGrid.vue";
|
||||
import DataTablesGrid from "./DataTablesGrid.vue";
|
||||
@@ -76,45 +78,41 @@ export default {
|
||||
|
||||
methods: {
|
||||
showDataManager(dataManagerTableName) {
|
||||
axios
|
||||
.get(`${getAppRoot()}data_manager/tool_data_table_items`, {
|
||||
params: {
|
||||
table_name: dataManagerTableName,
|
||||
},
|
||||
GalaxyApi()
|
||||
.GET("/api/tool_data/{table_name}", {
|
||||
params: { path: { table_name: dataManagerTableName } },
|
||||
})
|
||||
.then((response) => {
|
||||
this.message = response.data.message;
|
||||
this.status = response.data.status;
|
||||
|
||||
if (response.data.status !== "error" && response.data.status !== "warning") {
|
||||
.then(({ data, error }) => {
|
||||
if (error) {
|
||||
this.message = error.err_msg || "Failed to load tool data table.";
|
||||
this.status = "error";
|
||||
} else {
|
||||
this.dataManagerTableName = dataManagerTableName;
|
||||
this.dataManagerColumns = response.data.data.columns;
|
||||
this.dataManagerItems = response.data.data.items;
|
||||
this.dataManagerColumns = data.columns;
|
||||
this.dataManagerItems = data.fields.map((row) =>
|
||||
Object.fromEntries(data.columns.map((col, i) => [col, row[i]])),
|
||||
);
|
||||
this.currentView = "data-manager-grid";
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
},
|
||||
|
||||
reloadDataManager(dataManagerTableName) {
|
||||
axios
|
||||
.get(`${getAppRoot()}data_manager/reload_tool_data_table`, {
|
||||
params: {
|
||||
table_name: dataManagerTableName,
|
||||
},
|
||||
GalaxyApi()
|
||||
.GET("/api/tool_data/{table_name}/reload", {
|
||||
params: { path: { table_name: dataManagerTableName } },
|
||||
})
|
||||
.then((response) => {
|
||||
this.message = response.data.message;
|
||||
this.status = response.data.status;
|
||||
|
||||
if (response.data.status !== "error" && response.data.status !== "warning") {
|
||||
this.dataManagerItems = response.data.data.items;
|
||||
.then(({ data, error }) => {
|
||||
if (error) {
|
||||
this.message = error.err_msg || "Failed to reload tool data table.";
|
||||
this.status = "error";
|
||||
} else {
|
||||
this.dataManagerItems = data.fields.map((row) =>
|
||||
Object.fromEntries(data.columns.map((col, i) => [col, row[i]])),
|
||||
);
|
||||
this.message = `Reloaded data table '${dataManagerTableName}'.`;
|
||||
this.status = "done";
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
@@ -164,102 +164,3 @@ class DataManager(BaseUIController):
|
||||
"message": message,
|
||||
"status": status,
|
||||
}
|
||||
|
||||
@web.expose
|
||||
@web.json
|
||||
def tool_data_table_info(self, trans, **kwd):
|
||||
return self.tool_data_table_info_1(trans, **kwd)
|
||||
|
||||
def tool_data_table_info_1(self, trans, **kwd):
|
||||
not_is_admin = not trans.user_is_admin
|
||||
if not_is_admin and not trans.app.config.enable_data_manager_user_view:
|
||||
raise paste.httpexceptions.HTTPUnauthorized(
|
||||
"This Galaxy instance is not configured to allow non-admins to view the data manager."
|
||||
)
|
||||
message = kwd.get("message", "")
|
||||
status = kwd.get("status", "info")
|
||||
data_table_name = kwd.get("table_name", None)
|
||||
if not data_table_name:
|
||||
return {"message": "No data table was requested.", "status": "error"}
|
||||
data_table = trans.app.tool_data_tables.get(data_table_name, None)
|
||||
if data_table is None:
|
||||
return {"message": f"Invalid data table '{data_table_name}' was requested.", "status": "error"}
|
||||
return {
|
||||
"dataTable": {
|
||||
"name": data_table.name,
|
||||
"columns": data_table.get_column_name_list(),
|
||||
"data": data_table.data,
|
||||
},
|
||||
"viewOnly": not_is_admin,
|
||||
"message": message,
|
||||
"status": status,
|
||||
}
|
||||
|
||||
@web.expose
|
||||
@web.json
|
||||
@web.require_admin
|
||||
def reload_tool_data_tables(self, trans, table_name=None, **kwd):
|
||||
if table_name and isinstance(table_name, str):
|
||||
table_name = table_name.split(",")
|
||||
# Reload the tool data tables
|
||||
table_names = self.app.tool_data_tables.reload_tables(table_names=table_name)
|
||||
trans.app.queue_worker.send_control_task(
|
||||
"reload_tool_data_tables", noop_self=True, kwargs={"table_name": table_name}
|
||||
)
|
||||
data = None
|
||||
if table_names:
|
||||
message = "Reloaded data table{} '{}'.".format("s"[len(table_names) == 1 :], ", ".join(table_names))
|
||||
data = self.tool_data_table_info_1(trans, table_name=table_names[0], message=message, status="done")
|
||||
else:
|
||||
data = {"message": "No data tables have been reloaded.", "status": "error"}
|
||||
return data
|
||||
|
||||
@web.expose
|
||||
@web.json
|
||||
@web.require_admin
|
||||
def tool_data_table_items(self, trans, **kwd):
|
||||
data = {"columns": [], "items": []}
|
||||
message = kwd.get("message", "")
|
||||
status = kwd.get("status", "info")
|
||||
table_name = kwd.get("table_name", None)
|
||||
|
||||
if not table_name:
|
||||
return {
|
||||
"data": data,
|
||||
"message": "No Data table name provided.",
|
||||
"status": "warning",
|
||||
}
|
||||
|
||||
data_table = trans.app.tool_data_tables.get(table_name, None)
|
||||
|
||||
if data_table is None:
|
||||
return {"data": data, "message": f"Invalid Data table ({table_name}) was requested", "status": "error"}
|
||||
|
||||
columns = data_table.get_column_name_list()
|
||||
rows = [dict(zip(columns, table_row)) for table_row in data_table.data]
|
||||
data["columns"] = columns
|
||||
data["items"] = rows
|
||||
|
||||
return {"data": data, "message": message, "status": status}
|
||||
|
||||
@web.expose
|
||||
@web.json
|
||||
@web.require_admin
|
||||
def reload_tool_data_table(self, trans, **kwd):
|
||||
table_name = kwd.get("table_name", None)
|
||||
|
||||
if not table_name:
|
||||
return {
|
||||
"message": "No data table has been reloaded.",
|
||||
"status": "error",
|
||||
}
|
||||
|
||||
redirect_url = web.url_for(
|
||||
controller="data_manager",
|
||||
action="tool_data_table_items",
|
||||
table_name=table_name,
|
||||
message=f'The data table "{table_name}" has been reloaded.',
|
||||
status="done",
|
||||
)
|
||||
|
||||
return trans.response.send_redirect(redirect_url)
|
||||
|
||||
Reference in New Issue
Block a user