# HG changeset patch
# User fubar
# Date 1606255141 0
# Node ID bf92b6bd8b207368601b46bed9d1b3b4edb21735
Uploaded
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/.shed.yml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/.shed.yml Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,4 @@
+description: pyrevpos
+name: pyrevpos
+owner: fubar
+type: unrestricted
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/output
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/output Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,741 @@
+nohtyp vne/nib/rsu/!#
+yp.yrotcaFlooTgr #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ees #
+#
+2102 yaM )moc pots liamg ta surazal pots ssor( surazal ssor thgirypoc #
+#
+devreser sthgir lla #
+LPGL eht rednu desneciL #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ta emoclew sexif gub dna tnemevorpmi rof snoitseggus #
+#
+.sraey 5 retfa elkniw nav pir ekil leef I dna nuf saw CCB :0202 yluJ #
+ot dediceD #
+esac tselpmis rof enod - skrow ti os yrotcafloot eht xiF .1 #
+skrow noitcnuf yrotcafloot eht os omenalp xiF .2 #
+enod - esnes sekam taht erehw snoitcnuf lmxyxalag gnisu stib etirweR .3 #
+#
+tpircs emas siht esu loot wen eht gnikam gnidulcni snoitacilpmoc dlo eht lla devomer #
+lmxyxalag/anelyxeh/moc.buhtig//:sptth lmx loot eht setareneg won lmxyxalag #
+stuptuo yrartibra morf noitaerc elif LMTH citamotua rof troppus oN #
+kooh noitucexe tsop a sa edoc taht nur ot noitpo dda :ODOT #
+eno ylno yltnerruc - sretemarap tupni yrotsih lanoitidda dda :ODOT #
+
+
+esrapgra tropmi
+gniggol tropmi
+so tropmi
+er tropmi
+lituhs tropmi
+ssecorpbus tropmi
+sys tropmi
+elifrat tropmi
+elifpmet tropmi
+emit tropmi
+
+txg sa loot.lmxyxalag tropmi
+ptxg sa sretemarap.loot.lmxyxalag tropmi
+
+lmxl tropmi
+
+"0202 yluJ 1.2V" = noisrevym
+eurT = esobrev
+eurT = gubed
+"yrotcafloot/2rabuf/moc.buhtig//:sptth" = LRUyrotcaFloot
+"~~~" = miledruo
+
+lebal_tupni$~~~stamrof_tupni$~~~LC$~~~selif_tupni$"=selif_tupni-- #
+"pleh_tupni$~~~ #
+0 = SOPHTAPI
+1 = SOPLCI
+2 = SOPTMFI
+3 = SOPBALI
+4 = SOPLEHI
+5 = SOPLCOI
+
+LC.bato$~~~tamrof_yrotsih.bato$~~~eman_yrotsih.bato$" selif_tuptuo-- #
+0 = SOPEMANO
+1 = SOPTMFO
+2 = SOPLCO
+3 = SOPLCOO
+
+~~~eulav_marap.i$~~~eman_marap.i$"=sretemarap_lanoitidda-- #
+"edirrevoLC_marap.$i~~~LC.i$~~~epyt_marap.i$~~~pleh_marap.i$~~~lebal_marap.i$ #
+0 = SOPEMANA
+1 = SOPLAVA
+2 = SOPBALA
+3 = SOPPLEHA
+4 = SOPEPYTA
+5 = SOPLCA
+6 = SOPREVOA
+7 = SOPLCOA
+
+
+)__noisrev__.lmxl(nel = oof
+!eman ym yaS .8ekalf ,uoy guf #
+
+:)(wonemit fed
+gnirts a sa emit tnerruc nruter"""
+"""
+)))(emit.emit(emitlacol.emit ,"S%:M%:H% Y%/m%/d%"(emitfrts.emit nruter
+
+
+:)s(ciremun_non_etouq fed
+sciremun-non rof gnirts detouqerp a nruter"""
+?gnissap retemarap tpircsR dna lrep rof lufesu
+"""
+:yrt
+)s(taolf = _
+s nruter
+:rorrEeulaV tpecxe
+s % '"s%"' nruter
+
+
+}"$\"r :"$" ,";tl&" :"<" ,";tg&" :">" ,";pma&" :"&"{ = elbat_epacse_lmth
+
+
+:)txet(epacse_lmth fed
+""".txet nihtiw seititne ecudorP"""
+)txet ni c rof )c ,c(teg.elbat_epacse_lmth(nioj."" nruter
+
+
+:)txet(epacsenu_lmth fed
+"""ecalper esu os stegrat retcarahc elpitluM .txet nihtiw seititne treveR"""
+)"&" ,";pma&"(ecalper.txet = t
+)">" ,";tg&"(ecalper.t = t
+)"<" ,";tl&"(ecalper.t = t
+)"$" ,"$\\"(ecalper.t = t
+t nruter
+
+
+:)txet_snoitatic(snoitatic_esrap fed
+"""
+"""
+])(pirts.c fi )"**YRTNE**"(tilps.txet_snoitatic ni c rof c[ = snoitatic
+][ = selput_noitatic
+:snoitatic ni noitatic rof
+:)"iod"(htiwstrats.noitatic fi
+)))(pirts.]: )"iod"(nel[noitatic ,"iod"((dneppa.selput_noitatic
+:esle
+(dneppa.selput_noitatic
+))(pirts.]: )"xetbib"(nel[noitatic ,"xetbib"(
+)
+selput_noitatic nruter
+
+
+:rennuRtpircS ssalc
+tpircs yrartibra na rof repparW"""
+lmxyxalag sesu
+
+"""
+
+:)enoN=sgra ,fles(__tini__ fed
+"""
+ereh loot eht gninnur rof lc enil dnammoc eraperp
+noitareneg loot lmxyxalag rof dedeen stnemele eraperp dna
+"""
+
+]selif_tupni.sgra ni x rof )miledruo(tilps.x[ = selifni.fles
+]selif_tuptuo.sgra ni x rof )miledruo(tilps.x[ = seliftuo.fles
+]sretemarap_lanoitidda.sgra ni x rof )miledruo(tilps.x[ = rapdda.fles
+sgra = sgra.fles
+)(rappunaelc.fles
+enoN = tceriderlctsal.fles
+enoN = tceriderlcxtsal.fles
+][ = lc.fles
+][ = lclmx.fles
+"lanoitisop" == ssapmarap.sgra.fles = lanoitisop_si.fles
+dneppa.lc.fles = LCa
+[ ni ssapmarap.sgra tressa
+,"0"
+,"esrapgra"
+,"lanoitisop"
+'"esrapgra" ro "lanoitisop","0" eb tsum ssapmarap.sgra ni gnissap retemaraP' ,]
+)eman_loot.sgra ,"" ,"+]_9-0Z-Az-a^["(bus.er = eman_loot.fles
+eman_loot.fles = di_loot.fles
+:eman_reterpretni.sgra.fles fi
+"eMnur$" = exe
+:esle
+egakcap_exe.sgra.fles = exe
+( tressa
+enoN ton si exe
+"dliub tonnac os nur ot gnihton - ni dessap elbatucexe ro retepretni oN" ,)
+(looT.txg = loot.fles
+,eman_loot.sgra.fles
+,di_loot.fles
+,noisrev_loot.sgra.fles
+,csed_loot.sgra.fles
+,exe
+)
+)(stupnI.ptxg = stupnit.fles
+)(stuptuO.ptxg = stuptuot.fles
+][ = maraptset.fles
+( fi
+"metsys" == edomnur.sgra.fles ro "elbatucexE" == edomnur.sgra.fles
+deen on - yranib # :)
+nur tsuj lliw LC elttil siht # )egakcap_exe.sgra.fles(LCa
+:esle
+)(tpircSperp.fles
+eman_loot.fles % "txt.gol_rorre_s%" = gole.fles
+eman_loot.fles % "txt.gol_rennur_s%" = golt.fles
+
+:"0" == ssapmarap.sgra.fles fi
+)(elpmislc.fles
+:esle
+][ = xiffuslc
+][ = xiffuslcx
+:)selifni.fles(etaremune ni p ,i rof
+:"NIDTS" == ]SOPLCOI[p fi
+[ = emdneppa
+,]SOPLCOI[p
+,]SOPLCI[p
+,]SOPHTAPI[p
+,]SOPHTAPI[p % "s% <"
+]
+[ = emdneppax
+,]SOPLCOI[p
+,]SOPLCI[p
+,]SOPHTAPI[p
+,]SOPLCI[p % "s%$ <"
+]
+:esle
+]"" ,]SOPHTAPI[p ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppa
+]"" ,]SOPLCI[p % "s%$" ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppax
+)emdneppa(dneppa.xiffuslc
+)emdneppax(dneppa.xiffuslcx
+))emdneppa,i( % 's%=emdneppa ,d%=i elifni##'(tnirp #
+:)seliftuo.fles(etaremune ni p ,i rof
+:"TUODTS" == ]SOPLCOO[p fi
+]]SOPEMANO[p ,">"[ = tceriderlctsal.fles
+]]SOPLCO[p % "s%$" ,">"[ = tceriderlcxtsal.fles
+:esle
+)]"" ,]SOPEMANO[p ,]SOPLCO[p ,]SOPLCOO[p[(dneppa.xiffuslc
+(dneppa.xiffuslcx
+]"" ,]SOPEMANO[p % "s%$" ,]SOPLCO[p ,]SOPLCOO[p[
+)
+:rapdda.fles ni p rof
+(dneppa.xiffuslc
+]]SOPREVOA[p ,]SOPLAVA[p ,]SOPLCA[p ,]SOPLCOA[p[
+)
+(dneppa.xiffuslcx
+]]SOPREVOA[p ,]SOPEMANA[p % '"s%$"' ,]SOPLCA[p ,]SOPLCOA[p[
+)
+)(tros.xiffuslc
+)(tros.xiffuslcx
+xiffuslcx = xiffuslcx.fles
+xiffuslc = xiffuslc.fles
+:"lanoitisop" == ssapmarap.sgra.fles fi
+)(lanoitisoplc.fles
+:esle
+)(esrapgralc.fles
+
+:)fles(tpircSperp fed
+dneppa.lc.fles = LCa
+)(senildaer.)"r" ,htap_tpircs.sgra.fles(nepo = xr
+]xr ni x rof )(pirtsr.x[ = xr
+]"" > )(pirts.x fi xr ni x rof )(pirts.x[ = kcehcxr
+"nur tonnaC .ytpme si tpircs deilppuS" ,0 > )kcehcxr(nel tressa
+)xr(nioj."n\" = tpircs.fles
+(pmetskm.elifpmet = elifs.fles ,eldnahf
+)eman_reterpretni.sgra.fles( % "s%_"=xiffus ,eman_loot.fles=xiferp
+)
+)"w" ,elifs.fles(nepo = tpircst
+)tpircs.fles(etirw.tpircst
+)(esolc.tpircst
+(nioj."n\" % "s% " = tpircSdetnedni.fles
+]xr ni x rof )x(epacse_lmth % "s% "[
+)
+(nioj."n\" % "s%" = tpircSdepacse.fles
+]xr ni x rof )x(epacse_lmth % "s% "[
+)
+)eman_reterpretni.sgra.fles ,eman_loot.fles( % "s%.s%" = tra
+)"bw" ,tra(nepo = tcafitra
+))"8ftu" ,tpircs.fles(setyb(etirw.tcafitra
+)(esolc.tcafitra
+)eman_reterpretni.sgra.fles(LCa
+)elifs.fles(LCa
+
+:)fles(rappunaelc fed
+"""lanidro ciremun rieht yb detacilpmoc era sretemarap lanoitisop """
+:)selifni.fles(etaremune ni p ,i rof
+:"lanoitisop" == ssapmarap.sgra.fles fi
+( ,)(tigidsi.]SOPLCI[p tressa
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"
+)]SOPBALI[p ,]SOPLCI[p( %
+)
+)]SOPLCI[p(dneppa.p
+:"0" == ssapmarap.sgra.fles ro )(tigidsi.]SOPLCI[p fi
+)1 + i( % "d%tupni" = lcs
+lcs = ]SOPLCI[p
+p = ]i[selifni.fles
+(etaremune ni p ,i rof
+seliftuo.fles
+snoisnetxe gnisu rehtag yllacigamotua ot gniyrt # :)
+:"TUODTS" =! ]SOPLCO[p dna "lanoitisop" == ssapmarap.sgra.fles fi
+( ,)(tigidsi.]SOPLCO[p tressa
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"
+)]SOPEMANO[p ,]SOPLCO[p( %
+)
+)]SOPLCO[p(dneppa.p
+:"TUODTS" == ]SOPLCO[p ro )(tigidsi.]SOPLCO[p fi
+]SOPEMANO[p = lcs
+lcs = ]SOPLCO[p
+p = ]i[seliftuo.fles
+:)rapdda.fles(etaremune ni p ,i rof
+:"lanoitisop" == ssapmarap.sgra.fles fi
+( ,)(tigidsi.]SOPLCA[p tressa
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"
+)]SOPEMANA[p ,]SOPLCA[p( %
+)
+)]SOPLCA[p(dneppa.p
+:)(tigidsi.]SOPLCA[p fi
+]SOPLCA[p % "s%tupni" = lcs
+lcs = ]SOPLCA[p
+p = ]i[rapdda.fles
+
+:)fles(elpmislc fed
+o/i rof > dna < sesu - sretemarap on """
+"""
+dneppa.lc.fles = LCa
+)"<"(LCa
+)]SOPHTAPI[]0[selifni.fles(LCa
+)">"(LCa
+)]SOPLCO[]0[seliftuo.fles(LCa
+dneppa.lclmx.fles = LCXa
+)"<"(LCXa
+)]SOPLCI[]0[selifni.fles % "s%$"(LCXa
+)">"(LCXa
+)]SOPEMANO[]0[seliftuo.fles % "s%$"(LCXa
+
+:)fles(lanoitisoplc fed
+smarap neht redro ni stupni #
+dneppa.lc.fles = LCa
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof
+:v ni " " fi
+)v % "s%"(LCa
+:esle
+)v(LCa
+dneppa.lclmx.fles = LCXa
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof
+)v(LCXa
+:tceriderlcxtsal.fles fi
+)]0[tceriderlcxtsal.fles(LCXa
+)]1[tceriderlcxtsal.fles(LCXa
+
+:)fles(esrapgralc fed
+elyts esrapgra """
+"""
+dneppa.lc.fles = LCa
+dneppa.lclmx.fles = LCXa
+mrof deman esrapgra ni smarap neht stupni #
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof
+:"" > edirrevok fi
+edirrevok = k
+:1 == ))(pirts.k(nel file
+k % "s%-" = k
+:esle
+k % "s%--" = k
+)k(LCXa
+)v(LCXa
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof
+:"" > edirrevok fi
+edirrevok = k
+:1 == ))(pirts.k(nel file
+k % "s%-" = k
+:esle
+k % "s%--" = k
+)k(LCa
+)v(LCa
+
+:)emanwen ,fles(hsadNteg fed
+:lanoitisop_si.fles fi
+0 = hsadn
+:esle
+2 = hsadn
+:2 < )emanwen(nel fi
+1 = hsadn
+hsadn nruter
+
+:)fles(marapLMXod fed
+"""...siht od em edam 8ekalf"""
+:seliftuo.fles ni p rof
+p = lcdlo ,lcwen ,tmfwen ,emanwen
+)lcwen(hsadNteg.fles = hsadn
+)hsadn=sehsad_mun ,tmfwen=tamrof ,lcwen(ataDtuptuO.ptxg = mrapa
+lanoitisop_si.fles = lanoitisop.mrapa
+:lanoitisop_si.fles fi
+:"TUODTS" == lcdlo fi
+9999999 = lanoitisop.mrapa
+lcwen % "s%$ >" = edirrevo_enil_dnammoc.mrapa
+:esle
+)lcdlo(tni = lanoitisop.mrapa
+lcwen % "s%$" = edirrevo_enil_dnammoc.mrapa
+)mrapa(dneppa.stuptuot.fles
+(tuptuOtseT.ptxg = pt
+tmfwen=tamrof ,lcwen % "elpmas_s%"=eulav ,lcwen=eman
+)
+)pt(dneppa.maraptset.fles
+:selifni.fles ni p rof
+]SOPLCI[p = emanwen
+]SOPTMFI[p = tmfwen
+)emanwen(hsadNteg.fles = hsadn
+:0 > )]SOPBALI[p(nel ton fi
+]SOPLCI[p = bala
+:esle
+]SOPBALI[p = bala
+(maraPataD.ptxg = tupnina
+,emanwen
+,eslaF=lanoitpo
+,bala=lebal
+,]SOPLEHI[p=pleh
+,tmfwen=tamrof
+,eslaF=elpitlum
+,hsadn=sehsad_mun
+)
+lanoitisop_si.fles = lanoitisop.tupnina
+)tupnina(dneppa.stupnit.fles
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = mrapt
+)mrapt(dneppa.maraptset.fles
+:rapdda.fles ni p rof
+p = lcdlo ,edirrevo ,lcwen ,epytwen ,plehwen ,lebalwen ,lavwen ,emanwen
+:0 > )lebalwen(nel ton fi
+emanwen = lebalwen
+)emanwen(hsadNteg.fles = hsadn
+:"txet" == epytwen fi
+(maraPtxeT.ptxg = mrapa
+,emanwen
+,lebalwen=lebal
+,plehwen=pleh
+,lavwen=eulav
+,hsadn=sehsad_mun
+)
+:"regetni" == epytwen file
+(maraPregetnI.ptxg = mrapa
+,emanwen
+,emanwen=lebal
+,plehwen=pleh
+,lavwen=eulav
+,hsadn=sehsad_mun
+)
+:"taolf" == epytwen file
+(maraPtaolF.ptxg = mrapa
+,emanwen
+,emanwen=lebal
+,plehwen=pleh
+,lavwen=eulav
+,hsadn=sehsad_mun
+)
+:esle
+(rorrEeulaV esiar
+\rof "s%" epyt retemarap desingocernU'
+'LMXekam ni s% retemarap lanoitidda
+)emanwen ,epytwen( %
+)
+lanoitisop_si.fles = lanoitisop.mrapa
+:lanoitisop_si.fles fi
+)lcdlo(tni = lanoitisop.tupnina
+)mrapa(dneppa.stupnit.fles
+)lavwen=eulav ,emanwen(maraPtseT.ptxg = mrapt.fles
+)mrapt(dneppa.maraptset.fles
+
+:)fles(marapLMXoNod fed
+]SOPBALI[]0[selifni.fles = bala
+:0 == )bala(nel fi
+]SOPLCI[]0[selifni.fles = bala
+( = s1xam
+"s% - deilppus selif tupni eno naht erom - 0 si ssapmarap fi tupni eno mumixaM"
+)selifni.fles(rts %
+)
+s1xam ,1 == )selifni.fles(nel tressa
+]SOPLCI[]0[selifni.fles = emanwen
+(maraPataD.ptxg = tupnina
+,emanwen
+,eslaF=lanoitpo
+,bala=lebal
+,]SOPLEHI[]0[selifni.fles=pleh
+,]SOPTMFI[]0[selifni.fles=tamrof
+,eslaF=elpitlum
+,0=sehsad_mun
+)
+emanwen % "s%$ <" = edirrevo_enil_dnammoc.tupnina
+lanoitisop_si.fles = lanoitisop.tupnina
+)tupnina(dneppa.stupnit.fles
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = pt
+)pt(dneppa.maraptset.fles
+]SOPLCO[]0[seliftuo.fles = emanwen
+]SOPTMFO[]0[seliftuo.fles = tmfwen
+)0=sehsad_mun ,tmfwen=tamrof ,emanwen(ataDtuptuO.ptxg = tuona
+emanwen % "s%$ >" = edirrevo_enil_dnammoc.tuona
+lanoitisop_si.fles = lanoitisop.tuona
+)tuona(dneppa.stuptuot.fles
+(tuptuOtseT.ptxg = pt
+tmfwen=tamrof ,emanwen % "elpmas_s%"=eulav ,emanwen=eman
+)
+)pt(dneppa.maraptset.fles
+
+:)fles(LMXekam fed
+"""
+tpircs wen eht rof repparw loot lmx yxalaG a etaerC
+lmthyxalag sesU
+...redro tcerroc otni enil dnammoc eht teg ot woH .mmmH
+"""
+lclmx.fles = edirrevo_enil_dnammoc.loot.fles
+:eman_reterpretni.sgra.fles fi
+eman_reterpretni.sgra.fles = reterpretni.loot.fles
+:txet_pleh.sgra.fles fi
+)(senildaer.)"r" ,txet_pleh.sgra.fles(nepo = txetpleh
+]txetpleh ni x rof )x(epacse_lmth[ = txetpleh
+)]txetpleh ni x rof x[(nioj."" = pleh.loot.fles
+:esle
+( = pleh.loot.fles
+\ pleh rof )s%( rohtua loot eht ksa esaelP"
+"n\noitareneg loot ta deilppus saw enon sa
+)liame_resu.sgra.fles( %
+)
+tnaw ton od # enoN = dnammoc_noisrev.loot.fles
+)(stnemeriuqeR.ptxg = stnemeriuqer
+
+:eman_reterpretni.sgra.fles fi
+:"nohtyp" == eman_reterpretni.sgra.fles fi
+(dneppa.stnemeriuqer
+(tnemeriuqeR.ptxg
+noisrev_reterpretni.sgra.fles ,"nohtyp" ,"egakcap"
+)
+)
+:]"hs" ,"hsab"[ ni ton eman_reterpretni.sgra.fles file
+(dneppa.stnemeriuqer
+(tnemeriuqeR.ptxg
+,"egakcap"
+,eman_reterpretni.sgra.fles
+,noisrev_reterpretni.sgra.fles
+)
+)
+:esle
+:"metsys" =! ssapmarap.sgra.fles dna egakcap_exe.sgra.fles fi
+(dneppa.stnemeriuqer
+(tnemeriuqeR.ptxg
+,"egakcap"
+,egakcap_exe.sgra.fles
+,noisrev_egakcap_exe.sgra.fles
+)
+)
+stnemeriuqer = stnemeriuqer.loot.fles
+:"0" == ssapmarap.sgra.fles fi
+)(marapLMXoNod.fles
+:esle
+)(marapLMXod.fles
+stuptuot.fles = stuptuo.loot.fles
+stupnit.fles = stupni.loot.fles
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi
+)(selifgifnoC.ptxg = selifgifnoc
+))tpircs.fles=txet ,"eMnur"=eman(elifgifnoC.ptxg(dneppa.selifgifnoc
+selifgifnoc = selifgifnoc.loot.fles
+)(stseT.ptxg = stset
+)(tseT.ptxg = a_tset
+:maraptset.fles ni pt rof
+)pt(dneppa.a_tset
+)a_tset(dneppa.stset
+stset = stset.loot.fles
+(tnemmoc_dda.loot.fles
+".yrotcaF looT yxalaG eht gnisu s% ta s% yb detaerC"
+))(wonemit ,liame_resu.sgra.fles( %
+)
+))LRUyrotcaFloot( % "s% :ta tig ni ecruoS"(tnemmoc_dda.loot.fles
+(tnemmoc_dda.loot.fles
+"375stb/scitamrofnioib/3901.01 :iod stpircs morf sloot elbasu-er gnitaerC :etiC"
+)
+)(tropxe.loot.fles = lmxe
+)"w" ,eman_loot.fles % 'lmx.s%'(nepo = fx
+)lmxe(etirw.fx
+)"n\"(etirw.fx
+)(esolc.fx
+llabrat eht rof ydaer #
+
+:)fles(ratlooTekam fed
+"""
+ge htiw llabrat zg a si loot a
+... oof.ni_1tset/atad-tset/emanloot/ yp.loot/emanloot/ lmx.loot/emanloot/
+tsum os ereh degnum era stuptuo dna stupni tset rof seman ETON
+lc detareneg eht no desu seman tuptuo dna tupni lautca ot dnopserroc
+"""
+)(nur.fles = lavter
+:lavter fi
+(etirw.rredts.sys
+"yrter dna xif esaelP .tey dliub tonnaC .deliaf nuR ##"
+)
+)1(tixe.sys
+"tuoft" = ridt
+:)ridt(stsixe.htap.so ton fi
+)ridt(ridkm.so
+)(LMXekam.fles
+)"atad-tset" ,ridt(nioj.htap.so = ridtset
+:)ridtset(stsixe.htap.so ton fi
+yrotcerid stset ekam # )ridtset(ridkm.so
+:selifni.fles ni p rof
+]SOPHTAPI[p = htp
+)]SOPLCI[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+:seliftuo.fles ni p rof
+]SOPLCO[p = htp
+:"0" == ssapmarap.sgra.fles ro "TUODTS" == ]SOPLCOO[p fi
+]SOPEMANO[p = htp
+)]SOPEMANO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+)]SOPEMANO[p ,ridt(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+:esle
+]SOPLCO[p = htp
+)]SOPLCO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+)]SOPLCO[p ,ridt(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+
+:0 > ezis_ts.)golt.fles(tats.so dna )golt.fles(stsixe.htap.so fi
+))"txteliftuo_gol_1tset" ,ridtset(nioj.htap.so ,golt.fles(elifypoc.lituhs
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi
+))elifs.fles( % "s%" ,ridt(nioj.htap.so = emants
+:)emants(stsixe.htap.so ton fi
+)emants ,elifs.fles(elifypoc.lituhs
+eman_loot.fles % 'lmx.s%' = laerx
+)laerx,ridt(nioj.htap.so = tuox
+)tuox ,laerx(elifypoc.lituhs
+eman_loot.fles % "zgt.s%_yrotcafloot" = htaprat
+)"zg:w" ,htaprat(nepo.elifrat = ft
+)eman_loot.fles=emancra ,ridt=eman(dda.ft
+)(esolc.ft
+)loot_wen.sgra.fles ,htaprat(elifypoc.lituhs
+)"txt.lmx_loot",laerx(elifypoc.lituhs
+"ridpmet_troper_nur_FT" = ridper
+:)ridper(stsixe.htap.so ton fi
+)ridper(ridkm.so
+]seliftuo.fles ni x rof ]SOPLCO[x[ = semantuoper
+:stuo sa )'.'(ridnacs.so htiw
+:stuo ni yrtne rof
+:)(elif_si.yrtne ton ro )'zgt.'(htiwsdne.eman.yrtne fi
+eunitnoc
+:semantuoper ni eman.yrtne fi
+))eman.yrtne,ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs
+:eman_loot.fles % "lmx.s%" == eman.yrtne file
+))"lmx_loot_wen",ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs
+lavter nruter
+
+:)fles(nur fed
+"""
+htiaf eht htiw gnipeek m'I os daer rredts evisnefed siht evah sloot maetved emoS
+.etadpu ot eerf leeF
+"""
+)lc.fles(rts % "s%=lc nur" = s
+
+)s(gubed.gniggol
+)lc.fles(nioj." " = lcs
+enoN = rre
+:"0" =! ssapmarap.sgra.fles fi
+)"bw" ,gole.fles(nepo = ets
+:tceriderlctsal.fles fi
+(nepo = ots
+"bw" ,]1[tceriderlctsal.fles
+elif tuptuo na fo eman si # )
+:esle
+)"bw" ,golt.fles(nepo = ots
+(etirw.ots
+(setyb
+"n\s% = enil dnammoc detareneg yrotcaflooT gnitucexE ##"
+,lcs %
+,"8ftu"
+)
+)
+)(hsulf.ots
+)ets=rredts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p
+)(esolc.ots
+)(esolc.ets
+)"br" ,gole.fles(nepo = rredts_pmt
+"" = rre
+6758401 = ezisffub
+:yrt
+:eurT elihw
+))ezisffub(daer.rredts_pmt(rts =+ rre
+:0 =! ezisffub % )rre(nel ro rre ton fi
+kaerb
+:rorrEwolfrevO tpecxe
+ssap
+)(esolc.rredts_pmt
+edocnruter.p = lavter
+tuodts ot etirw dna nidts ekat taht stpircs elpmis fo esac laiceps dnuora krow # :esle
+)"br" ,]SOPHTAPI[]0[selifni.fles(nepo = its
+)"bw" ,]SOPEMANO[]0[seliftuo.fles(nepo = ots
+tcerider ot llehs esu tsum #
+)its=nidts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p
+edocnruter.p = lavter
+)(esolc.ots
+)(esolc.its
+:0 == ezis_ts.)golt.fles(tats.so dna )golt.fles(elifsi.htap.so fi
+)golt.fles(knilnu.so
+:0 == ezis_ts.)gole.fles(tats.so dna )gole.fles(elifsi.htap.so fi
+)gole.fles(knilnu.so
+melborp # :rre dna 0 =! edocnruter.p fi
+)rre(etirw.rredts.sys
+)"enod nur"(gubed.gniggol
+lavter nruter
+
+
+:)(niam fed
+"""
+:sa lmx.loot esoprup laiceps a yb dellac eb ot stcepxe tI .repparw yxalaG a si sihT
+"tpircsR" reterpretni-- "oof" eman_loot-- "htaPtpircs$" htap_tpircs-- yp.repparWtpircSesaBgr>"nohtyp"=reterpretni dnammoc<
+>dnammoc/<
+"""
+)(resraPtnemugrA.esrapgra = resrap
+tnemugra_dda.resrap = a
+)""=tluafed ,"htap_tpircs--"(a
+)enoN=tluafed ,"eman_loot--"(a
+)enoN=tluafed ,"eman_reterpretni--"(a
+)enoN=tluafed ,"noisrev_reterpretni--"(a
+)enoN=tluafed ,"egakcap_exe--"(a
+)enoN=tluafed ,"noisrev_egakcap_exe--"(a
+)"dneppa"=noitca ,][=tluafed ,"selif_tupni--"(a
+)"dneppa"=noitca ,][=tluafed ,"selif_tuptuo--"(a
+)"nwonknU"=tluafed ,"liame_resu--"(a
+)enoN=tluafed ,"resu_dab--"(a
+)enoN=tluafed ,"looT_ekam--"(a
+)enoN=tluafed ,"txet_pleh--"(a
+)enoN=tluafed ,"csed_loot--"(a
+)enoN=tluafed ,"noisrev_loot--"(a
+)enoN=tluafed ,"snoitatic--"(a
+)][=tluafed ,"dneppa"=noitca ,"sretemarap_lanoitidda--"(a
+)eslaF=tluafed ,"eurt_erots"=noitca ,"sretemarap_lanoitidda_tide--"(a
+)"lanoitisop"=tluafed ,"ssapmarap--"(a
+)"tuoft/."=tluafed ,"tuoft--"(a
+)"loot_wen"=tluafed ,"loot_wen--"(a
+)enoN=tluafed ,"edomnur--"(a
+)(sgra_esrap.resrap = sgra
+( ,resu_dab.sgra ton tressa
+'elif noitarugifnoc yxalaG eht ni "sresu_nimda" ot s% sdda nimda yxalaG litnu loot siht esu ot dezirohtua TON si s% :DESIROHTUANU'
+)resu_dab.sgra ,resu_dab.sgra( %
+)
+( tressa
+eman_loot.sgra
+"qeSED=eman_loot-- ge - eman loot a stcepxe yrotcaF looT ##" ,)
+( tressa
+egakcap_exe.sgra ro eman_reterpretni.sgra
+"egakcap elbatucexe na ro reterpretni na stcepxe repparw yrotcaF looT ##" ,)
+( ro egakcap_exe.sgra tressa
+)htap_tpircs.sgra(elifsi.htap.so dna 0 > )htap_tpircs.sgra(nel
+"elbatucexe on fi R.oof=htap_tpircs-- ge - htap tpircs a stcepxe repparw yrotcaF looT ##" ,)
+[ = selif_tupni.sgra
+selif_tupni.sgra ni x rof )"" ,"'"(ecalper.)"" ,'"'(ecalper.x
+]
+smarap LC ni secaps htiw laed ot deen ew setouq evomer #
+:)sretemarap_lanoitidda.sgra(etaremune ni x ,i rof
+(ecalper.]i[sretemarap_lanoitidda.sgra = ]i[sretemarap_lanoitidda.sgra
+"" ,'"'
+)
+)sgra(rennuRtpircS = r
+:looT_ekam.sgra fi
+)(ratlooTekam.r = edocter
+:esle
+)(nur.r = edocter
+:edocter fi
+rennur boj ot eruliaf etacidni # )edocter(tixe.sys
+
+
+:"__niam__" == __eman__ fi
+)(niam
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/pyrevpos.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/pyrevpos.xml Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,49 @@
+
+
+
+
+ pyrevpos
+
+ python
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/test-data/input1_sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test-data/input1_sample Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,741 @@
+#!/usr/bin/env python
+# rgToolFactory.py
+# see https://github.com/fubar2/toolfactory
+#
+# copyright ross lazarus (ross stop lazarus at gmail stop com) May 2012
+#
+# all rights reserved
+# Licensed under the LGPL
+# suggestions for improvement and bug fixes welcome at https://github.com/fubar2/toolfactory
+#
+# July 2020: BCC was fun and I feel like rip van winkle after 5 years.
+# Decided to
+# 1. Fix the toolfactory so it works - done for simplest case
+# 2. Fix planemo so the toolfactory function works
+# 3. Rewrite bits using galaxyxml functions where that makes sense - done
+#
+# removed all the old complications including making the new tool use this same script
+# galaxyxml now generates the tool xml https://github.com/hexylena/galaxyxml
+# No support for automatic HTML file creation from arbitrary outputs
+# TODO: add option to run that code as a post execution hook
+# TODO: add additional history input parameters - currently only one
+
+
+import argparse
+import logging
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tarfile
+import tempfile
+import time
+
+import galaxyxml.tool as gxt
+import galaxyxml.tool.parameters as gxtp
+
+import lxml
+
+myversion = "V2.1 July 2020"
+verbose = True
+debug = True
+toolFactoryURL = "https://github.com/fubar2/toolfactory"
+ourdelim = "~~~"
+
+# --input_files="$input_files~~~$CL~~~$input_formats~~~$input_label
+# ~~~$input_help"
+IPATHPOS = 0
+ICLPOS = 1
+IFMTPOS = 2
+ILABPOS = 3
+IHELPOS = 4
+IOCLPOS = 5
+
+# --output_files "$otab.history_name~~~$otab.history_format~~~$otab.CL
+ONAMEPOS = 0
+OFMTPOS = 1
+OCLPOS = 2
+OOCLPOS = 3
+
+# --additional_parameters="$i.param_name~~~$i.param_value~~~
+# $i.param_label~~~$i.param_help~~~$i.param_type~~~$i.CL~~~i$.param_CLoverride"
+ANAMEPOS = 0
+AVALPOS = 1
+ALABPOS = 2
+AHELPPOS = 3
+ATYPEPOS = 4
+ACLPOS = 5
+AOVERPOS = 6
+AOCLPOS = 7
+
+
+foo = len(lxml.__version__)
+# fug you, flake8. Say my name!
+
+def timenow():
+ """return current time as a string
+ """
+ return time.strftime("%d/%m/%Y %H:%M:%S", time.localtime(time.time()))
+
+
+def quote_non_numeric(s):
+ """return a prequoted string for non-numerics
+ useful for perl and Rscript parameter passing?
+ """
+ try:
+ _ = float(s)
+ return s
+ except ValueError:
+ return '"%s"' % s
+
+
+html_escape_table = {"&": "&", ">": ">", "<": "<", "$": r"\$"}
+
+
+def html_escape(text):
+ """Produce entities within text."""
+ return "".join(html_escape_table.get(c, c) for c in text)
+
+
+def html_unescape(text):
+ """Revert entities within text. Multiple character targets so use replace"""
+ t = text.replace("&", "&")
+ t = t.replace(">", ">")
+ t = t.replace("<", "<")
+ t = t.replace("\\$", "$")
+ return t
+
+
+def parse_citations(citations_text):
+ """
+ """
+ citations = [c for c in citations_text.split("**ENTRY**") if c.strip()]
+ citation_tuples = []
+ for citation in citations:
+ if citation.startswith("doi"):
+ citation_tuples.append(("doi", citation[len("doi") :].strip()))
+ else:
+ citation_tuples.append(
+ ("bibtex", citation[len("bibtex") :].strip())
+ )
+ return citation_tuples
+
+
+class ScriptRunner:
+ """Wrapper for an arbitrary script
+ uses galaxyxml
+
+ """
+
+ def __init__(self, args=None):
+ """
+ prepare command line cl for running the tool here
+ and prepare elements needed for galaxyxml tool generation
+ """
+
+ self.infiles = [x.split(ourdelim) for x in args.input_files]
+ self.outfiles = [x.split(ourdelim) for x in args.output_files]
+ self.addpar = [x.split(ourdelim) for x in args.additional_parameters]
+ self.args = args
+ self.cleanuppar()
+ self.lastclredirect = None
+ self.lastxclredirect = None
+ self.cl = []
+ self.xmlcl = []
+ self.is_positional = self.args.parampass == "positional"
+ aCL = self.cl.append
+ assert args.parampass in [
+ "0",
+ "argparse",
+ "positional",
+ ], 'Parameter passing in args.parampass must be "0","positional" or "argparse"'
+ self.tool_name = re.sub("[^a-zA-Z0-9_]+", "", args.tool_name)
+ self.tool_id = self.tool_name
+ if self.args.interpreter_name:
+ exe = "$runMe"
+ else:
+ exe = self.args.exe_package
+ assert (
+ exe is not None
+ ), "No interpeter or executable passed in - nothing to run so cannot build"
+ self.tool = gxt.Tool(
+ self.args.tool_name,
+ self.tool_id,
+ self.args.tool_version,
+ self.args.tool_desc,
+ exe,
+ )
+ self.tinputs = gxtp.Inputs()
+ self.toutputs = gxtp.Outputs()
+ self.testparam = []
+ if (
+ self.args.runmode == "Executable" or self.args.runmode == "system"
+ ): # binary - no need
+ aCL(self.args.exe_package) # this little CL will just run
+ else:
+ self.prepScript()
+ self.elog = "%s_error_log.txt" % self.tool_name
+ self.tlog = "%s_runner_log.txt" % self.tool_name
+
+ if self.args.parampass == "0":
+ self.clsimple()
+ else:
+ clsuffix = []
+ xclsuffix = []
+ for i, p in enumerate(self.infiles):
+ if p[IOCLPOS] == "STDIN":
+ appendme = [
+ p[IOCLPOS],
+ p[ICLPOS],
+ p[IPATHPOS],
+ "< %s" % p[IPATHPOS],
+ ]
+ xappendme = [
+ p[IOCLPOS],
+ p[ICLPOS],
+ p[IPATHPOS],
+ "< $%s" % p[ICLPOS],
+ ]
+ else:
+ appendme = [p[IOCLPOS], p[ICLPOS], p[IPATHPOS], ""]
+ xappendme = [p[IOCLPOS], p[ICLPOS], "$%s" % p[ICLPOS], ""]
+ clsuffix.append(appendme)
+ xclsuffix.append(xappendme)
+ # print('##infile i=%d, appendme=%s' % (i,appendme))
+ for i, p in enumerate(self.outfiles):
+ if p[OOCLPOS] == "STDOUT":
+ self.lastclredirect = [">", p[ONAMEPOS]]
+ self.lastxclredirect = [">", "$%s" % p[OCLPOS]]
+ else:
+ clsuffix.append([p[OOCLPOS], p[OCLPOS], p[ONAMEPOS], ""])
+ xclsuffix.append(
+ [p[OOCLPOS], p[OCLPOS], "$%s" % p[ONAMEPOS], ""]
+ )
+ for p in self.addpar:
+ clsuffix.append(
+ [p[AOCLPOS], p[ACLPOS], p[AVALPOS], p[AOVERPOS]]
+ )
+ xclsuffix.append(
+ [p[AOCLPOS], p[ACLPOS], '"$%s"' % p[ANAMEPOS], p[AOVERPOS]]
+ )
+ clsuffix.sort()
+ xclsuffix.sort()
+ self.xclsuffix = xclsuffix
+ self.clsuffix = clsuffix
+ if self.args.parampass == "positional":
+ self.clpositional()
+ else:
+ self.clargparse()
+
+ def prepScript(self):
+ aCL = self.cl.append
+ rx = open(self.args.script_path, "r").readlines()
+ rx = [x.rstrip() for x in rx]
+ rxcheck = [x.strip() for x in rx if x.strip() > ""]
+ assert len(rxcheck) > 0, "Supplied script is empty. Cannot run"
+ self.script = "\n".join(rx)
+ fhandle, self.sfile = tempfile.mkstemp(
+ prefix=self.tool_name, suffix="_%s" % (self.args.interpreter_name)
+ )
+ tscript = open(self.sfile, "w")
+ tscript.write(self.script)
+ tscript.close()
+ self.indentedScript = " %s" % "\n".join(
+ [" %s" % html_escape(x) for x in rx]
+ )
+ self.escapedScript = "%s" % "\n".join(
+ [" %s" % html_escape(x) for x in rx]
+ )
+ art = "%s.%s" % (self.tool_name, self.args.interpreter_name)
+ artifact = open(art, "wb")
+ artifact.write(bytes(self.script, "utf8"))
+ artifact.close()
+ aCL(self.args.interpreter_name)
+ aCL(self.sfile)
+
+ def cleanuppar(self):
+ """ positional parameters are complicated by their numeric ordinal"""
+ for i, p in enumerate(self.infiles):
+ if self.args.parampass == "positional":
+ assert p[ICLPOS].isdigit(), (
+ "Positional parameters must be ordinal integers - got %s for %s"
+ % (p[ICLPOS], p[ILABPOS])
+ )
+ p.append(p[ICLPOS])
+ if p[ICLPOS].isdigit() or self.args.parampass == "0":
+ scl = "input%d" % (i + 1)
+ p[ICLPOS] = scl
+ self.infiles[i] = p
+ for i, p in enumerate(
+ self.outfiles
+ ): # trying to automagically gather using extensions
+ if self.args.parampass == "positional" and p[OCLPOS] != "STDOUT":
+ assert p[OCLPOS].isdigit(), (
+ "Positional parameters must be ordinal integers - got %s for %s"
+ % (p[OCLPOS], p[ONAMEPOS])
+ )
+ p.append(p[OCLPOS])
+ if p[OCLPOS].isdigit() or p[OCLPOS] == "STDOUT":
+ scl = p[ONAMEPOS]
+ p[OCLPOS] = scl
+ self.outfiles[i] = p
+ for i, p in enumerate(self.addpar):
+ if self.args.parampass == "positional":
+ assert p[ACLPOS].isdigit(), (
+ "Positional parameters must be ordinal integers - got %s for %s"
+ % (p[ACLPOS], p[ANAMEPOS])
+ )
+ p.append(p[ACLPOS])
+ if p[ACLPOS].isdigit():
+ scl = "input%s" % p[ACLPOS]
+ p[ACLPOS] = scl
+ self.addpar[i] = p
+
+ def clsimple(self):
+ """ no parameters - uses < and > for i/o
+ """
+ aCL = self.cl.append
+ aCL("<")
+ aCL(self.infiles[0][IPATHPOS])
+ aCL(">")
+ aCL(self.outfiles[0][OCLPOS])
+ aXCL = self.xmlcl.append
+ aXCL("<")
+ aXCL("$%s" % self.infiles[0][ICLPOS])
+ aXCL(">")
+ aXCL("$%s" % self.outfiles[0][ONAMEPOS])
+
+ def clpositional(self):
+ # inputs in order then params
+ aCL = self.cl.append
+ for (o_v, k, v, koverride) in self.clsuffix:
+ if " " in v:
+ aCL("%s" % v)
+ else:
+ aCL(v)
+ aXCL = self.xmlcl.append
+ for (o_v, k, v, koverride) in self.xclsuffix:
+ aXCL(v)
+ if self.lastxclredirect:
+ aXCL(self.lastxclredirect[0])
+ aXCL(self.lastxclredirect[1])
+
+ def clargparse(self):
+ """ argparse style
+ """
+ aCL = self.cl.append
+ aXCL = self.xmlcl.append
+ # inputs then params in argparse named form
+ for (o_v, k, v, koverride) in self.xclsuffix:
+ if koverride > "":
+ k = koverride
+ elif len(k.strip()) == 1:
+ k = "-%s" % k
+ else:
+ k = "--%s" % k
+ aXCL(k)
+ aXCL(v)
+ for (o_v, k, v, koverride) in self.clsuffix:
+ if koverride > "":
+ k = koverride
+ elif len(k.strip()) == 1:
+ k = "-%s" % k
+ else:
+ k = "--%s" % k
+ aCL(k)
+ aCL(v)
+
+ def getNdash(self, newname):
+ if self.is_positional:
+ ndash = 0
+ else:
+ ndash = 2
+ if len(newname) < 2:
+ ndash = 1
+ return ndash
+
+ def doXMLparam(self):
+ """flake8 made me do this..."""
+ for p in self.outfiles:
+ newname, newfmt, newcl, oldcl = p
+ ndash = self.getNdash(newcl)
+ aparm = gxtp.OutputData(newcl, format=newfmt, num_dashes=ndash)
+ aparm.positional = self.is_positional
+ if self.is_positional:
+ if oldcl == "STDOUT":
+ aparm.positional = 9999999
+ aparm.command_line_override = "> $%s" % newcl
+ else:
+ aparm.positional = int(oldcl)
+ aparm.command_line_override = "$%s" % newcl
+ self.toutputs.append(aparm)
+ tp = gxtp.TestOutput(
+ name=newcl, value="%s_sample" % newcl, format=newfmt
+ )
+ self.testparam.append(tp)
+ for p in self.infiles:
+ newname = p[ICLPOS]
+ newfmt = p[IFMTPOS]
+ ndash = self.getNdash(newname)
+ if not len(p[ILABPOS]) > 0:
+ alab = p[ICLPOS]
+ else:
+ alab = p[ILABPOS]
+ aninput = gxtp.DataParam(
+ newname,
+ optional=False,
+ label=alab,
+ help=p[IHELPOS],
+ format=newfmt,
+ multiple=False,
+ num_dashes=ndash,
+ )
+ aninput.positional = self.is_positional
+ self.tinputs.append(aninput)
+ tparm = gxtp.TestParam(name=newname, value="%s_sample" % newname)
+ self.testparam.append(tparm)
+ for p in self.addpar:
+ newname, newval, newlabel, newhelp, newtype, newcl, override, oldcl = p
+ if not len(newlabel) > 0:
+ newlabel = newname
+ ndash = self.getNdash(newname)
+ if newtype == "text":
+ aparm = gxtp.TextParam(
+ newname,
+ label=newlabel,
+ help=newhelp,
+ value=newval,
+ num_dashes=ndash,
+ )
+ elif newtype == "integer":
+ aparm = gxtp.IntegerParam(
+ newname,
+ label=newname,
+ help=newhelp,
+ value=newval,
+ num_dashes=ndash,
+ )
+ elif newtype == "float":
+ aparm = gxtp.FloatParam(
+ newname,
+ label=newname,
+ help=newhelp,
+ value=newval,
+ num_dashes=ndash,
+ )
+ else:
+ raise ValueError(
+ 'Unrecognised parameter type "%s" for\
+ additional parameter %s in makeXML'
+ % (newtype, newname)
+ )
+ aparm.positional = self.is_positional
+ if self.is_positional:
+ aninput.positional = int(oldcl)
+ self.tinputs.append(aparm)
+ self.tparm = gxtp.TestParam(newname, value=newval)
+ self.testparam.append(tparm)
+
+ def doNoXMLparam(self):
+ alab = self.infiles[0][ILABPOS]
+ if len(alab) == 0:
+ alab = self.infiles[0][ICLPOS]
+ max1s = (
+ "Maximum one input if parampass is 0 - more than one input files supplied - %s"
+ % str(self.infiles)
+ )
+ assert len(self.infiles) == 1, max1s
+ newname = self.infiles[0][ICLPOS]
+ aninput = gxtp.DataParam(
+ newname,
+ optional=False,
+ label=alab,
+ help=self.infiles[0][IHELPOS],
+ format=self.infiles[0][IFMTPOS],
+ multiple=False,
+ num_dashes=0,
+ )
+ aninput.command_line_override = "< $%s" % newname
+ aninput.positional = self.is_positional
+ self.tinputs.append(aninput)
+ tp = gxtp.TestParam(name=newname, value="%s_sample" % newname)
+ self.testparam.append(tp)
+ newname = self.outfiles[0][OCLPOS]
+ newfmt = self.outfiles[0][OFMTPOS]
+ anout = gxtp.OutputData(newname, format=newfmt, num_dashes=0)
+ anout.command_line_override = "> $%s" % newname
+ anout.positional = self.is_positional
+ self.toutputs.append(anout)
+ tp = gxtp.TestOutput(
+ name=newname, value="%s_sample" % newname, format=newfmt
+ )
+ self.testparam.append(tp)
+
+ def makeXML(self):
+ """
+ Create a Galaxy xml tool wrapper for the new script
+ Uses galaxyhtml
+ Hmmm. How to get the command line into correct order...
+ """
+ self.tool.command_line_override = self.xmlcl
+ if self.args.interpreter_name:
+ self.tool.interpreter = self.args.interpreter_name
+ if self.args.help_text:
+ helptext = open(self.args.help_text, "r").readlines()
+ helptext = [html_escape(x) for x in helptext]
+ self.tool.help = "".join([x for x in helptext])
+ else:
+ self.tool.help = (
+ "Please ask the tool author (%s) for help \
+ as none was supplied at tool generation\n"
+ % (self.args.user_email)
+ )
+ self.tool.version_command = None # do not want
+ requirements = gxtp.Requirements()
+
+ if self.args.interpreter_name:
+ if self.args.interpreter_name == "python":
+ requirements.append(
+ gxtp.Requirement(
+ "package", "python", self.args.interpreter_version
+ )
+ )
+ elif self.args.interpreter_name not in ["bash", "sh"]:
+ requirements.append(
+ gxtp.Requirement(
+ "package",
+ self.args.interpreter_name,
+ self.args.interpreter_version,
+ )
+ )
+ else:
+ if self.args.exe_package and self.args.parampass != "system":
+ requirements.append(
+ gxtp.Requirement(
+ "package",
+ self.args.exe_package,
+ self.args.exe_package_version,
+ )
+ )
+ self.tool.requirements = requirements
+ if self.args.parampass == "0":
+ self.doNoXMLparam()
+ else:
+ self.doXMLparam()
+ self.tool.outputs = self.toutputs
+ self.tool.inputs = self.tinputs
+ if self.args.runmode not in ["Executable", "system"]:
+ configfiles = gxtp.Configfiles()
+ configfiles.append(gxtp.Configfile(name="runMe", text=self.script))
+ self.tool.configfiles = configfiles
+ tests = gxtp.Tests()
+ test_a = gxtp.Test()
+ for tp in self.testparam:
+ test_a.append(tp)
+ tests.append(test_a)
+ self.tool.tests = tests
+ self.tool.add_comment(
+ "Created by %s at %s using the Galaxy Tool Factory."
+ % (self.args.user_email, timenow())
+ )
+ self.tool.add_comment("Source in git at: %s" % (toolFactoryURL))
+ self.tool.add_comment(
+ "Cite: Creating re-usable tools from scripts doi: 10.1093/bioinformatics/bts573"
+ )
+ exml = self.tool.export()
+ xf = open('%s.xml' % self.tool_name, "w")
+ xf.write(exml)
+ xf.write("\n")
+ xf.close()
+ # ready for the tarball
+
+ def makeTooltar(self):
+ """
+ a tool is a gz tarball with eg
+ /toolname/tool.xml /toolname/tool.py /toolname/test-data/test1_in.foo ...
+ NOTE names for test inputs and outputs are munged here so must
+ correspond to actual input and output names used on the generated cl
+ """
+ retval = self.run()
+ if retval:
+ sys.stderr.write(
+ "## Run failed. Cannot build yet. Please fix and retry"
+ )
+ sys.exit(1)
+ tdir = "tfout"
+ if not os.path.exists(tdir):
+ os.mkdir(tdir)
+ self.makeXML()
+ testdir = os.path.join(tdir, "test-data")
+ if not os.path.exists(testdir):
+ os.mkdir(testdir) # make tests directory
+ for p in self.infiles:
+ pth = p[IPATHPOS]
+ dest = os.path.join(testdir, "%s_sample" % p[ICLPOS])
+ shutil.copyfile(pth, dest)
+ for p in self.outfiles:
+ pth = p[OCLPOS]
+ if p[OOCLPOS] == "STDOUT" or self.args.parampass == "0":
+ pth = p[ONAMEPOS]
+ dest = os.path.join(testdir, "%s_sample" % p[ONAMEPOS])
+ shutil.copyfile(pth, dest)
+ dest = os.path.join(tdir, p[ONAMEPOS])
+ shutil.copyfile(pth, dest)
+ else:
+ pth = p[OCLPOS]
+ dest = os.path.join(testdir, "%s_sample" % p[OCLPOS])
+ shutil.copyfile(pth, dest)
+ dest = os.path.join(tdir, p[OCLPOS])
+ shutil.copyfile(pth, dest)
+
+ if os.path.exists(self.tlog) and os.stat(self.tlog).st_size > 0:
+ shutil.copyfile(self.tlog, os.path.join(testdir, "test1_log_outfiletxt"))
+ if self.args.runmode not in ["Executable", "system"]:
+ stname = os.path.join(tdir, "%s" % (self.sfile))
+ if not os.path.exists(stname):
+ shutil.copyfile(self.sfile, stname)
+ xreal = '%s.xml' % self.tool_name
+ xout = os.path.join(tdir,xreal)
+ shutil.copyfile(xreal, xout)
+ tarpath = "toolfactory_%s.tgz" % self.tool_name
+ tf = tarfile.open(tarpath, "w:gz")
+ tf.add(name=tdir, arcname=self.tool_name)
+ tf.close()
+ shutil.copyfile(tarpath, self.args.new_tool)
+ shutil.copyfile(xreal,"tool_xml.txt")
+ repdir = "TF_run_report_tempdir"
+ if not os.path.exists(repdir):
+ os.mkdir(repdir)
+ repoutnames = [x[OCLPOS] for x in self.outfiles]
+ with os.scandir('.') as outs:
+ for entry in outs:
+ if entry.name.endswith('.tgz') or not entry.is_file():
+ continue
+ if entry.name in repoutnames:
+ shutil.copyfile(entry.name,os.path.join(repdir,entry.name))
+ elif entry.name == "%s.xml" % self.tool_name:
+ shutil.copyfile(entry.name,os.path.join(repdir,"new_tool_xml"))
+ return retval
+
+ def run(self):
+ """
+ Some devteam tools have this defensive stderr read so I'm keeping with the faith
+ Feel free to update.
+ """
+ s = "run cl=%s" % str(self.cl)
+
+ logging.debug(s)
+ scl = " ".join(self.cl)
+ err = None
+ if self.args.parampass != "0":
+ ste = open(self.elog, "wb")
+ if self.lastclredirect:
+ sto = open(
+ self.lastclredirect[1], "wb"
+ ) # is name of an output file
+ else:
+ sto = open(self.tlog, "wb")
+ sto.write(
+ bytes(
+ "## Executing Toolfactory generated command line = %s\n"
+ % scl,
+ "utf8",
+ )
+ )
+ sto.flush()
+ p = subprocess.run(self.cl, shell=False, stdout=sto, stderr=ste)
+ sto.close()
+ ste.close()
+ tmp_stderr = open(self.elog, "rb")
+ err = ""
+ buffsize = 1048576
+ try:
+ while True:
+ err += str(tmp_stderr.read(buffsize))
+ if not err or len(err) % buffsize != 0:
+ break
+ except OverflowError:
+ pass
+ tmp_stderr.close()
+ retval = p.returncode
+ else: # work around special case of simple scripts that take stdin and write to stdout
+ sti = open(self.infiles[0][IPATHPOS], "rb")
+ sto = open(self.outfiles[0][ONAMEPOS], "wb")
+ # must use shell to redirect
+ p = subprocess.run(self.cl, shell=False, stdout=sto, stdin=sti)
+ retval = p.returncode
+ sto.close()
+ sti.close()
+ if os.path.isfile(self.tlog) and os.stat(self.tlog).st_size == 0:
+ os.unlink(self.tlog)
+ if os.path.isfile(self.elog) and os.stat(self.elog).st_size == 0:
+ os.unlink(self.elog)
+ if p.returncode != 0 and err: # problem
+ sys.stderr.write(err)
+ logging.debug("run done")
+ return retval
+
+
+def main():
+ """
+ This is a Galaxy wrapper. It expects to be called by a special purpose tool.xml as:
+ rgBaseScriptWrapper.py --script_path "$scriptPath" --tool_name "foo" --interpreter "Rscript"
+
+ """
+ parser = argparse.ArgumentParser()
+ a = parser.add_argument
+ a("--script_path", default="")
+ a("--tool_name", default=None)
+ a("--interpreter_name", default=None)
+ a("--interpreter_version", default=None)
+ a("--exe_package", default=None)
+ a("--exe_package_version", default=None)
+ a("--input_files", default=[], action="append")
+ a("--output_files", default=[], action="append")
+ a("--user_email", default="Unknown")
+ a("--bad_user", default=None)
+ a("--make_Tool", default=None)
+ a("--help_text", default=None)
+ a("--tool_desc", default=None)
+ a("--tool_version", default=None)
+ a("--citations", default=None)
+ a("--additional_parameters", action="append", default=[])
+ a("--edit_additional_parameters", action="store_true", default=False)
+ a("--parampass", default="positional")
+ a("--tfout", default="./tfout")
+ a("--new_tool", default="new_tool")
+ a("--runmode", default=None)
+ 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'
+ % (args.bad_user, args.bad_user)
+ )
+ assert (
+ args.tool_name
+ ), "## Tool Factory expects a tool name - eg --tool_name=DESeq"
+ assert (
+ args.interpreter_name or args.exe_package
+ ), "## Tool Factory wrapper expects an interpreter or an executable package"
+ assert args.exe_package or (
+ len(args.script_path) > 0 and os.path.isfile(args.script_path)
+ ), "## Tool Factory wrapper expects a script path - eg --script_path=foo.R if no executable"
+ args.input_files = [
+ x.replace('"', "").replace("'", "") for x in args.input_files
+ ]
+ # remove quotes we need to deal with spaces in CL params
+ for i, x in enumerate(args.additional_parameters):
+ args.additional_parameters[i] = args.additional_parameters[i].replace(
+ '"', ""
+ )
+ r = ScriptRunner(args)
+ if args.make_Tool:
+ retcode = r.makeTooltar()
+ else:
+ retcode = r.run()
+ if retcode:
+ sys.exit(retcode) # indicate failure to job runner
+
+
+if __name__ == "__main__":
+ main()
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/test-data/output_sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test-data/output_sample Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,741 @@
+nohtyp vne/nib/rsu/!#
+yp.yrotcaFlooTgr #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ees #
+#
+2102 yaM )moc pots liamg ta surazal pots ssor( surazal ssor thgirypoc #
+#
+devreser sthgir lla #
+LPGL eht rednu desneciL #
+yrotcafloot/2rabuf/moc.buhtig//:sptth ta emoclew sexif gub dna tnemevorpmi rof snoitseggus #
+#
+.sraey 5 retfa elkniw nav pir ekil leef I dna nuf saw CCB :0202 yluJ #
+ot dediceD #
+esac tselpmis rof enod - skrow ti os yrotcafloot eht xiF .1 #
+skrow noitcnuf yrotcafloot eht os omenalp xiF .2 #
+enod - esnes sekam taht erehw snoitcnuf lmxyxalag gnisu stib etirweR .3 #
+#
+tpircs emas siht esu loot wen eht gnikam gnidulcni snoitacilpmoc dlo eht lla devomer #
+lmxyxalag/anelyxeh/moc.buhtig//:sptth lmx loot eht setareneg won lmxyxalag #
+stuptuo yrartibra morf noitaerc elif LMTH citamotua rof troppus oN #
+kooh noitucexe tsop a sa edoc taht nur ot noitpo dda :ODOT #
+eno ylno yltnerruc - sretemarap tupni yrotsih lanoitidda dda :ODOT #
+
+
+esrapgra tropmi
+gniggol tropmi
+so tropmi
+er tropmi
+lituhs tropmi
+ssecorpbus tropmi
+sys tropmi
+elifrat tropmi
+elifpmet tropmi
+emit tropmi
+
+txg sa loot.lmxyxalag tropmi
+ptxg sa sretemarap.loot.lmxyxalag tropmi
+
+lmxl tropmi
+
+"0202 yluJ 1.2V" = noisrevym
+eurT = esobrev
+eurT = gubed
+"yrotcafloot/2rabuf/moc.buhtig//:sptth" = LRUyrotcaFloot
+"~~~" = miledruo
+
+lebal_tupni$~~~stamrof_tupni$~~~LC$~~~selif_tupni$"=selif_tupni-- #
+"pleh_tupni$~~~ #
+0 = SOPHTAPI
+1 = SOPLCI
+2 = SOPTMFI
+3 = SOPBALI
+4 = SOPLEHI
+5 = SOPLCOI
+
+LC.bato$~~~tamrof_yrotsih.bato$~~~eman_yrotsih.bato$" selif_tuptuo-- #
+0 = SOPEMANO
+1 = SOPTMFO
+2 = SOPLCO
+3 = SOPLCOO
+
+~~~eulav_marap.i$~~~eman_marap.i$"=sretemarap_lanoitidda-- #
+"edirrevoLC_marap.$i~~~LC.i$~~~epyt_marap.i$~~~pleh_marap.i$~~~lebal_marap.i$ #
+0 = SOPEMANA
+1 = SOPLAVA
+2 = SOPBALA
+3 = SOPPLEHA
+4 = SOPEPYTA
+5 = SOPLCA
+6 = SOPREVOA
+7 = SOPLCOA
+
+
+)__noisrev__.lmxl(nel = oof
+!eman ym yaS .8ekalf ,uoy guf #
+
+:)(wonemit fed
+gnirts a sa emit tnerruc nruter"""
+"""
+)))(emit.emit(emitlacol.emit ,"S%:M%:H% Y%/m%/d%"(emitfrts.emit nruter
+
+
+:)s(ciremun_non_etouq fed
+sciremun-non rof gnirts detouqerp a nruter"""
+?gnissap retemarap tpircsR dna lrep rof lufesu
+"""
+:yrt
+)s(taolf = _
+s nruter
+:rorrEeulaV tpecxe
+s % '"s%"' nruter
+
+
+}"$\"r :"$" ,";tl&" :"<" ,";tg&" :">" ,";pma&" :"&"{ = elbat_epacse_lmth
+
+
+:)txet(epacse_lmth fed
+""".txet nihtiw seititne ecudorP"""
+)txet ni c rof )c ,c(teg.elbat_epacse_lmth(nioj."" nruter
+
+
+:)txet(epacsenu_lmth fed
+"""ecalper esu os stegrat retcarahc elpitluM .txet nihtiw seititne treveR"""
+)"&" ,";pma&"(ecalper.txet = t
+)">" ,";tg&"(ecalper.t = t
+)"<" ,";tl&"(ecalper.t = t
+)"$" ,"$\\"(ecalper.t = t
+t nruter
+
+
+:)txet_snoitatic(snoitatic_esrap fed
+"""
+"""
+])(pirts.c fi )"**YRTNE**"(tilps.txet_snoitatic ni c rof c[ = snoitatic
+][ = selput_noitatic
+:snoitatic ni noitatic rof
+:)"iod"(htiwstrats.noitatic fi
+)))(pirts.]: )"iod"(nel[noitatic ,"iod"((dneppa.selput_noitatic
+:esle
+(dneppa.selput_noitatic
+))(pirts.]: )"xetbib"(nel[noitatic ,"xetbib"(
+)
+selput_noitatic nruter
+
+
+:rennuRtpircS ssalc
+tpircs yrartibra na rof repparW"""
+lmxyxalag sesu
+
+"""
+
+:)enoN=sgra ,fles(__tini__ fed
+"""
+ereh loot eht gninnur rof lc enil dnammoc eraperp
+noitareneg loot lmxyxalag rof dedeen stnemele eraperp dna
+"""
+
+]selif_tupni.sgra ni x rof )miledruo(tilps.x[ = selifni.fles
+]selif_tuptuo.sgra ni x rof )miledruo(tilps.x[ = seliftuo.fles
+]sretemarap_lanoitidda.sgra ni x rof )miledruo(tilps.x[ = rapdda.fles
+sgra = sgra.fles
+)(rappunaelc.fles
+enoN = tceriderlctsal.fles
+enoN = tceriderlcxtsal.fles
+][ = lc.fles
+][ = lclmx.fles
+"lanoitisop" == ssapmarap.sgra.fles = lanoitisop_si.fles
+dneppa.lc.fles = LCa
+[ ni ssapmarap.sgra tressa
+,"0"
+,"esrapgra"
+,"lanoitisop"
+'"esrapgra" ro "lanoitisop","0" eb tsum ssapmarap.sgra ni gnissap retemaraP' ,]
+)eman_loot.sgra ,"" ,"+]_9-0Z-Az-a^["(bus.er = eman_loot.fles
+eman_loot.fles = di_loot.fles
+:eman_reterpretni.sgra.fles fi
+"eMnur$" = exe
+:esle
+egakcap_exe.sgra.fles = exe
+( tressa
+enoN ton si exe
+"dliub tonnac os nur ot gnihton - ni dessap elbatucexe ro retepretni oN" ,)
+(looT.txg = loot.fles
+,eman_loot.sgra.fles
+,di_loot.fles
+,noisrev_loot.sgra.fles
+,csed_loot.sgra.fles
+,exe
+)
+)(stupnI.ptxg = stupnit.fles
+)(stuptuO.ptxg = stuptuot.fles
+][ = maraptset.fles
+( fi
+"metsys" == edomnur.sgra.fles ro "elbatucexE" == edomnur.sgra.fles
+deen on - yranib # :)
+nur tsuj lliw LC elttil siht # )egakcap_exe.sgra.fles(LCa
+:esle
+)(tpircSperp.fles
+eman_loot.fles % "txt.gol_rorre_s%" = gole.fles
+eman_loot.fles % "txt.gol_rennur_s%" = golt.fles
+
+:"0" == ssapmarap.sgra.fles fi
+)(elpmislc.fles
+:esle
+][ = xiffuslc
+][ = xiffuslcx
+:)selifni.fles(etaremune ni p ,i rof
+:"NIDTS" == ]SOPLCOI[p fi
+[ = emdneppa
+,]SOPLCOI[p
+,]SOPLCI[p
+,]SOPHTAPI[p
+,]SOPHTAPI[p % "s% <"
+]
+[ = emdneppax
+,]SOPLCOI[p
+,]SOPLCI[p
+,]SOPHTAPI[p
+,]SOPLCI[p % "s%$ <"
+]
+:esle
+]"" ,]SOPHTAPI[p ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppa
+]"" ,]SOPLCI[p % "s%$" ,]SOPLCI[p ,]SOPLCOI[p[ = emdneppax
+)emdneppa(dneppa.xiffuslc
+)emdneppax(dneppa.xiffuslcx
+))emdneppa,i( % 's%=emdneppa ,d%=i elifni##'(tnirp #
+:)seliftuo.fles(etaremune ni p ,i rof
+:"TUODTS" == ]SOPLCOO[p fi
+]]SOPEMANO[p ,">"[ = tceriderlctsal.fles
+]]SOPLCO[p % "s%$" ,">"[ = tceriderlcxtsal.fles
+:esle
+)]"" ,]SOPEMANO[p ,]SOPLCO[p ,]SOPLCOO[p[(dneppa.xiffuslc
+(dneppa.xiffuslcx
+]"" ,]SOPEMANO[p % "s%$" ,]SOPLCO[p ,]SOPLCOO[p[
+)
+:rapdda.fles ni p rof
+(dneppa.xiffuslc
+]]SOPREVOA[p ,]SOPLAVA[p ,]SOPLCA[p ,]SOPLCOA[p[
+)
+(dneppa.xiffuslcx
+]]SOPREVOA[p ,]SOPEMANA[p % '"s%$"' ,]SOPLCA[p ,]SOPLCOA[p[
+)
+)(tros.xiffuslc
+)(tros.xiffuslcx
+xiffuslcx = xiffuslcx.fles
+xiffuslc = xiffuslc.fles
+:"lanoitisop" == ssapmarap.sgra.fles fi
+)(lanoitisoplc.fles
+:esle
+)(esrapgralc.fles
+
+:)fles(tpircSperp fed
+dneppa.lc.fles = LCa
+)(senildaer.)"r" ,htap_tpircs.sgra.fles(nepo = xr
+]xr ni x rof )(pirtsr.x[ = xr
+]"" > )(pirts.x fi xr ni x rof )(pirts.x[ = kcehcxr
+"nur tonnaC .ytpme si tpircs deilppuS" ,0 > )kcehcxr(nel tressa
+)xr(nioj."n\" = tpircs.fles
+(pmetskm.elifpmet = elifs.fles ,eldnahf
+)eman_reterpretni.sgra.fles( % "s%_"=xiffus ,eman_loot.fles=xiferp
+)
+)"w" ,elifs.fles(nepo = tpircst
+)tpircs.fles(etirw.tpircst
+)(esolc.tpircst
+(nioj."n\" % "s% " = tpircSdetnedni.fles
+]xr ni x rof )x(epacse_lmth % "s% "[
+)
+(nioj."n\" % "s%" = tpircSdepacse.fles
+]xr ni x rof )x(epacse_lmth % "s% "[
+)
+)eman_reterpretni.sgra.fles ,eman_loot.fles( % "s%.s%" = tra
+)"bw" ,tra(nepo = tcafitra
+))"8ftu" ,tpircs.fles(setyb(etirw.tcafitra
+)(esolc.tcafitra
+)eman_reterpretni.sgra.fles(LCa
+)elifs.fles(LCa
+
+:)fles(rappunaelc fed
+"""lanidro ciremun rieht yb detacilpmoc era sretemarap lanoitisop """
+:)selifni.fles(etaremune ni p ,i rof
+:"lanoitisop" == ssapmarap.sgra.fles fi
+( ,)(tigidsi.]SOPLCI[p tressa
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"
+)]SOPBALI[p ,]SOPLCI[p( %
+)
+)]SOPLCI[p(dneppa.p
+:"0" == ssapmarap.sgra.fles ro )(tigidsi.]SOPLCI[p fi
+)1 + i( % "d%tupni" = lcs
+lcs = ]SOPLCI[p
+p = ]i[selifni.fles
+(etaremune ni p ,i rof
+seliftuo.fles
+snoisnetxe gnisu rehtag yllacigamotua ot gniyrt # :)
+:"TUODTS" =! ]SOPLCO[p dna "lanoitisop" == ssapmarap.sgra.fles fi
+( ,)(tigidsi.]SOPLCO[p tressa
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"
+)]SOPEMANO[p ,]SOPLCO[p( %
+)
+)]SOPLCO[p(dneppa.p
+:"TUODTS" == ]SOPLCO[p ro )(tigidsi.]SOPLCO[p fi
+]SOPEMANO[p = lcs
+lcs = ]SOPLCO[p
+p = ]i[seliftuo.fles
+:)rapdda.fles(etaremune ni p ,i rof
+:"lanoitisop" == ssapmarap.sgra.fles fi
+( ,)(tigidsi.]SOPLCA[p tressa
+"s% rof s% tog - sregetni lanidro eb tsum sretemarap lanoitisoP"
+)]SOPEMANA[p ,]SOPLCA[p( %
+)
+)]SOPLCA[p(dneppa.p
+:)(tigidsi.]SOPLCA[p fi
+]SOPLCA[p % "s%tupni" = lcs
+lcs = ]SOPLCA[p
+p = ]i[rapdda.fles
+
+:)fles(elpmislc fed
+o/i rof > dna < sesu - sretemarap on """
+"""
+dneppa.lc.fles = LCa
+)"<"(LCa
+)]SOPHTAPI[]0[selifni.fles(LCa
+)">"(LCa
+)]SOPLCO[]0[seliftuo.fles(LCa
+dneppa.lclmx.fles = LCXa
+)"<"(LCXa
+)]SOPLCI[]0[selifni.fles % "s%$"(LCXa
+)">"(LCXa
+)]SOPEMANO[]0[seliftuo.fles % "s%$"(LCXa
+
+:)fles(lanoitisoplc fed
+smarap neht redro ni stupni #
+dneppa.lc.fles = LCa
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof
+:v ni " " fi
+)v % "s%"(LCa
+:esle
+)v(LCa
+dneppa.lclmx.fles = LCXa
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof
+)v(LCXa
+:tceriderlcxtsal.fles fi
+)]0[tceriderlcxtsal.fles(LCXa
+)]1[tceriderlcxtsal.fles(LCXa
+
+:)fles(esrapgralc fed
+elyts esrapgra """
+"""
+dneppa.lc.fles = LCa
+dneppa.lclmx.fles = LCXa
+mrof deman esrapgra ni smarap neht stupni #
+:xiffuslcx.fles ni )edirrevok ,v ,k ,v_o( rof
+:"" > edirrevok fi
+edirrevok = k
+:1 == ))(pirts.k(nel file
+k % "s%-" = k
+:esle
+k % "s%--" = k
+)k(LCXa
+)v(LCXa
+:xiffuslc.fles ni )edirrevok ,v ,k ,v_o( rof
+:"" > edirrevok fi
+edirrevok = k
+:1 == ))(pirts.k(nel file
+k % "s%-" = k
+:esle
+k % "s%--" = k
+)k(LCa
+)v(LCa
+
+:)emanwen ,fles(hsadNteg fed
+:lanoitisop_si.fles fi
+0 = hsadn
+:esle
+2 = hsadn
+:2 < )emanwen(nel fi
+1 = hsadn
+hsadn nruter
+
+:)fles(marapLMXod fed
+"""...siht od em edam 8ekalf"""
+:seliftuo.fles ni p rof
+p = lcdlo ,lcwen ,tmfwen ,emanwen
+)lcwen(hsadNteg.fles = hsadn
+)hsadn=sehsad_mun ,tmfwen=tamrof ,lcwen(ataDtuptuO.ptxg = mrapa
+lanoitisop_si.fles = lanoitisop.mrapa
+:lanoitisop_si.fles fi
+:"TUODTS" == lcdlo fi
+9999999 = lanoitisop.mrapa
+lcwen % "s%$ >" = edirrevo_enil_dnammoc.mrapa
+:esle
+)lcdlo(tni = lanoitisop.mrapa
+lcwen % "s%$" = edirrevo_enil_dnammoc.mrapa
+)mrapa(dneppa.stuptuot.fles
+(tuptuOtseT.ptxg = pt
+tmfwen=tamrof ,lcwen % "elpmas_s%"=eulav ,lcwen=eman
+)
+)pt(dneppa.maraptset.fles
+:selifni.fles ni p rof
+]SOPLCI[p = emanwen
+]SOPTMFI[p = tmfwen
+)emanwen(hsadNteg.fles = hsadn
+:0 > )]SOPBALI[p(nel ton fi
+]SOPLCI[p = bala
+:esle
+]SOPBALI[p = bala
+(maraPataD.ptxg = tupnina
+,emanwen
+,eslaF=lanoitpo
+,bala=lebal
+,]SOPLEHI[p=pleh
+,tmfwen=tamrof
+,eslaF=elpitlum
+,hsadn=sehsad_mun
+)
+lanoitisop_si.fles = lanoitisop.tupnina
+)tupnina(dneppa.stupnit.fles
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = mrapt
+)mrapt(dneppa.maraptset.fles
+:rapdda.fles ni p rof
+p = lcdlo ,edirrevo ,lcwen ,epytwen ,plehwen ,lebalwen ,lavwen ,emanwen
+:0 > )lebalwen(nel ton fi
+emanwen = lebalwen
+)emanwen(hsadNteg.fles = hsadn
+:"txet" == epytwen fi
+(maraPtxeT.ptxg = mrapa
+,emanwen
+,lebalwen=lebal
+,plehwen=pleh
+,lavwen=eulav
+,hsadn=sehsad_mun
+)
+:"regetni" == epytwen file
+(maraPregetnI.ptxg = mrapa
+,emanwen
+,emanwen=lebal
+,plehwen=pleh
+,lavwen=eulav
+,hsadn=sehsad_mun
+)
+:"taolf" == epytwen file
+(maraPtaolF.ptxg = mrapa
+,emanwen
+,emanwen=lebal
+,plehwen=pleh
+,lavwen=eulav
+,hsadn=sehsad_mun
+)
+:esle
+(rorrEeulaV esiar
+\rof "s%" epyt retemarap desingocernU'
+'LMXekam ni s% retemarap lanoitidda
+)emanwen ,epytwen( %
+)
+lanoitisop_si.fles = lanoitisop.mrapa
+:lanoitisop_si.fles fi
+)lcdlo(tni = lanoitisop.tupnina
+)mrapa(dneppa.stupnit.fles
+)lavwen=eulav ,emanwen(maraPtseT.ptxg = mrapt.fles
+)mrapt(dneppa.maraptset.fles
+
+:)fles(marapLMXoNod fed
+]SOPBALI[]0[selifni.fles = bala
+:0 == )bala(nel fi
+]SOPLCI[]0[selifni.fles = bala
+( = s1xam
+"s% - deilppus selif tupni eno naht erom - 0 si ssapmarap fi tupni eno mumixaM"
+)selifni.fles(rts %
+)
+s1xam ,1 == )selifni.fles(nel tressa
+]SOPLCI[]0[selifni.fles = emanwen
+(maraPataD.ptxg = tupnina
+,emanwen
+,eslaF=lanoitpo
+,bala=lebal
+,]SOPLEHI[]0[selifni.fles=pleh
+,]SOPTMFI[]0[selifni.fles=tamrof
+,eslaF=elpitlum
+,0=sehsad_mun
+)
+emanwen % "s%$ <" = edirrevo_enil_dnammoc.tupnina
+lanoitisop_si.fles = lanoitisop.tupnina
+)tupnina(dneppa.stupnit.fles
+)emanwen % "elpmas_s%"=eulav ,emanwen=eman(maraPtseT.ptxg = pt
+)pt(dneppa.maraptset.fles
+]SOPLCO[]0[seliftuo.fles = emanwen
+]SOPTMFO[]0[seliftuo.fles = tmfwen
+)0=sehsad_mun ,tmfwen=tamrof ,emanwen(ataDtuptuO.ptxg = tuona
+emanwen % "s%$ >" = edirrevo_enil_dnammoc.tuona
+lanoitisop_si.fles = lanoitisop.tuona
+)tuona(dneppa.stuptuot.fles
+(tuptuOtseT.ptxg = pt
+tmfwen=tamrof ,emanwen % "elpmas_s%"=eulav ,emanwen=eman
+)
+)pt(dneppa.maraptset.fles
+
+:)fles(LMXekam fed
+"""
+tpircs wen eht rof repparw loot lmx yxalaG a etaerC
+lmthyxalag sesU
+...redro tcerroc otni enil dnammoc eht teg ot woH .mmmH
+"""
+lclmx.fles = edirrevo_enil_dnammoc.loot.fles
+:eman_reterpretni.sgra.fles fi
+eman_reterpretni.sgra.fles = reterpretni.loot.fles
+:txet_pleh.sgra.fles fi
+)(senildaer.)"r" ,txet_pleh.sgra.fles(nepo = txetpleh
+]txetpleh ni x rof )x(epacse_lmth[ = txetpleh
+)]txetpleh ni x rof x[(nioj."" = pleh.loot.fles
+:esle
+( = pleh.loot.fles
+\ pleh rof )s%( rohtua loot eht ksa esaelP"
+"n\noitareneg loot ta deilppus saw enon sa
+)liame_resu.sgra.fles( %
+)
+tnaw ton od # enoN = dnammoc_noisrev.loot.fles
+)(stnemeriuqeR.ptxg = stnemeriuqer
+
+:eman_reterpretni.sgra.fles fi
+:"nohtyp" == eman_reterpretni.sgra.fles fi
+(dneppa.stnemeriuqer
+(tnemeriuqeR.ptxg
+noisrev_reterpretni.sgra.fles ,"nohtyp" ,"egakcap"
+)
+)
+:]"hs" ,"hsab"[ ni ton eman_reterpretni.sgra.fles file
+(dneppa.stnemeriuqer
+(tnemeriuqeR.ptxg
+,"egakcap"
+,eman_reterpretni.sgra.fles
+,noisrev_reterpretni.sgra.fles
+)
+)
+:esle
+:"metsys" =! ssapmarap.sgra.fles dna egakcap_exe.sgra.fles fi
+(dneppa.stnemeriuqer
+(tnemeriuqeR.ptxg
+,"egakcap"
+,egakcap_exe.sgra.fles
+,noisrev_egakcap_exe.sgra.fles
+)
+)
+stnemeriuqer = stnemeriuqer.loot.fles
+:"0" == ssapmarap.sgra.fles fi
+)(marapLMXoNod.fles
+:esle
+)(marapLMXod.fles
+stuptuot.fles = stuptuo.loot.fles
+stupnit.fles = stupni.loot.fles
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi
+)(selifgifnoC.ptxg = selifgifnoc
+))tpircs.fles=txet ,"eMnur"=eman(elifgifnoC.ptxg(dneppa.selifgifnoc
+selifgifnoc = selifgifnoc.loot.fles
+)(stseT.ptxg = stset
+)(tseT.ptxg = a_tset
+:maraptset.fles ni pt rof
+)pt(dneppa.a_tset
+)a_tset(dneppa.stset
+stset = stset.loot.fles
+(tnemmoc_dda.loot.fles
+".yrotcaF looT yxalaG eht gnisu s% ta s% yb detaerC"
+))(wonemit ,liame_resu.sgra.fles( %
+)
+))LRUyrotcaFloot( % "s% :ta tig ni ecruoS"(tnemmoc_dda.loot.fles
+(tnemmoc_dda.loot.fles
+"375stb/scitamrofnioib/3901.01 :iod stpircs morf sloot elbasu-er gnitaerC :etiC"
+)
+)(tropxe.loot.fles = lmxe
+)"w" ,eman_loot.fles % 'lmx.s%'(nepo = fx
+)lmxe(etirw.fx
+)"n\"(etirw.fx
+)(esolc.fx
+llabrat eht rof ydaer #
+
+:)fles(ratlooTekam fed
+"""
+ge htiw llabrat zg a si loot a
+... oof.ni_1tset/atad-tset/emanloot/ yp.loot/emanloot/ lmx.loot/emanloot/
+tsum os ereh degnum era stuptuo dna stupni tset rof seman ETON
+lc detareneg eht no desu seman tuptuo dna tupni lautca ot dnopserroc
+"""
+)(nur.fles = lavter
+:lavter fi
+(etirw.rredts.sys
+"yrter dna xif esaelP .tey dliub tonnaC .deliaf nuR ##"
+)
+)1(tixe.sys
+"tuoft" = ridt
+:)ridt(stsixe.htap.so ton fi
+)ridt(ridkm.so
+)(LMXekam.fles
+)"atad-tset" ,ridt(nioj.htap.so = ridtset
+:)ridtset(stsixe.htap.so ton fi
+yrotcerid stset ekam # )ridtset(ridkm.so
+:selifni.fles ni p rof
+]SOPHTAPI[p = htp
+)]SOPLCI[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+:seliftuo.fles ni p rof
+]SOPLCO[p = htp
+:"0" == ssapmarap.sgra.fles ro "TUODTS" == ]SOPLCOO[p fi
+]SOPEMANO[p = htp
+)]SOPEMANO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+)]SOPEMANO[p ,ridt(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+:esle
+]SOPLCO[p = htp
+)]SOPLCO[p % "elpmas_s%" ,ridtset(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+)]SOPLCO[p ,ridt(nioj.htap.so = tsed
+)tsed ,htp(elifypoc.lituhs
+
+:0 > ezis_ts.)golt.fles(tats.so dna )golt.fles(stsixe.htap.so fi
+))"txteliftuo_gol_1tset" ,ridtset(nioj.htap.so ,golt.fles(elifypoc.lituhs
+:]"metsys" ,"elbatucexE"[ ni ton edomnur.sgra.fles fi
+))elifs.fles( % "s%" ,ridt(nioj.htap.so = emants
+:)emants(stsixe.htap.so ton fi
+)emants ,elifs.fles(elifypoc.lituhs
+eman_loot.fles % 'lmx.s%' = laerx
+)laerx,ridt(nioj.htap.so = tuox
+)tuox ,laerx(elifypoc.lituhs
+eman_loot.fles % "zgt.s%_yrotcafloot" = htaprat
+)"zg:w" ,htaprat(nepo.elifrat = ft
+)eman_loot.fles=emancra ,ridt=eman(dda.ft
+)(esolc.ft
+)loot_wen.sgra.fles ,htaprat(elifypoc.lituhs
+)"txt.lmx_loot",laerx(elifypoc.lituhs
+"ridpmet_troper_nur_FT" = ridper
+:)ridper(stsixe.htap.so ton fi
+)ridper(ridkm.so
+]seliftuo.fles ni x rof ]SOPLCO[x[ = semantuoper
+:stuo sa )'.'(ridnacs.so htiw
+:stuo ni yrtne rof
+:)(elif_si.yrtne ton ro )'zgt.'(htiwsdne.eman.yrtne fi
+eunitnoc
+:semantuoper ni eman.yrtne fi
+))eman.yrtne,ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs
+:eman_loot.fles % "lmx.s%" == eman.yrtne file
+))"lmx_loot_wen",ridper(nioj.htap.so,eman.yrtne(elifypoc.lituhs
+lavter nruter
+
+:)fles(nur fed
+"""
+htiaf eht htiw gnipeek m'I os daer rredts evisnefed siht evah sloot maetved emoS
+.etadpu ot eerf leeF
+"""
+)lc.fles(rts % "s%=lc nur" = s
+
+)s(gubed.gniggol
+)lc.fles(nioj." " = lcs
+enoN = rre
+:"0" =! ssapmarap.sgra.fles fi
+)"bw" ,gole.fles(nepo = ets
+:tceriderlctsal.fles fi
+(nepo = ots
+"bw" ,]1[tceriderlctsal.fles
+elif tuptuo na fo eman si # )
+:esle
+)"bw" ,golt.fles(nepo = ots
+(etirw.ots
+(setyb
+"n\s% = enil dnammoc detareneg yrotcaflooT gnitucexE ##"
+,lcs %
+,"8ftu"
+)
+)
+)(hsulf.ots
+)ets=rredts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p
+)(esolc.ots
+)(esolc.ets
+)"br" ,gole.fles(nepo = rredts_pmt
+"" = rre
+6758401 = ezisffub
+:yrt
+:eurT elihw
+))ezisffub(daer.rredts_pmt(rts =+ rre
+:0 =! ezisffub % )rre(nel ro rre ton fi
+kaerb
+:rorrEwolfrevO tpecxe
+ssap
+)(esolc.rredts_pmt
+edocnruter.p = lavter
+tuodts ot etirw dna nidts ekat taht stpircs elpmis fo esac laiceps dnuora krow # :esle
+)"br" ,]SOPHTAPI[]0[selifni.fles(nepo = its
+)"bw" ,]SOPEMANO[]0[seliftuo.fles(nepo = ots
+tcerider ot llehs esu tsum #
+)its=nidts ,ots=tuodts ,eslaF=llehs ,lc.fles(nur.ssecorpbus = p
+edocnruter.p = lavter
+)(esolc.ots
+)(esolc.its
+:0 == ezis_ts.)golt.fles(tats.so dna )golt.fles(elifsi.htap.so fi
+)golt.fles(knilnu.so
+:0 == ezis_ts.)gole.fles(tats.so dna )gole.fles(elifsi.htap.so fi
+)gole.fles(knilnu.so
+melborp # :rre dna 0 =! edocnruter.p fi
+)rre(etirw.rredts.sys
+)"enod nur"(gubed.gniggol
+lavter nruter
+
+
+:)(niam fed
+"""
+:sa lmx.loot esoprup laiceps a yb dellac eb ot stcepxe tI .repparw yxalaG a si sihT
+"tpircsR" reterpretni-- "oof" eman_loot-- "htaPtpircs$" htap_tpircs-- yp.repparWtpircSesaBgr>"nohtyp"=reterpretni dnammoc<
+>dnammoc/<
+"""
+)(resraPtnemugrA.esrapgra = resrap
+tnemugra_dda.resrap = a
+)""=tluafed ,"htap_tpircs--"(a
+)enoN=tluafed ,"eman_loot--"(a
+)enoN=tluafed ,"eman_reterpretni--"(a
+)enoN=tluafed ,"noisrev_reterpretni--"(a
+)enoN=tluafed ,"egakcap_exe--"(a
+)enoN=tluafed ,"noisrev_egakcap_exe--"(a
+)"dneppa"=noitca ,][=tluafed ,"selif_tupni--"(a
+)"dneppa"=noitca ,][=tluafed ,"selif_tuptuo--"(a
+)"nwonknU"=tluafed ,"liame_resu--"(a
+)enoN=tluafed ,"resu_dab--"(a
+)enoN=tluafed ,"looT_ekam--"(a
+)enoN=tluafed ,"txet_pleh--"(a
+)enoN=tluafed ,"csed_loot--"(a
+)enoN=tluafed ,"noisrev_loot--"(a
+)enoN=tluafed ,"snoitatic--"(a
+)][=tluafed ,"dneppa"=noitca ,"sretemarap_lanoitidda--"(a
+)eslaF=tluafed ,"eurt_erots"=noitca ,"sretemarap_lanoitidda_tide--"(a
+)"lanoitisop"=tluafed ,"ssapmarap--"(a
+)"tuoft/."=tluafed ,"tuoft--"(a
+)"loot_wen"=tluafed ,"loot_wen--"(a
+)enoN=tluafed ,"edomnur--"(a
+)(sgra_esrap.resrap = sgra
+( ,resu_dab.sgra ton tressa
+'elif noitarugifnoc yxalaG eht ni "sresu_nimda" ot s% sdda nimda yxalaG litnu loot siht esu ot dezirohtua TON si s% :DESIROHTUANU'
+)resu_dab.sgra ,resu_dab.sgra( %
+)
+( tressa
+eman_loot.sgra
+"qeSED=eman_loot-- ge - eman loot a stcepxe yrotcaF looT ##" ,)
+( tressa
+egakcap_exe.sgra ro eman_reterpretni.sgra
+"egakcap elbatucexe na ro reterpretni na stcepxe repparw yrotcaF looT ##" ,)
+( ro egakcap_exe.sgra tressa
+)htap_tpircs.sgra(elifsi.htap.so dna 0 > )htap_tpircs.sgra(nel
+"elbatucexe on fi R.oof=htap_tpircs-- ge - htap tpircs a stcepxe repparw yrotcaF looT ##" ,)
+[ = selif_tupni.sgra
+selif_tupni.sgra ni x rof )"" ,"'"(ecalper.)"" ,'"'(ecalper.x
+]
+smarap LC ni secaps htiw laed ot deen ew setouq evomer #
+:)sretemarap_lanoitidda.sgra(etaremune ni x ,i rof
+(ecalper.]i[sretemarap_lanoitidda.sgra = ]i[sretemarap_lanoitidda.sgra
+"" ,'"'
+)
+)sgra(rennuRtpircS = r
+:looT_ekam.sgra fi
+)(ratlooTekam.r = edocter
+:esle
+)(nur.r = edocter
+:edocter fi
+rennur boj ot eruliaf etacidni # )edocter(tixe.sys
+
+
+:"__niam__" == __eman__ fi
+)(niam
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/test-data/test1_log.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test-data/test1_log.txt Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,1 @@
+## Executing Toolfactory generated command line = python /home/ross/galaxy/database/tmp/pyrevposz9rx5n8f.python /home/ross/galaxy/database/objects/9/8/a/dataset_98a46be8-3a8f-4152-90ba-4a9e913f4eb4.dat output
diff -r 000000000000 -r bf92b6bd8b20 pyrevpos/test1_log_outfiletxt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyrevpos/test1_log_outfiletxt Tue Nov 24 21:59:01 2020 +0000
@@ -0,0 +1,1 @@
+## Executing Toolfactory generated command line = python /home/ross/galaxy/database/tmp/pyrevposygle0d43_python /home/ross/galaxy/database/objects/f/a/6/dataset_fa66be33-3c07-465d-be42-f2b0950b293d.dat output