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:
mvdbeek
2026-03-23 14:46:24 +01:00
parent 50b8a140e3
commit 61e2b81830
3 changed files with 60 additions and 159 deletions
@@ -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";
}
},
},
};
+27 -29
View File
@@ -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)