diff create_or_update_organism.py @ 7:0d9cb9e56ca0 draft

planemo upload for repository https://github.com/galaxy-genome-annotation/galaxy-tools/tree/master/tools/apollo commit b9143221aee2cd09e1334ee56ff9651550b1797a
author gga
date Fri, 15 Mar 2019 06:05:10 -0400
parents 356b43302b16
children e80d29fd2a33
line wrap: on
line diff
--- a/create_or_update_organism.py	Tue Oct 30 04:32:30 2018 -0400
+++ b/create_or_update_organism.py	Fri Mar 15 06:05:10 2019 -0400
@@ -4,18 +4,33 @@
 import argparse
 import json
 import logging
+import os
 import shutil
+import subprocess
 import sys
+import tempfile
 import time
 
+
 from webapollo import GuessOrg, OrgOrGuess, PermissionCheck, WAAuth, WebApolloInstance
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger(__name__)
 
+
+def IsBlatEnabled():
+    if 'BLAT_ENABLED' not in os.environ:
+        return False
+    value = os.environ['BLAT_ENABLED']
+    if value.lower() in ('true', 't', '1'):
+        return True
+    else:
+        return False
+
+
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Create or update an organism in an Apollo instance')
     WAAuth(parser)
-
+    parser.add_argument('jbrowse_src', help='Old JBrowse Data Directory')
     parser.add_argument('jbrowse', help='JBrowse Data Directory')
     parser.add_argument('email', help='User Email')
     OrgOrGuess(parser)
@@ -24,8 +39,38 @@
     parser.add_argument('--public', action='store_true', help='Make organism public')
     parser.add_argument('--group', help='Give access to a user group')
     parser.add_argument('--remove_old_directory', action='store_true', help='Remove old directory')
+    args = parser.parse_args()
+    CHUNK_SIZE = 2**20
+    blat_db = None
 
-    args = parser.parse_args()
+    # Cleanup if existing
+    if(os.path.exists(args.jbrowse)):
+        shutil.rmtree(args.jbrowse)
+    # Copy files
+    shutil.copytree(args.jbrowse_src, args.jbrowse)
+
+    path_fasta = args.jbrowse + '/seq/genome.fasta'
+    path_2bit = args.jbrowse + '/seq/genome.2bit'
+
+    # Convert fasta if existing
+    if(IsBlatEnabled() and os.path.exists(path_fasta)):
+        arg = ['faToTwoBit', path_fasta, path_2bit]
+        tmp_stderr = tempfile.NamedTemporaryFile(prefix="tmp-twobit-converter-stderr")
+        proc = subprocess.Popen(args=arg, shell=False, cwd=args.jbrowse, stderr=tmp_stderr.fileno())
+        return_code = proc.wait()
+        if return_code:
+            tmp_stderr.flush()
+            tmp_stderr.seek(0)
+            print("Error building index:", file=sys.stderr)
+            while True:
+                chunk = tmp_stderr.read(CHUNK_SIZE)
+                if not chunk:
+                    break
+                sys.stderr.write(chunk)
+            sys.exit(return_code)
+        blat_db = path_2bit
+        tmp_stderr.close()
+
     wa = WebApolloInstance(args.apollo, args.username, args.password)
 
     org_cn = GuessOrg(args, wa)
@@ -56,7 +101,8 @@
             # mandatory
             genus=args.genus,
             species=args.species,
-            public=args.public
+            public=args.public,
+            blatdb=blat_db
         )
         time.sleep(2)
         if args.remove_old_directory and args.jbrowse != old_directory:
@@ -72,7 +118,8 @@
             args.jbrowse,
             genus=args.genus,
             species=args.species,
-            public=args.public
+            public=args.public,
+            blatdb=blat_db
         )
 
         # Must sleep before we're ready to handle