From 21b3ac19f3fd988aaa4fdee547c443f6fc7ec02b Mon Sep 17 00:00:00 2001 From: davelopez <46503462+davelopez@users.noreply.github.com> Date: Tue, 19 Jan 2021 12:57:24 +0100 Subject: [PATCH] Add delete method to manager --- lib/galaxy/managers/tool_data.py | 34 +++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/lib/galaxy/managers/tool_data.py b/lib/galaxy/managers/tool_data.py index c2997b9c5f1..4965c1706fc 100644 --- a/lib/galaxy/managers/tool_data.py +++ b/lib/galaxy/managers/tool_data.py @@ -1,6 +1,9 @@ from pathlib import Path -from typing import Dict +from typing import ( + Dict, + Optional, +) from galaxy import exceptions from galaxy.app import StructuredApp @@ -47,12 +50,7 @@ class ToolDataManager: """Reloads a tool data table.""" data_table = self._data_table(name) data_table.reload_from_files() - self._app.queue_worker.send_control_task( - 'reload_tool_data_tables', - noop_self=True, - kwargs={'table_name': name} - ) - return self.show(name) + return self._reload_data_table(name) def get_field_file_path(self, table_name: str, field_name: str, file_name: str) -> Path: """Get the absolute path to a given file name in the table field""" @@ -63,6 +61,20 @@ class ToolDataManager: raise exceptions.ObjectNotFound("No such path in data table field.") return full_path.absolute() + def delete(self, name: str, values: Optional[str] = None) -> ToolDataDetails: + """Removes an item from a data table""" + data_table = self._data_table(name) + if not values: + raise exceptions.RequestParameterInvalidException(f"Invalid data table item ( {values} ) specified.") + + split_values = values.split("\t") + + if len(split_values) != len(data_table.get_column_name_list()): + raise exceptions.RequestParameterInvalidException(f"Invalid data table item ( {values} ) specified. Wrong number of columns ({len(split_values)} given, {len(data_table.get_column_name_list())} required).") + + data_table.remove_entry(split_values) + return self._reload_data_table(name) + def _data_table(self, name: str) -> TabularToolDataTable: try: return self.data_tables[name] @@ -74,3 +86,11 @@ class ToolDataManager: if out is None: raise exceptions.ObjectNotFound(f"No such field {field_name} in data table {table_name}.") return out + + def _reload_data_table(self, name: str) -> ToolDataDetails: + self._app.queue_worker.send_control_task( + 'reload_tool_data_tables', + noop_self=True, + kwargs={'table_name': name} + ) + return self.show(name)