Index by: file name |
procedure name |
procedure call |
annotation
gscope_webservice.tcl
(annotations | original source)
#rR gscope_webservice.tcl
proc IdCard {Document {Quoi ""}} {
#rR Attention je triche pour les retour a la ligne qui compte pour 2 carac en php mais pas en tcl
#rR Attention je triche en php en faisant utf8_decode pour tout les chmaps
global IdCard
if {$Quoi==""} { set Quoi "ListOfFields" }
if {[info exists IdCard($Document,$Quoi)]} { return $IdCard($Document,$Quoi) }
if {[info exists IdCard($Document,"EstCharge")]} { return "" }
set IdCard($Document,"EstCharge") 1
set Url "[LbgiUrl]/puzz/phpRR/lance.php?action=IdCard::card&document=$Document&getwhat=GetCard"
set Serial [ContenuDuFichier $Url]
regsub -all "\n" $Serial "@!" Serial
ArrayFromSerial $Serial TabCard
set LesT {}
set LesC {}
foreach i [lsort -integer [array names TabCard]] {
lassign $TabCard($i) t T c C
set T [lindex $T 1]
set C [lindex $C 1]
regsub -all "@!" $C "\n" C
lappend IdCard($Document,ListOfFields) $T
set IdCard($Document,$T) $C
}
return [IdCard $Document $Quoi]
}
proc Cps {{Pattern ""} {Genome ""} {Mismatch ""} {GetWhat ""}} {
regsub -all -nocase {[^A-Z]} $Pattern "" Pattern
if {$Genome==""} { set Genome "human_2006_nomask" }
if {$Mismatch==""} { set Mismatch 0 }
set Pattern [string trim $Pattern]
if {[string length $Pattern] < 5} { return "Error: Pattern contain at least $MinLength bases" }
set UrlCps "http://kilida.u-strasbg.fr:8086/CST_Java_Servlet/InterfaceWebCST?action=search&access_program=1"
append UrlCps "&genome=$Genome"
append UrlCps "&pattern=$Pattern"
Espionne $UrlCps
set LesHits {}
set LeNice {}
foreach Ligne [LesLignesDuFichier $UrlCps] {
Espionne $Ligne
set C ""; set S ""; set D ""; set F ""; set H ""
if { ! [regexp -nocase {^chr[^1-9XY]*([0-9XY]+) +\(?([FBR\+\-])\)? +([0-9]+)[ \-]+ ([0-9]+) +[^A-Z]*([A-Z]+)} $Ligne Match C S D F H]} { continue }
regsub -nocase {[F]} $S "+" S
regsub -nocase {[RB]} $S "-" S
set C "chr$C"
lappend LesHits "$C:$D-${F}($S) $H"
lappend LeNice [format "%-5s %9d %9d (%s) %s" $C $D $F $S $H]
}
if {$GetWhat=="Show"} { return [AfficheListe $LeNice "" "Hits on $Genome"] }
if {$GetWhat=="GetNice"} { return [join $LeNice "\n"] }
if {$GetWhat=="GetText"} { return [join $LesHits "\n"] }
return $LesHits
}
proc Login {} {
global env
set Login $env(LOGNAME)
return $Login
}
proc AddLinxTest {} {
return [AddLinx "poch" "" "http://raymondripp.fr" "Le site de RR" "public"]
}
proc AddLinx {{Login ""} {LinkName ""} {Link ""} {Description ""} {Belongs ""}} {
if {$LinkName==""} { set LinkName [Entre "FromGscope"] }
if {$Login==""} { set Login [Login] }
if {$Link==""} { set Link64 "" } else { set Link64 [Base64Encode $Link] }
if {$Description==""} { set Desc64 "" } else { set Desc64 [Base64Encode $Description] }
if {$Belongs==""} { set Belo64 "" } else { set Belo64 [Base64Encode $Belongs] }
set Url "[LbgiUrl]/MyLinx.php?do=addlinx&lo=$Login&ln=$LinkName&li=$Link64&de=$Desc64&be=$Belo64"
set Status [ContenuDuFichier $Url]
#rR faut il le faire ici ????????????????????????
MyLinx ResetMyLinx
return $Status
}
proc MyLinx {{Qui ""} {Quoi ""}} {
global MyLinx
if {$Qui=="ResetMyLinx"} { unset -nocomplain MyLinx ; return "" }
set Login [Login]
if {[info exists MyLinx($Qui,$Quoi)]} { return $MyLinx($Qui,$Quoi) }
if {[info exists MyLinx("EstCharge")]} { return "" }
set MyLinx("EstCharge") 1
set Url "[LbgiUrl]/MyLinx.php?login=$Login&getwhat=GetSerial"
set Serial [ContenuDuFichier $Url]
set MLX [SeriallistFromSerial $Serial]
foreach {sLn sLnLiDeBe} [lindex $MLX 1] {
set Ln [lindex $sLn 1]
lappend MyLinx(ListOf,LinkName) $Ln
foreach {sK sV} [lindex $sLnLiDeBe 1] {
set K [lindex $sK 1]
set V [lindex $sV 1]
set MyLinx($Ln,$K) $V
}
}
return [MyLinx $Qui $Quoi]
}
proc TestQsub {{GetWhat ""}} {
set S "-b y pwd"
set S "tcsh -c 'pwd; hostname; pwd; ls'"
return [Qsub $S $GetWhat "" "" "" ""]
}
proc Qsub {CommandeOuFichier {GetWhat ""} {O ""} {E ""} {Q ""} {Options ""}} {
if {[regexp {^(sh|csh|bash|tcsh|tclsh|java) } $CommandeOuFichier]} {
set CommandeOuFichier "-b y $CommandeOuFichier"
}
if {[regexp -- {^\-b y } $CommandeOuFichier]} {
append Options " -b y"
regsub -- {^\-b y } $CommandeOuFichier "" CommandeOuFichier
}
set Binary [regexp -- {-b y} $Options]
set Notice [expr ! [regexp -nocase "NoNotice" $GetWhat]]
regsub -nocase "NoNotice" $GetWhat "" GetWhat
if {$GetWhat==""} { set GetWhat "GetAll" }
if {$Q==""} { set Q "qsub" }
if { ! $Binary && [regexp {[ ;]} $CommandeOuFichier]} {
set ScriptFile "[TmpFile Qsub].tcsh"
Sauve $CommandeOuFichier dans $ScriptFile
file attribute $ScriptFile -permissions 0775
if {$O==""} { regsub ".tcsh$" $ScriptFile ".log" O }
} else {
set ScriptFile $CommandeOuFichier
}
if {$O==""} { set O "[TmpFile Qsub].log" }
if {$E==""} { set E $O }
if {$E=="Oerror"} { regsub ".log$" $O "_error.log" E }
set QsubCommand "\"source /usr/N1GE6/default/common/settings.csh ; $Q -l arch=lx24-amd64 -o $O -e $E -cwd -V $Options $ScriptFile\""
if { ! [regexp -nocase "NoEval" $GetWhat]} {
if {$Notice} { AppendAuFichier $O "[Date _] I run $Q\n$QsubCommand\n**********\n" }
set Retour [eval exec tcsh -c $QsubCommand]
}
if {[regexp -nocase "GetCommand" $GetWhat] } { return $QsubCommand }
if {[regexp -nocase "GetO" $GetWhat] } { return $O }
if {[regexp -nocase "GetE" $GetWhat] } { return $E }
if {[regexp -nocase "GetAll" $GetWhat] } { return [list $O $E $QsubCommand $Retour] }
return $Retour
}
proc WebServiceOOOOOOOOOOLD {Qui Commande args} {
#rR args est une liste key value key value key value
set Url [WebServiceUrl $Qui]
set QueryEncode [eval ::http::formatQuery "webcommand" $Commande $args]
Espionne $QueryEncode
set Token [eval ::http::geturl $Url -query $QueryEncode]
set Retour [::http::data $Token]
set Retour [string trim $Retour]
set iGetWhat [lsearch $args "getwhatfromserial"]
if {$iGetWhat>=0} {
set GetWhat [lindex $args [incr iGetWhat]]
if {$GetWhat=="GetList"} { return [ListFromSerial $Retour] }
if {$GetWhat=="GetFirstValue"} { return [FirstElementFromSerial $Retour] }
}
return $Retour
}
proc TestWebServiceOLD {} { ;#rR ????????
package require http
return [WebService "http://www.uniprot.org/mapping/?" toto [list from ACC to P_REFSEQ_AC format tab query P13368]]
}
proc TestWebService {} {
set R [WebService "Gx" Execute \
querytext "GxFun::SignalIntensity&&0&1&301&&T&&&GeneAsText&limit 10"]
return $R
set R [WebService "Gx" GxDbSqlExec querytext "select name,pk_tissue from tissue" getwhatfromserial "GetList"]
return $R
set R [WebService "Gx" GxDbSqlExec \
querytext "select probeset_id,pk_probeset from probeset where probeset_id in ('1415670_at','1415672_at');" \
getwhatfromserial "GetList"]
return $R
}
proc WebService {Qui Commande args} {
#rR args est une liste key value key value key value
#rR pour Execute il faut utiliser querytext
#rR voir les exemples dans TestWebService
package require http
set Url [WebServiceUrl $Qui]
if {$Commande==""} {
set QueryEncode [::http::formatQuery {*}$args]
} else {
set QueryEncode [::http::formatQuery "webcommand" $Commande {*}$args]
}
# set QueryEncode [::http::formatQuery from ACC to P_REFSEQ_AC format tab query P13368]
# Espionne $QueryEncode
set Token [::http::geturl $Url -query $QueryEncode]
set Retour [::http::data $Token]
set Retour [string trim $Retour]
set iGetWhat [lsearch $args "getwhatfromserial"]
if {$iGetWhat>=0} {
set GetWhat [lindex $args [incr iGetWhat]]
if {$GetWhat=="GetList"} { return [ListFromSerial $Retour] }
if {$GetWhat=="GetFirstValue"} { return [FirstElementFromSerial $Retour] }
}
return $Retour
}
proc FirstElementFromSerial Texte {
set LesKV [ListFromSerial $Texte]
set V [lindex $LesKV 0]
return $V
}
proc ValueFromSerial Texte {
return [ValueFromSeriallist [SeriallistFromSerial $Texte]]
}
proc ArrayFromSerial {Texte aT} {
upvar $aT T
return [ArrayFromSeriallist [SeriallistFromSerial $Texte] T]
}
proc ListFromSerial {Texte} {
return [ListFromSeriallist [SeriallistFromSerial $Texte]]
}
proc ValueFromSeriallist Liste {
return [lindex $Liste 1]
}
proc ArrayFromSeriallist {Liste aT} {
upvar $aT T
foreach {K V} [lindex $Liste 1] {
set T([ValueFromSeriallist $K]) [ValueFromSeriallist $V]
}
return $aT
}
proc ListFromSeriallist {Liste} {
set L {}
foreach {K V} [lindex $Liste 1] {
lappend L [ValueFromSeriallist $V]
}
return $L
}
proc TestSeriallistFromSerial {{F ""}} {
if {$F!=""} {
set Texte [ContenuDuFichier $F]
} else {
set Texte "a:4:{i:0;s:10:\"1415670_at\";i:1;s:6:\"270637\";i:2;s:10:\"1415672_at\";i:3;s:6:\"270639\";}"
}
# ArrayFromSerial $Texte A
#parray A
# exit
set R [SeriallistFromSerial $Texte]
return $R
set A(coucou) 1
ArrayFromSerial $Texte A
parray A
exit
}
proc SeriallistFromSerial {Texte} {
set fin [string length $Texte]
set deb 0
return [RecurSeriallistFromSerial Texte deb $fin]
}
proc RecurSeriallistFromSerial {aTexte aiT fin} {
upvar $aTexte Texte
upvar $aiT iT
while {[set Prem [string index $Texte $iT]] eq ";" || $Prem eq ":" || $Prem eq "\}"} { incr iT }
if {$iT>=$fin} { return {} }
if {0 && $iT%1000==0} { Espionne $iT }
set X [string index $Texte $iT]
if {$X=="N"} {
incr iT 2
return ""
}
if {$X=="i" || $X=="d"} {
set V ""
incr iT 2
while 1 {
set Z [string index $Texte $iT]
incr iT
if {$iT > $fin} { return "ERROR scanning_{$X}_in_$Texte" }
if {$Z eq ";"} { break }
append V $Z
}
set Liste [list "i" $V]
return $Liste
}
if {$X=="s"} {
set N ""
incr iT 2
while 1 {
set Z [string index $Texte $iT]
incr iT
if {$iT > $fin} { return "ERROR scanning_{$X}_in_$Texte" }
if {$Z eq ":"} { break }
append N $Z
}
incr iT 1 ;# on passe le "
set d [expr $iT]
set f [expr $iT+$N-1]
set S [string range $Texte $d $f]
set Liste [list "s" $S]
incr iT $N
incr iT
return $Liste
}
if {$X=="a"} {
set N ""
incr iT 2
while 1 {
set Z [string index $Texte $iT]
incr iT
if {$iT > $fin} { return "ERROR scanning_{$X}_in_$Texte" }
if {$Z eq ":"} { break }
append N $Z
}
incr iT
set LKV {}
for {set i 0} {$i<$N} {incr i} {
lappend LKV [RecurSeriallistFromSerial Texte iT $fin] [RecurSeriallistFromSerial Texte iT $fin]
}
set Liste [list "a" $LKV]
return $Liste
}
return "ERROR scanning_unknown_{$X}_in_$Texte"
}
proc WithWebService {{Qui ""} {Valeur ""}} {
global WithWebService
if {[string equal -nocase $Valeur "TestIfExists"]} { return [info exists WithWebService($Qui)] }
if {$Qui==""} { set Qui "Gx" }
if {$Valeur!=""} { set WithWebService($Qui) $Valeur}
if {[info exists WithWebService($Qui)]} { return $WithWebService($Qui) }
set WithWebService($Qui) 1
return [WithWebService $Qui]
}
proc ArraytypeWithPipeWork {{Qui ""} {Valeur ""}} {
global ArraytypeWithPipeWork
if {$Qui==""} { set Qui "Gx" }
if {$Valeur!=""} { set ArraytypeWithPipeWork($Qui) $Valeur}
if {[info exists ArraytypeWithPipeWork($Qui)]} { return $ArraytypeWithPipeWork($Qui) }
set ArraytypeWithPipeWork($Qui) 1
return [ArraytypeWithPipeWork $Qui]
}
proc WebServiceUrl {{Qui ""}} {
if {$Qui=="GxDb" } { return "http://gx.lbgi.fr/gx/phpRR/lance.php?action=Munitions::WebService" }
if {$Qui=="Gx" } { return "http://gx.lbgi.fr/gx/phpRR/lance.php?action=Munitions::WebService" }
if {$Qui=="Genoret"} { return "http://genoret.lbgi.fr/genoret/phpRR/lance.php?action=Munitions::WebService" }
return $Qui
}
proc CreateArrayFromList {aT Index Liste} {
upvar $aT T
foreach a $Liste {
set T($Index) $a
incr Index
}
return $aT
}
proc CreateArray {aT Index args} {
upvar $aT T
return [CreateArrayFromList T $Index $args]
}
proc PhpSerialize {aT {TypeK ""} {TypeV ""}} {
upvar $aT T
return [SerialFromArray T $TypeK $TypeV]
}
proc SerialFromArray {aT {TypeK ""} {TypeV ""}} {
upvar $aT T
if {$TypeK==""} { set TypeK "s" }
if {$TypeV==""} { set TypeV "s" }
set LesKey [lsort -integer [array names T]]
set N [llength $LesKey]
set LesElements {}
foreach K $LesKey {
set V $T($K)
if {$TypeK=="i"} {
set EK "i:$K"
} else {
set LK [string length $K]
set EK "s:$LK:\"$K\""
}
if {$TypeV=="i" || $TypeV=="d"} {
set EV "$TypeV:$V"
} else {
set LV [string length $V]
set EV "s:$LV:\"$V\""
}
lappend LesElements "$EK;$EV"
}
set Elements [join $LesElements ";"]
set S "a:$N:{$Elements;}"
return $S
}
proc SerialFromList {Liste} {
CreateArrayFromList T 0 $Liste
return [SerialFromArray T "i" "s"]
}
proc SerialFromLinesOfFile {File} {
set Liste [LesLignesDuFichier $File]
CreateArrayFromList T 0 $Liste
return [SerialFromArray T "i" "s"]
}
Index by: file name |
procedure name |
procedure call |
annotation
File generated 2022-04-05 at 12:55.