# HG changeset patch # User fubar # Date 1606813414 0 # Node ID 6873c211b25070ec77fd3af7c9ebb261cb5e39ba # Parent 5509dc4c1cf201c9d99534179d42d138097c3fe7 Uploaded diff -r 5509dc4c1cf2 -r 6873c211b250 toolfactory/rgToolFactory2.py --- a/toolfactory/rgToolFactory2.py Sun Nov 29 10:34:48 2020 +0000 +++ b/toolfactory/rgToolFactory2.py Tue Dec 01 09:03:34 2020 +0000 @@ -194,7 +194,7 @@ if not os.path.exists(self.tooloutdir): os.mkdir(self.tooloutdir) if not os.path.exists(self.testdir): - os.mkdir(self.testdir) # make tests directory + os.mkdir(self.testdir) if not os.path.exists(self.repdir): os.mkdir(self.repdir) self.tinputs = gxtp.Inputs() @@ -224,7 +224,7 @@ aXCL(self.executeme) aXCL("$runme") else: - aCL(self.executeme) # this little CL will just run + aCL(self.executeme) aXCL(self.executeme) self.elog = os.path.join(self.repdir, "%s_error_log.txt" % self.tool_name) self.tlog = os.path.join(self.repdir, "%s_runner_log.txt" % self.tool_name) @@ -257,7 +257,7 @@ if p[OOCLPOS] == "STDOUT": self.lastclredirect = [">", p[ONAMEPOS]] self.lastxclredirect = [">", "$%s" % p[OCLPOS]] - else: # for (o_v, k, v, koverride) in self.xclsuffix: + else: clsuffix.append([p[ONAMEPOS], p[ONAMEPOS], p[ONAMEPOS], ""]) xclsuffix.append([p[ONAMEPOS], p[ONAMEPOS], "$%s" % p[ONAMEPOS], ""]) for p in self.addpar: @@ -313,7 +313,7 @@ for i, p in enumerate( self.outfiles ): - if self.args.parampass == "positional" and p[OCLPOS] != "STDOUT": + if self.args.parampass == "positional" and p[OCLPOS].upper() != "STDOUT": assert p[ OCLPOS ].isdigit(), "Positional parameters must be ordinal integers - got %s for %s" % ( @@ -321,7 +321,7 @@ p[ONAMEPOS], ) p.append(p[OCLPOS]) # keep copy - if p[OOCLPOS].isdigit() or p[OOCLPOS] == "STDOUT": + if p[OOCLPOS].isdigit() or p[OOCLPOS].upper() == "STDOUT": scl = p[ONAMEPOS] p[OCLPOS] = scl self.outfiles[i] = p @@ -369,12 +369,6 @@ if self.lastxclredirect: aXCL(self.lastxclredirect[0]) aXCL(self.lastxclredirect[1]) - if os.path.exists(self.tlog): - tout = open(self.tlog, "a") - else: - tout = open(self.tlog, "w") - tout.write(f" #### clpositional: self.clsuffix = {self.clsuffix} and self.xclsuffix = {self.xclsuffix}") - tout.close() def clargparse(self): @@ -401,12 +395,6 @@ k = "--%s" % k aCL(k) aCL(v) - if os.path.exists(self.tlog): - tout = open(self.tlog, "a") - else: - tout = open(self.tlog, "w") - tout.write(f" #### clargparse: self.clsuffix = {self.clsuffix} and self.xclsuffix = {self.xclsuffix}") - tout.close() def getNdash(self, newname): @@ -427,7 +415,7 @@ aparm = gxtp.OutputData(name=newname, format=newfmt, num_dashes=ndash, label=newcl) aparm.positional = self.is_positional if self.is_positional: - if oldcl == "STDOUT": + if oldcl.upper() == "STDOUT": aparm.positional = 9999999 aparm.command_line_override = "> $%s" % newname else: @@ -603,11 +591,13 @@ requirements = gxtp.Requirements() if self.args.packages: for d in self.args.packages.split(","): + ver = '' + d = d.replace('==',':') + d = d.replace('=',':') if ":" in d: packg, ver = d.split(":") else: packg = d - ver = "" requirements.append( gxtp.Requirement("package", packg.strip(), ver.strip()) ) @@ -751,6 +741,7 @@ slogl = str(rlog).split("\\n") slog = "\n".join(slogl) tout.write(f"## got rlog {slog} from {cl}\n") + if os.path.exists(self.tlog): tout = open(self.tlog, "a") else: @@ -765,16 +756,18 @@ tvolname = tvol.name destdir = "/toolfactory/ptest" imrep = os.path.join(destdir, repname) - # need to keep the container running so sleep a while - we stop and destroy it when we are done + # need to keep the container running so keep it open with tail -f. + # will stop and destroy it when we are done container = client.containers.run( planemoimage, - "sleep 30m", + "tail -f /galaxy-central/CITATION", detach=True, user="biodocker", volumes={f"{tvolname}": {"bind": "/toolfactory", "mode": "rw"}}, ) cl = f"mkdir -p {destdir}" prun(container, tout, cl, user="root") + # that's how hard it is to get root on a biodocker container :( cl = f"rm -rf {destdir}/*" prun(container, tout, cl, user="root") ptestpath = os.path.join(destdir, "tfout", xreal) @@ -785,10 +778,10 @@ ptestcl = f"planemo test --update_test_data --no_cleanup --test_data {destdir}/tfout/test-data --galaxy_root /home/biodocker/galaxy-central {ptestpath}" try: rlog = container.exec_run(ptestcl) + # fails because test outputs missing but updates the test-data directory except: e = sys.exc_info()[0] tout.write(f"#### error: {e} from {ptestcl}\n") - # fails - used to generate test outputs cl = f"planemo test --test_output {imrep} --no_cleanup --test_data {destdir}/tfout/test-data --galaxy_root /home/biodocker/galaxy-central {ptestpath}" try: prun(container, tout, cl) @@ -808,17 +801,12 @@ container.stop() container.remove() tvol.remove() - # shutil.rmtree(testouts) + # shutil.rmtree(testouts) leave for debugging def shedLoad(self): """ - {'deleted': False, - 'description': 'Tools for manipulating data', - 'id': '175812cd7caaf439', - 'model_class': 'Category', - 'name': 'Text Manipulation', - 'url': '/api/categories/175812cd7caaf439'}] - + use bioblend to create new repository + or update existing """ if os.path.exists(self.tlog): @@ -851,7 +839,7 @@ category_ids=catID, ) tid = res.get("id", None) - sto.write(f"#####create_repository {self.args.tool_name} tid={tid} res={res}\n") + sto.write(f"#create_repository {self.args.tool_name} tid={tid} res={res}\n") else: i = rnames.index(self.tool_name) tid = rids[i] @@ -859,15 +847,17 @@ res = ts.repositories.update_repository( id=tid, tar_ball_path=self.newtarpath, commit_message=None ) - sto.write(f"#####update res id {id} ={res}\n") + sto.write(f"#update res id {id} ={res}\n") except ConnectionError: sto.write( - "Is the toolshed running and the API key correct? Bioblend shed upload failed\n" + "####### Is the toolshed running and the API key correct? Bioblend shed upload failed\n" ) sto.close() def eph_galaxy_load(self): - """load the new tool from the local toolshed after planemo uploads it""" + """ + use ephemeris to load the new tool from the local toolshed after planemo uploads it + """ if os.path.exists(self.tlog): tout = open(self.tlog, "a") else: @@ -1034,7 +1024,7 @@ a("--galaxy_venv", default="/galaxy_venv") args = parser.parse_args() assert not args.bad_user, ( - 'UNAUTHORISED: %s is NOT authorized to use this tool until Galaxy admin adds %s to "admin_users" in the Galaxy configuration file' + 'UNAUTHORISED: %s is NOT authorized to use this tool until Galaxy admin adds %s to "admin_users" in the galaxy.yml Galaxy configuration file' % (args.bad_user, args.bad_user) ) assert args.tool_name, "## Tool Factory expects a tool name - eg --tool_name=DESeq" diff -r 5509dc4c1cf2 -r 6873c211b250 toolfactory/rgToolFactory2.xml --- a/toolfactory/rgToolFactory2.xml Sun Nov 29 10:34:48 2020 +0000 +++ b/toolfactory/rgToolFactory2.xml Tue Dec 01 09:03:34 2020 +0000 @@ -39,7 +39,7 @@ - @@ -67,7 +67,7 @@ help="If you will pass positional parameters, enter the integer ordinal for this parameter. If Argparse style, '--' will be prepended or '-' if single character" value=""> - - - @@ -238,7 +238,7 @@ + optional="false" help="Use =[ver] or :[ver] for specific version - 'bwa=0.17.0'. Default is latest. Will be used every time the tool is (re)run. Only Conda is currently supported" />