# HG changeset patch
# User fubar
# Date 1606255450 0
# Node ID c5d770f2afeae98fd26ecd0229fc3a5af6ab2dd4
# Parent bf92b6bd8b207368601b46bed9d1b3b4edb21735
Uploaded
diff -r bf92b6bd8b20 -r c5d770f2afea pyrevpos/.shed.yml
--- a/pyrevpos/.shed.yml Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-description: pyrevpos
-name: pyrevpos
-owner: fubar
-type: unrestricted
diff -r bf92b6bd8b20 -r c5d770f2afea pyrevpos/output
--- a/pyrevpos/output Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,741 +0,0 @@
-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 bf92b6bd8b20 -r c5d770f2afea pyrevpos/pyrevpos.xml
--- a/pyrevpos/pyrevpos.xml Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-
-
-
-
- pyrevpos
-
- python
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r bf92b6bd8b20 -r c5d770f2afea pyrevpos/test-data/input1_sample
--- a/pyrevpos/test-data/input1_sample Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,741 +0,0 @@
-#!/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 bf92b6bd8b20 -r c5d770f2afea pyrevpos/test-data/output_sample
--- a/pyrevpos/test-data/output_sample Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,741 +0,0 @@
-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 bf92b6bd8b20 -r c5d770f2afea pyrevpos/test-data/test1_log.txt
--- a/pyrevpos/test-data/test1_log.txt Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-## 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 bf92b6bd8b20 -r c5d770f2afea pyrevpos/test1_log_outfiletxt
--- a/pyrevpos/test1_log_outfiletxt Tue Nov 24 21:59:01 2020 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-## 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
diff -r bf92b6bd8b20 -r c5d770f2afea tacrev/outfile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tacrev/outfile Tue Nov 24 22:04:10 2020 +0000
@@ -0,0 +1,166 @@
+
+gnp.looTtpircScimanyd/segami/989ef2308adf/crs/rekamlootyxalag/rabuf/gro.tekcubtib//:ptth
+
+**tohsneercs yrotagilbO**
+
+LPGL eht rednu desneciL
+
+.devreser sthgir llA
+
+moc doirep liam g ta surazal ssor
+0102 surazaL ssoR thgirypoC
+
+**gnisneciL**
+
+fer=epytyek&JWYdwMrWs1hQzcl=yekji?375stb/tnirper/igc/gro.slanruojdrofxo.scitamrofnioib//:ptth
+
+375stb/scitamrofnioib/3901.01 :iod ;2102 scitamrofnioiB
+maeT yxalaG ehT ;nnameiZ kraM ;ipsaK ynotnA ;surazaL ssoR
+yrotcaF looT yxalaG ehT :stpircs morf sloot elbasu-er gnitaerC
+
+**noitubirttA**
+
+?esaelp seussi tekcubtib sa emoclew snoitseggus dna sehctaP
+
+**edoC dneS**
+
+.yracs yllaer si ti - eno siht yllaicepsE .loot yna llatsni uoy erofeb edoc eht daeR
+.dehsloot efas ecitcarp ,esaelp tub erucesni yllausunu gnihtyna od tonnac resu
+rieht dna yllamron nur tsuj yehT .efas si tpircs eht gnimussa - loot rehtona
+tsuj s'ti ,loot detareneg a llatsni uoy ecnO
+
+**ytiruceS loot detareneG**
+
+.dehsloot ruoy esu ot derugifnoc yxalaG noitcudorp yna ni noitallatsni
+detamotua ylegral dna efas snaem tahT .dehsloot lacol ruoy no yrotisoper a
+ni loot yxalaG yranidro na sa nur ot ydaer tpircs ruoy gniniatnoc elif pizg
+elbitapmoc dehsloot a etareneg nac uoy ,atad tset emos no skrow tpircs eht ecnO
+
+.llew ytterp skrow ti - gubed uoy sa ti nurer ot gniyrt
+erofeb tpircs eht tide dna nottub oder eht esu nac uoY .snur ti yllautneve
+dna srorre xatnys eht xif uoy ,tpircs ruoy nur dna etsap uoY
+
+**od uoy tahW**
+
+.eno xelpmoc erom
+a ot pu gel suoires a uoy steg tpircs detareneg a ecnis pu dliub dna llams
+trats os ,loot yxalaG yna ekil decnahne dna detide eb nac sloot detareneG
+
+.elbaliava eb ot deen kigamegami
+dna taht os tpircstsohg htiw knurhs era s'fdp detaolb s'R dna slianbmuht sa
+nwohs era stuptuo fdp - selif tuptuo dna segami setirw tpircs eht fi lufesu
+- etagivan ot resu eht rof egap xedni LMTH detarenegotua na no sknil otni
+stuptuo fo rebmun yna tcelloc yllanoitpo dna ,tesatad yrotsih wen eno etirw
+nac yllanoitpO .yrotsih eht morf tupni eno daer taht stpircs elpmis ot DETIMIL
+
+.taht si looc woH .detareneg yllacitamotua era stset lanoitcnuF .yltnerruc lrep
+dna R ,nohtyp ni stpircs elpmis rof yrotcaf loot a si sihT
+
+ **seod ti tahW**
+
+.slliks lacinhcet etairporppa fo kcal eb
+ylbaborp dluow atad yxalaG ruoy lla gniyortsed no tneb tnaercsim a edepmi
+dluow taht gniht ylno eht ,revres yxalaG ruoy no tpircs yrartibra yna nur
+ot dewolla fI .tnemom a rof ti tuoba knihT **loot siht nur nac sresu_nimda
+YLNO .thgir s'taht ,seY** ini.igsw_esrevinu ni sresu_nimda ni sDI htiw elpoep
+- sresu nimda yb YLNO elbasu eb neht lliw flesti loot yrotcaf loot ehT
+
+**noitucexe detcirtseR**
+
+
+.lmx.fnoc_sepyt_atad lacol ruoy ot
+>/ "eurT"=ssalcbus "pizg-x/trapitlum"=epytemim
+"yraniB:yranib.sepytatad.yxalag"=epyt "zg.dehsloot"=noisnetxe epytatad<
+:dda esaelp
+,ereht ydaerla ton fI
+
+>noitces/<
+>/"lmx.yrotcaFlooTgr/yrotcafloot"=elif loot<
+>"sredliubloot"=di "sloot gnidliub looT"=eman noitces<
+
+::ekil gnihtemos - elif
+lmx eht ot gnitniop
+yrtne wen a sdeen lmx.fnoc_loot ruoY yrotcafloot/sloot sa hcus yrotceridbus
+sloot wen a otni deipoc
+eb ot deen ereh selif yp dna lmx eht ,yaw taht loot eht teg t'nac uoy fI
+
+.ti llatsni ot noitpo eht tceles dna edoc eht weiver dna ti nepO .yrotisoper
+yrotcafloot eht rof hcraes dna /ude.usp.xb.2g.dehsloot//:sptth ta dehsloot
+niaM yxalaG eht dniF .knil "sdehs loot esworb dna hcraeS" evitartsinimda
+eht gnisu yltneinevnoc tsom ti llatsni nac uoY .loot yxalaG a si sihT
+**noitallatsnI**
+
+emoH/ikiw/yrotcaflootyxalag/rabuf/gro.tekcubtib//:sptth
+ees seceip eht lla peek ot teg uoy ,ti kaerb uoy fi ,nehT .resu_nimda
+na era uoy erehw ecnatsni lacol hctarcs/lanosrep/etavirp a no loot
+siht gnillatsni repoleved a eb dluohs uoy ,dehSlooT eht dna yxalaG
+,loot siht fo *rewop emosewa eht tiolpxe ylefas dna ylluf oT*
+
+.selbairav on
+,tuptuo eno ,tupni enO .stnenopmoc wolfkrow rof tcefrep era sloot yrotcaf looT
+
+.emit yreve tpircs ruoy nur tub,loot yxalaG rehto yna ekil tsuj nur yrotcaFlooT
+eht htiw etareneg uoy sloot eht ,sdrow rehto nI .yrotsih s'resu eht morf
+nesohc tupni eht htiw detucexe eb lliw tliub saw ti nehw deilppus saw taht
+tpircs eht ,emit hcae - ti nur nac sresu lacol ,dellatsni si loot wen eht ecnO
+
+.ecafretni evitartsinimda revres eht morf
+revres yxalaG lacol yna otni dellatsni eb nac ti ,dehSlooT a ni s'ti ecnO
+
+.yrotisoper loot wen a sa dehSlooT yxalaG
+a ot daolpu ot ydaer evihcra na s'ti ,stseggus eman eht sa - *zg.dehsloot*
+epytatad yxalaG wen a fo mrof eht ni detareneg eb lliw loot wen ehT .seman
+dna txet pleh emos ylppus dna noitpo "etareneg" eht tceleS .detareneg eb nac
+tpircs ruoy snur taht loot yxalaG wen a ,yllufssecus snur tpircs eht ecnO
+
+.taeper ,hsaw ,esniR .niaga etucexe dna
+gub eht xiF .tpircs nekorb htiw etelpmoc mrof eht etaercer ot yrotsih ruoy
+ni tuptuo loot eht no nottub "oder" eht esu ,wohemos sliaf tpircs eht fI
+
+.loot atad wen dda yrotsih yxalaG eht
+gnisu tes atad tset llams a etaerc ot deen osla ll'uoY .esaelp reterpretni
+thgir eht tceles ot rebmemer - tuo ti yrt ot eseht etsap dna tuc tsuj nac
+uoY .mrof yrotcaF looT eht no egaugnal gnitpircs hcae ni elpmaxe na si erehT
+
+em rof skrow ```atad-tset/yrotcafloot/srekam_loot/sloot/yxalag/~ atad_tset-- yxalag/~ toor_yxalag-- lmx.2yrotcaFlooTgr tset omenalp```
+
+.tpircs wen ruoy tset ot
+yrotsih ruoy morf tceles ot ydaer elpmaxe tupni tset llams a dna dnim ni egakcap a evah ro ,xob txet
+a otni etsap ot tpircs a deraperp evah dluohs uoy ,yrotcaFlooT eht esu oT
+
+**liateD eroM**
+
+.sresu ruoy rof sloot yxalaG rehto lla ekil yltcaxe krow dna
+rotartsinimda na yb dehs loot a aiv dellatsni era sloot detareneG
+.xob eht fo tuo elbitapmoc wolfkrow ylluf ,loot yxalaG yranidro ,wen a otni
+tnemeriuqer a sa dekab si elbatucexe ro tpircs deilppus ehT .loot yxalaG wen
+a dliub ot desu eb nac yeht ,decudorp neeb evah stuptuo esac tset eht ecnO
+.ylppus uoy sgnittes retemarap dna stupni atad tset elpmas llams gnisu detareneg si tset A
+
+**yxalaG yna otni noitallatsni rof sloot yxalaG wen fo noitareneg detamotuA**
+
+
+.loot yxalaG a gnisu ,setunim ni loot yxalaG yranidro na otni denrut eb nac tI
+
+*sretemarap elyts esrapgra ro lanoitisop htiw elbatucexe yna ro tpircs hsab/lrep/nohtyp/r gnikrow a evah uoY*
+
+.tuptuo sa tes atad wen elgnis a gnitirw
+,stes atad tupni detceles elpitlum revo lrep dna hs ,nohtyp ,R ni stpircs nur
+ot meht gniwolla ,revres yxalaG tsoh eht fo srotartsinimda detangised lla ot
+gnitpircs suoregnad ylemertxe erofereht dna *detcirtsernu* gnisopxe yb skrow tI
+.sloot yxalaG wen gnitareneg fo elbapac loot yxalaG lausunu na si sihT
+
+**yrotS trohS**
+
+.krow dehsilbup ruoy ni loot siht esu uoy fi
+fer=epytyek&JWYdwMrWs1hQzcl=yekji?375stb/tnirper/igc/gro.slanruojdrofxo.scitamrofnioib//:ptth
+ta ecruoser eht etic esaelP
+
+keeB ned nav suiraM yb detroper sgub xif ot 4102 8 tsugua detadpU
+
+troppus noitatic gnidda notlihC nhoJ yb 4102 tsugua detadpU
+
+ecnatsni noitcudorp ro cilbup a no REVEN esaelP
+YLNO yxalaG etavirp a no loot siht llatsnI
+
+*trats uoy erofeb GNINRAW*
diff -r bf92b6bd8b20 -r c5d770f2afea tacrev/tacrev.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tacrev/tacrev.xml Tue Nov 24 22:04:10 2020 +0000
@@ -0,0 +1,37 @@
+
+
+
+
+ tacrev
+
+
+
+
+
+
+
+
+
+$outfile]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r bf92b6bd8b20 -r c5d770f2afea tacrev/test-data/input1_sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tacrev/test-data/input1_sample Tue Nov 24 22:04:10 2020 +0000
@@ -0,0 +1,166 @@
+*WARNING before you start*
+
+ Install this tool on a private Galaxy ONLY
+ Please NEVER on a public or production instance
+
+Updated august 2014 by John Chilton adding citation support
+
+Updated august 8 2014 to fix bugs reported by Marius van den Beek
+
+Please cite the resource at
+http://bioinformatics.oxfordjournals.org/cgi/reprint/bts573?ijkey=lczQh1sWrMwdYWJ&keytype=ref
+if you use this tool in your published work.
+
+**Short Story**
+
+This is an unusual Galaxy tool capable of generating new Galaxy tools.
+It works by exposing *unrestricted* and therefore extremely dangerous scripting
+to all designated administrators of the host Galaxy server, allowing them to
+run scripts in R, python, sh and perl over multiple selected input data sets,
+writing a single new data set as output.
+
+*You have a working r/python/perl/bash script or any executable with positional or argparse style parameters*
+
+It can be turned into an ordinary Galaxy tool in minutes, using a Galaxy tool.
+
+
+**Automated generation of new Galaxy tools for installation into any Galaxy**
+
+A test is generated using small sample test data inputs and parameter settings you supply.
+Once the test case outputs have been produced, they can be used to build a
+new Galaxy tool. The supplied script or executable is baked as a requirement
+into a new, ordinary Galaxy tool, fully workflow compatible out of the box.
+Generated tools are installed via a tool shed by an administrator
+and work exactly like all other Galaxy tools for your users.
+
+**More Detail**
+
+To use the ToolFactory, you should have prepared a script to paste into a
+text box, or have a package in mind and a small test input example ready to select from your history
+to test your new script.
+
+```planemo test rgToolFactory2.xml --galaxy_root ~/galaxy --test_data ~/galaxy/tools/tool_makers/toolfactory/test-data``` works for me
+
+There is an example in each scripting language on the Tool Factory form. You
+can just cut and paste these to try it out - remember to select the right
+interpreter please. You'll also need to create a small test data set using
+the Galaxy history add new data tool.
+
+If the script fails somehow, use the "redo" button on the tool output in
+your history to recreate the form complete with broken script. Fix the bug
+and execute again. Rinse, wash, repeat.
+
+Once the script runs sucessfully, a new Galaxy tool that runs your script
+can be generated. Select the "generate" option and supply some help text and
+names. The new tool will be generated in the form of a new Galaxy datatype
+*toolshed.gz* - as the name suggests, it's an archive ready to upload to a
+Galaxy ToolShed as a new tool repository.
+
+Once it's in a ToolShed, it can be installed into any local Galaxy server
+from the server administrative interface.
+
+Once the new tool is installed, local users can run it - each time, the script
+that was supplied when it was built will be executed with the input chosen
+from the user's history. In other words, the tools you generate with the
+ToolFactory run just like any other Galaxy tool,but run your script every time.
+
+Tool factory tools are perfect for workflow components. One input, one output,
+no variables.
+
+*To fully and safely exploit the awesome power* of this tool,
+Galaxy and the ToolShed, you should be a developer installing this
+tool on a private/personal/scratch local instance where you are an
+admin_user. Then, if you break it, you get to keep all the pieces see
+https://bitbucket.org/fubar/galaxytoolfactory/wiki/Home
+
+**Installation**
+This is a Galaxy tool. You can install it most conveniently using the
+administrative "Search and browse tool sheds" link. Find the Galaxy Main
+toolshed at https://toolshed.g2.bx.psu.edu/ and search for the toolfactory
+repository. Open it and review the code and select the option to install it.
+
+If you can't get the tool that way, the xml and py files here need to be
+copied into a new tools
+subdirectory such as tools/toolfactory Your tool_conf.xml needs a new entry
+pointing to the xml
+file - something like::
+
+
+
+If not already there,
+please add:
+
+to your local data_types_conf.xml.
+
+
+**Restricted execution**
+
+The tool factory tool itself will then be usable ONLY by admin users -
+people with IDs in admin_users in universe_wsgi.ini **Yes, that's right. ONLY
+admin_users can run this tool** Think about it for a moment. If allowed to
+run any arbitrary script on your Galaxy server, the only thing that would
+impede a miscreant bent on destroying all your Galaxy data would probably
+be lack of appropriate technical skills.
+
+**What it does**
+
+This is a tool factory for simple scripts in python, R and
+perl currently. Functional tests are automatically generated. How cool is that.
+
+LIMITED to simple scripts that read one input from the history. Optionally can
+write one new history dataset, and optionally collect any number of outputs
+into links on an autogenerated HTML index page for the user to navigate -
+useful if the script writes images and output files - pdf outputs are shown
+as thumbnails and R's bloated pdf's are shrunk with ghostscript so that and
+imagemagik need to be available.
+
+Generated tools can be edited and enhanced like any Galaxy tool, so start
+small and build up since a generated script gets you a serious leg up to a
+more complex one.
+
+**What you do**
+
+You paste and run your script, you fix the syntax errors and
+eventually it runs. You can use the redo button and edit the script before
+trying to rerun it as you debug - it works pretty well.
+
+Once the script works on some test data, you can generate a toolshed compatible
+gzip file containing your script ready to run as an ordinary Galaxy tool in
+a repository on your local toolshed. That means safe and largely automated
+installation in any production Galaxy configured to use your toolshed.
+
+**Generated tool Security**
+
+Once you install a generated tool, it's just
+another tool - assuming the script is safe. They just run normally and their
+user cannot do anything unusually insecure but please, practice safe toolshed.
+Read the code before you install any tool. Especially this one - it is really scary.
+
+**Send Code**
+
+Patches and suggestions welcome as bitbucket issues please?
+
+**Attribution**
+
+Creating re-usable tools from scripts: The Galaxy Tool Factory
+Ross Lazarus; Antony Kaspi; Mark Ziemann; The Galaxy Team
+Bioinformatics 2012; doi: 10.1093/bioinformatics/bts573
+
+http://bioinformatics.oxfordjournals.org/cgi/reprint/bts573?ijkey=lczQh1sWrMwdYWJ&keytype=ref
+
+**Licensing**
+
+Copyright Ross Lazarus 2010
+ross lazarus at g mail period com
+
+All rights reserved.
+
+Licensed under the LGPL
+
+**Obligatory screenshot**
+
+http://bitbucket.org/fubar/galaxytoolmaker/src/fda8032fe989/images/dynamicScriptTool.png
+
diff -r bf92b6bd8b20 -r c5d770f2afea tacrev/test-data/outfile_sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tacrev/test-data/outfile_sample Tue Nov 24 22:04:10 2020 +0000
@@ -0,0 +1,166 @@
+
+gnp.looTtpircScimanyd/segami/989ef2308adf/crs/rekamlootyxalag/rabuf/gro.tekcubtib//:ptth
+
+**tohsneercs yrotagilbO**
+
+LPGL eht rednu desneciL
+
+.devreser sthgir llA
+
+moc doirep liam g ta surazal ssor
+0102 surazaL ssoR thgirypoC
+
+**gnisneciL**
+
+fer=epytyek&JWYdwMrWs1hQzcl=yekji?375stb/tnirper/igc/gro.slanruojdrofxo.scitamrofnioib//:ptth
+
+375stb/scitamrofnioib/3901.01 :iod ;2102 scitamrofnioiB
+maeT yxalaG ehT ;nnameiZ kraM ;ipsaK ynotnA ;surazaL ssoR
+yrotcaF looT yxalaG ehT :stpircs morf sloot elbasu-er gnitaerC
+
+**noitubirttA**
+
+?esaelp seussi tekcubtib sa emoclew snoitseggus dna sehctaP
+
+**edoC dneS**
+
+.yracs yllaer si ti - eno siht yllaicepsE .loot yna llatsni uoy erofeb edoc eht daeR
+.dehsloot efas ecitcarp ,esaelp tub erucesni yllausunu gnihtyna od tonnac resu
+rieht dna yllamron nur tsuj yehT .efas si tpircs eht gnimussa - loot rehtona
+tsuj s'ti ,loot detareneg a llatsni uoy ecnO
+
+**ytiruceS loot detareneG**
+
+.dehsloot ruoy esu ot derugifnoc yxalaG noitcudorp yna ni noitallatsni
+detamotua ylegral dna efas snaem tahT .dehsloot lacol ruoy no yrotisoper a
+ni loot yxalaG yranidro na sa nur ot ydaer tpircs ruoy gniniatnoc elif pizg
+elbitapmoc dehsloot a etareneg nac uoy ,atad tset emos no skrow tpircs eht ecnO
+
+.llew ytterp skrow ti - gubed uoy sa ti nurer ot gniyrt
+erofeb tpircs eht tide dna nottub oder eht esu nac uoY .snur ti yllautneve
+dna srorre xatnys eht xif uoy ,tpircs ruoy nur dna etsap uoY
+
+**od uoy tahW**
+
+.eno xelpmoc erom
+a ot pu gel suoires a uoy steg tpircs detareneg a ecnis pu dliub dna llams
+trats os ,loot yxalaG yna ekil decnahne dna detide eb nac sloot detareneG
+
+.elbaliava eb ot deen kigamegami
+dna taht os tpircstsohg htiw knurhs era s'fdp detaolb s'R dna slianbmuht sa
+nwohs era stuptuo fdp - selif tuptuo dna segami setirw tpircs eht fi lufesu
+- etagivan ot resu eht rof egap xedni LMTH detarenegotua na no sknil otni
+stuptuo fo rebmun yna tcelloc yllanoitpo dna ,tesatad yrotsih wen eno etirw
+nac yllanoitpO .yrotsih eht morf tupni eno daer taht stpircs elpmis ot DETIMIL
+
+.taht si looc woH .detareneg yllacitamotua era stset lanoitcnuF .yltnerruc lrep
+dna R ,nohtyp ni stpircs elpmis rof yrotcaf loot a si sihT
+
+ **seod ti tahW**
+
+.slliks lacinhcet etairporppa fo kcal eb
+ylbaborp dluow atad yxalaG ruoy lla gniyortsed no tneb tnaercsim a edepmi
+dluow taht gniht ylno eht ,revres yxalaG ruoy no tpircs yrartibra yna nur
+ot dewolla fI .tnemom a rof ti tuoba knihT **loot siht nur nac sresu_nimda
+YLNO .thgir s'taht ,seY** ini.igsw_esrevinu ni sresu_nimda ni sDI htiw elpoep
+- sresu nimda yb YLNO elbasu eb neht lliw flesti loot yrotcaf loot ehT
+
+**noitucexe detcirtseR**
+
+
+.lmx.fnoc_sepyt_atad lacol ruoy ot
+>/ "eurT"=ssalcbus "pizg-x/trapitlum"=epytemim
+"yraniB:yranib.sepytatad.yxalag"=epyt "zg.dehsloot"=noisnetxe epytatad<
+:dda esaelp
+,ereht ydaerla ton fI
+
+>noitces/<
+>/"lmx.yrotcaFlooTgr/yrotcafloot"=elif loot<
+>"sredliubloot"=di "sloot gnidliub looT"=eman noitces<
+
+::ekil gnihtemos - elif
+lmx eht ot gnitniop
+yrtne wen a sdeen lmx.fnoc_loot ruoY yrotcafloot/sloot sa hcus yrotceridbus
+sloot wen a otni deipoc
+eb ot deen ereh selif yp dna lmx eht ,yaw taht loot eht teg t'nac uoy fI
+
+.ti llatsni ot noitpo eht tceles dna edoc eht weiver dna ti nepO .yrotisoper
+yrotcafloot eht rof hcraes dna /ude.usp.xb.2g.dehsloot//:sptth ta dehsloot
+niaM yxalaG eht dniF .knil "sdehs loot esworb dna hcraeS" evitartsinimda
+eht gnisu yltneinevnoc tsom ti llatsni nac uoY .loot yxalaG a si sihT
+**noitallatsnI**
+
+emoH/ikiw/yrotcaflootyxalag/rabuf/gro.tekcubtib//:sptth
+ees seceip eht lla peek ot teg uoy ,ti kaerb uoy fi ,nehT .resu_nimda
+na era uoy erehw ecnatsni lacol hctarcs/lanosrep/etavirp a no loot
+siht gnillatsni repoleved a eb dluohs uoy ,dehSlooT eht dna yxalaG
+,loot siht fo *rewop emosewa eht tiolpxe ylefas dna ylluf oT*
+
+.selbairav on
+,tuptuo eno ,tupni enO .stnenopmoc wolfkrow rof tcefrep era sloot yrotcaf looT
+
+.emit yreve tpircs ruoy nur tub,loot yxalaG rehto yna ekil tsuj nur yrotcaFlooT
+eht htiw etareneg uoy sloot eht ,sdrow rehto nI .yrotsih s'resu eht morf
+nesohc tupni eht htiw detucexe eb lliw tliub saw ti nehw deilppus saw taht
+tpircs eht ,emit hcae - ti nur nac sresu lacol ,dellatsni si loot wen eht ecnO
+
+.ecafretni evitartsinimda revres eht morf
+revres yxalaG lacol yna otni dellatsni eb nac ti ,dehSlooT a ni s'ti ecnO
+
+.yrotisoper loot wen a sa dehSlooT yxalaG
+a ot daolpu ot ydaer evihcra na s'ti ,stseggus eman eht sa - *zg.dehsloot*
+epytatad yxalaG wen a fo mrof eht ni detareneg eb lliw loot wen ehT .seman
+dna txet pleh emos ylppus dna noitpo "etareneg" eht tceleS .detareneg eb nac
+tpircs ruoy snur taht loot yxalaG wen a ,yllufssecus snur tpircs eht ecnO
+
+.taeper ,hsaw ,esniR .niaga etucexe dna
+gub eht xiF .tpircs nekorb htiw etelpmoc mrof eht etaercer ot yrotsih ruoy
+ni tuptuo loot eht no nottub "oder" eht esu ,wohemos sliaf tpircs eht fI
+
+.loot atad wen dda yrotsih yxalaG eht
+gnisu tes atad tset llams a etaerc ot deen osla ll'uoY .esaelp reterpretni
+thgir eht tceles ot rebmemer - tuo ti yrt ot eseht etsap dna tuc tsuj nac
+uoY .mrof yrotcaF looT eht no egaugnal gnitpircs hcae ni elpmaxe na si erehT
+
+em rof skrow ```atad-tset/yrotcafloot/srekam_loot/sloot/yxalag/~ atad_tset-- yxalag/~ toor_yxalag-- lmx.2yrotcaFlooTgr tset omenalp```
+
+.tpircs wen ruoy tset ot
+yrotsih ruoy morf tceles ot ydaer elpmaxe tupni tset llams a dna dnim ni egakcap a evah ro ,xob txet
+a otni etsap ot tpircs a deraperp evah dluohs uoy ,yrotcaFlooT eht esu oT
+
+**liateD eroM**
+
+.sresu ruoy rof sloot yxalaG rehto lla ekil yltcaxe krow dna
+rotartsinimda na yb dehs loot a aiv dellatsni era sloot detareneG
+.xob eht fo tuo elbitapmoc wolfkrow ylluf ,loot yxalaG yranidro ,wen a otni
+tnemeriuqer a sa dekab si elbatucexe ro tpircs deilppus ehT .loot yxalaG wen
+a dliub ot desu eb nac yeht ,decudorp neeb evah stuptuo esac tset eht ecnO
+.ylppus uoy sgnittes retemarap dna stupni atad tset elpmas llams gnisu detareneg si tset A
+
+**yxalaG yna otni noitallatsni rof sloot yxalaG wen fo noitareneg detamotuA**
+
+
+.loot yxalaG a gnisu ,setunim ni loot yxalaG yranidro na otni denrut eb nac tI
+
+*sretemarap elyts esrapgra ro lanoitisop htiw elbatucexe yna ro tpircs hsab/lrep/nohtyp/r gnikrow a evah uoY*
+
+.tuptuo sa tes atad wen elgnis a gnitirw
+,stes atad tupni detceles elpitlum revo lrep dna hs ,nohtyp ,R ni stpircs nur
+ot meht gniwolla ,revres yxalaG tsoh eht fo srotartsinimda detangised lla ot
+gnitpircs suoregnad ylemertxe erofereht dna *detcirtsernu* gnisopxe yb skrow tI
+.sloot yxalaG wen gnitareneg fo elbapac loot yxalaG lausunu na si sihT
+
+**yrotS trohS**
+
+.krow dehsilbup ruoy ni loot siht esu uoy fi
+fer=epytyek&JWYdwMrWs1hQzcl=yekji?375stb/tnirper/igc/gro.slanruojdrofxo.scitamrofnioib//:ptth
+ta ecruoser eht etic esaelP
+
+keeB ned nav suiraM yb detroper sgub xif ot 4102 8 tsugua detadpU
+
+troppus noitatic gnidda notlihC nhoJ yb 4102 tsugua detadpU
+
+ecnatsni noitcudorp ro cilbup a no REVEN esaelP
+YLNO yxalaG etavirp a no loot siht llatsnI
+
+*trats uoy erofeb GNINRAW*