From d710bb860b5802a64420eb3d5e1ebac6ac88d4ea Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Thu, 7 Feb 2019 12:02:31 +0100 Subject: [PATCH] Discriminate data managers and allow managed testing I am not a big fan of the heuristic in which we fall back to loading the data manager tool relative to the data_manager_conf.xml file, but I don't really see a better way here. --- lib/galaxy/tools/data_manager/manager.py | 10 +++++++++- lib/galaxy/tools/loader_directory.py | 16 +++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/galaxy/tools/data_manager/manager.py b/lib/galaxy/tools/data_manager/manager.py index 4437a8e0002..28a1af70e09 100644 --- a/lib/galaxy/tools/data_manager/manager.py +++ b/lib/galaxy/tools/data_manager/manager.py @@ -57,11 +57,19 @@ class DataManagers(object): tool_path = '.' self.tool_path = tool_path for data_manager_elem in root.findall('data_manager'): - self.load_manager_from_elem(data_manager_elem, tool_path=self.tool_path) + if not self.load_manager_from_elem(data_manager_elem, tool_path=self.tool_path): + # Wasn't able to load manager, could happen when galaxy is managed by planemo. + # Fall back to loading relative to the data_manager_conf.xml file + tool_path = os.path.dirname(xml_filename) + self.load_manager_from_elem(data_manager_elem, tool_path=tool_path) def load_manager_from_elem(self, data_manager_elem, tool_path=None, add_manager=True): try: data_manager = DataManager(self, data_manager_elem, tool_path=tool_path) + except IOError as e: + if e.errno == errno.ENOENT: + # File does not exist + return None except Exception as e: log.error("Error loading data_manager '%s':\n%s" % (e, util.xml_to_string(data_manager_elem))) return None diff --git a/lib/galaxy/tools/loader_directory.py b/lib/galaxy/tools/loader_directory.py index 4820f17f4b2..1cdbc7d6b35 100644 --- a/lib/galaxy/tools/loader_directory.py +++ b/lib/galaxy/tools/loader_directory.py @@ -19,6 +19,7 @@ PATH_AND_RECURSIVE_ERROR = "Cannot specify a single file and recursive." LOAD_FAILURE_ERROR = "Failed to load tool with path %s." TOOL_LOAD_ERROR = object() TOOL_REGEX = re.compile(r"