From f3cef51b86686bc640ca501893ace3c303a24974 Mon Sep 17 00:00:00 2001
From: Loraine Gueguen <loraine.gueguen@sb-roscoff.fr>
Date: Tue, 11 May 2021 18:07:44 +0200
Subject: [PATCH] Factorize run_tool()

---
 gga_load_data.py | 18 +++++++-----------
 utilities.py     | 22 ++++++++++++++++++++++
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/gga_load_data.py b/gga_load_data.py
index 4c18272..9590fd5 100755
--- a/gga_load_data.py
+++ b/gga_load_data.py
@@ -67,25 +67,22 @@ class LoadData(speciesData.SpeciesData):
         """
 
         logging.debug("Getting 'Homo sapiens' ID in chado database")
-        get_sapiens_id_job = self.instance.tools.run_tool(
+        get_sapiens_id_job_output_dataset_id = utilities.run_tool_and_get_single_output_dataset_id(self.instance,
             tool_id=GET_ORGANISMS_TOOL,
             history_id=self.history_id,
             tool_inputs={"genus": "Homo", "species": "sapiens"})
-        get_sapiens_id_job_output_dataset_id = get_sapiens_id_job["outputs"][0]["id"]
         get_sapiens_id_json_output = self.instance.datasets.download_dataset(dataset_id=get_sapiens_id_job_output_dataset_id)
+
+        logging.debug("Deleting Homo 'sapiens' in the instance's chado database")
         try:
-            logging.debug("Deleting Homo 'sapiens' in the instance's chado database")
             get_sapiens_id_final_output = json.loads(get_sapiens_id_json_output)[0]
-            sapiens_id = str(
-                get_sapiens_id_final_output["organism_id"])  # needs to be str to be recognized by the chado tool
-            self.instance.tools.run_tool(
+            sapiens_id = str(get_sapiens_id_final_output["organism_id"])  # needs to be str to be recognized by the chado tool
+            utilities.run_tool(
                 tool_id=DELETE_ORGANISMS_TOOL,
                 history_id=self.history_id,
-                tool_inputs={"organism": str(sapiens_id)})
-        except bioblend.ConnectionError:
-            logging.debug("Homo sapiens isn't in the instance's chado database (bioblend.ConnectionError)")
+                tool_inputs={"organism": sapiens_id})
         except IndexError:
-            logging.debug("Homo sapiens isn't in the instance's chado database (IndexError)")
+            logging.error("Homo sapiens isn't in the instance's chado database (IndexError)")
             pass
 
     def purge_histories(self):
@@ -98,7 +95,6 @@ class LoadData(speciesData.SpeciesData):
         """
 
         histories = self.instance.histories.get_histories()
-        self.instance.histories.get_histories(deleted=False)
         for h in histories:
             self.instance.histories.delete_history(history_id=h["id"])
 
diff --git a/utilities.py b/utilities.py
index 93c3e72..e633843 100755
--- a/utilities.py
+++ b/utilities.py
@@ -6,6 +6,7 @@ import logging
 import sys
 import os
 import subprocess
+import bioblend
 
 
 def parse_config(config_file):
@@ -172,3 +173,24 @@ def get_unique_species_dict_list(sp_dict_list):
         unique_species_list_of_dict.append(v)
 
     return unique_species_list_of_dict
+
+def run_tool(instance, tool_id, history_id, tool_inputs):
+
+    output_dict = None
+    try:
+        logging.debug("Running tool {0} with tool inputs: {1}".format(tool_id, tool_inputs))
+        output_dict =  instance.tools.run_tool(
+            tool_id=tool_id,
+            history_id=history_id,
+            tool_inputs=tool_inputs)
+    except bioblend.ConnectionError:
+        logging.error("Unexpected HTTP response (bioblend.ConnectionError) when running tool {0} with tool inputs: {1}".format(tool_id, tool_inputs))
+
+    return output_dict
+
+def run_tool_and_get_single_output_dataset_id(instance, tool_id, history_id, tool_inputs):
+
+    output_dict = run_tool(instance, tool_id, history_id, tool_inputs)
+    single_output_dataset_id = output_dict["outputs"][0]["id"]
+
+    return single_output_dataset_id
\ No newline at end of file
-- 
GitLab