changeset 6:437e28791761 draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/pangolin commit f53dc92d3cf6997da9ad21f01ad3fd3477aae068"
author iuc
date Wed, 07 Jul 2021 09:24:31 +0000
parents 42a174224817
children 7bb8726be37c
files fetch_latest_pangolearn.py pangolin.xml
diffstat 2 files changed, 45 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/fetch_latest_pangolearn.py	Mon Jun 21 16:14:55 2021 +0000
+++ b/fetch_latest_pangolearn.py	Wed Jul 07 09:24:31 2021 +0000
@@ -1,27 +1,42 @@
 #!/usr/bin/env python
 
+import argparse
 import json
 import os
+import sys
 import tarfile
 
 # rely on the fact that pangolin itself uses the requests module
 import requests
+from requests.adapters import HTTPAdapter
 
-response = requests.get(
-    "https://api.github.com/repos/cov-lineages/pangoLEARN/releases/latest"
-)
-if response.status_code == 200:
-    details = json.loads(response.text)
-    response = requests.get(details["tarball_url"])
+parser = argparse.ArgumentParser(description='download latest pangoLEARN database')
+parser.add_argument('--timeout', type=float, default=60.0, help="Timeout for connecting or downloading the pangoLEARN database (in seconds)")
+parser.add_argument('--max_retries', type=int, default=5, help="How many times to retry fetching the pangoLEARN database")
+args = parser.parse_args()
+
+try:
+    s = requests.Session()
+    s.mount('https://', HTTPAdapter(max_retries=args.max_retries))
+    response = s.get(
+        "https://api.github.com/repos/cov-lineages/pangoLEARN/releases/latest"
+    )
     if response.status_code == 200:
-        with open("pangolearn.tgz", "wb") as handle:
-            handle.write(response.content)
-        tf = tarfile.open("pangolearn.tgz")
-        pl_path = tf.next().name
-        tf.extractall()
-        tf.close()
-        os.rename(os.path.join(pl_path, "pangoLEARN"), "datadir")
+        details = json.loads(response.text)
+        response = s.get(details["tarball_url"], timeout=args.timeout)
+        if response.status_code == 200:
+            with open("pangolearn.tgz", "wb") as handle:
+                handle.write(response.content)
+            tf = tarfile.open("pangolearn.tgz")
+            pl_path = tf.next().name
+            tf.extractall()
+            tf.close()
+            os.rename(os.path.join(pl_path, "pangoLEARN"), "datadir")
+        else:
+            response.raise_for_status()
     else:
         response.raise_for_status()
-else:
-    response.raise_for_status()
+except (requests.ConnectionError, requests.HTTPError, requests.TooManyRedirects) as e:
+    sys.exit('Failed to download pangoLEARN database: {}'.format(e))
+except requests.Timeout:
+    sys.exit('Timeout while trying to download pangoLEARN database')
--- a/pangolin.xml	Mon Jun 21 16:14:55 2021 +0000
+++ b/pangolin.xml	Wed Jul 07 09:24:31 2021 +0000
@@ -1,4 +1,4 @@
-<tool id="pangolin" name="Pangolin" version="@TOOL_VERSION@+galaxy0" profile="20.01">
+<tool id="pangolin" name="Pangolin" version="@TOOL_VERSION@+galaxy1" profile="20.01">
     <description>Phylogenetic Assignment of Outbreak Lineages</description>
     <macros>
         <token name="@TOOL_VERSION@">3.1.4</token>
@@ -9,7 +9,7 @@
     </requirements>
     <command detect_errors="exit_code"><![CDATA[
         #if str($db.source) == "download"
-            python '$__tool_directory__/fetch_latest_pangolearn.py' &&
+            python '$__tool_directory__/fetch_latest_pangolearn.py' --max_retries=$db.max_retries --timeout=$db.timeout &&
         #else if str($db.source) == "builtin"
             ln -s $db.db_release.fields.path datadir &&
         #end if
@@ -51,6 +51,8 @@
                 <option value="default">Use default database built in to pangolin (not recommended)</option>
             </param>
             <when value="download">
+                <param name="max_retries" label="Max download retries" help="How many times to retry downloading the pangoLEARN database" type="integer" value="5" />
+                <param name="timeout" label="Download timeout" help="How many seconds to wait when downloading the pangoLEARN database" type="float" value="60.0" />
             </when>
             <when value="builtin">
                 <param name="db_release" label="pangoLEARN release" type="select">
@@ -171,6 +173,17 @@
                 </assert_contents>
             </output>
         </test>
+        <test expect_failure="true">
+            <param name="input1" value="test1.fasta" />
+            <conditional name="db">
+                <param name="source" value="download" />
+                <param name="timeout" value="0.00001" />
+                <param name="max_retries" value="1" />
+            </conditional>
+            <assert_stderr>
+                <has_text text="timed out" />
+            </assert_stderr>
+        </test>
     </tests>
     <help><![CDATA[