From: eficas <> Date: Tue, 4 Feb 2003 10:39:13 +0000 (+0000) Subject: Ajout du package Utilites contenant les modules : X-Git-Tag: AY_av_utilites~5 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=65388a1ceb8eb0556d3332afd3aa8780f88d4a5c;p=tools%2Feficas.git Ajout du package Utilites contenant les modules : ici message pause scrute destinés à faciliter la maintenance et le déboguage d'Eficas par Noyret et Yessayan. mardi 04/02/2003 a 11:38:03 --- diff --git a/Utilites/__init__.py b/Utilites/__init__.py new file mode 100644 index 00000000..1d35c5cc --- /dev/null +++ b/Utilites/__init__.py @@ -0,0 +1,19 @@ +""" + Le package UTILITES contient les fonctions permettant + d'instrumenter un script : + - MESSAGE (module message) + - SCRUTE (module scrute) + - PAUSE (module pause) +""" + +__all__ = [ "ici" , "message" , "scrute" , "pause" ] +from pause import * +from ici import * +from scrute import * +from message import * + + + +if __name__ == "__main__" : + print dir() + print "import du package effectué !" diff --git a/Utilites/ici.py b/Utilites/ici.py new file mode 100644 index 00000000..fdfa8c9c --- /dev/null +++ b/Utilites/ici.py @@ -0,0 +1,56 @@ +""" +Module ici +---------- + le module ici propose la fonction ICI pour afficher + le fichier courant et le numéro de la ligne courante. +""" + +import sys +sortie=sys.stderr +sortie.write( "import de "+__name__+" : $Id$" ) +sortie.write( "\n" ) + +def ICI(offset=1) : + + """ + Fonction ICI + ------------ + La fonction ICI affiche sur la stderr, le nom du fichier qui l'appelle, + le numéro de la ligne ou elle est appelée et retourne ces deux informations. + + Usage : + from ici import ICI + ICI() + filename,lineno=ICI() + """ + + sortie=sys.stderr + + sys.stdout.flush() + sys.stderr.flush() + try : + 1/0 + except : + + ###f=sys.exc_info()[2].tb_frame.f_back + ###lineno=f.f_lineno + ###code=f.f_code + ###filename=code.co_filename + + import traceback + trace=traceback.extract_stack() + + indice = len(trace)-(2+offset) + if indice<0 : indice=0 + + + assert( indice0) or (funcname=="?") ) + if funcname=="?" : funcname = "main" + + sortie.write( file+':'+str(lineno)+': ('+funcname+') : ' ) + sortie.flush() + + return file,lineno diff --git a/Utilites/message.py b/Utilites/message.py new file mode 100644 index 00000000..90b41c3a --- /dev/null +++ b/Utilites/message.py @@ -0,0 +1,72 @@ +""" +Module message +-------------- + le module message propose la fonction MESSAGE pour afficher + sur la stderr, le texte passé en argument. +""" + +import sys +sortie=sys.stderr +sortie.write( "import de "+__name__+" : $Id$" ) +sortie.write( "\n" ) + +def MESSAGE( text , offset=1 ) : + + """ + Fonction MESSAGE + ---------------- + La fonction MESSAGE affiche sur la stderr, le texte passé en argument. + Elle précise également le nom du fichier et le numéro de la ligne où + elle a été appelée. + + Usage : + from message import MESSAGE + + MESSAGE("debut du traitement") + MESSAGE( "Exception interceptée "+str(e) ) + """ + + sortie=sys.stderr + + import ici + ici.ICI( offset ) + sortie.write( str(text)+'\n' ) + sortie.flush() + return + + + +def DEBUT() : + + """ + Fonction DEBUT + -------------- + La fonction DEBUT affiche sur la stderr, le texte signalant le début + d'un traitement + + Usage : + from message import * + DEBUT() + """ + + MESSAGE("DEBUT du traitement",offset=2) + return + + + +def FIN() : + + """ + Fonction FIN + ------------ + La fonction FIN affiche sur la stderr, le texte signalant la fin + d'un traitement + + Usage : + from message import * + FIN() + """ + + print + MESSAGE("FIN du traitement",offset=2) + return diff --git a/Utilites/pause.py b/Utilites/pause.py new file mode 100644 index 00000000..40d23a8e --- /dev/null +++ b/Utilites/pause.py @@ -0,0 +1,52 @@ +""" +Module pause +------------ + le module pause propose la fonction PAUSE pour effectuer + une attente. +""" + +import sys +sortie=sys.stderr +sortie.write( "import de "+__name__+" : $Id$" ) +sortie.write( "\n" ) + +def PAUSE( secondes ) : + + """ + + Fonction PAUSE + ---------------- + La fonction PAUSE permet d'interrompre le traitement pendant un délai + passé en argument. La localisation de l'appel est tracée sur la stderr + + Usage : + from pause import PAUSE + + PAUSE(secondes=5) + """ + + if secondes > 0 : + sortie.write( "\n\n\n" ) + import ici + ici.ICI() + + sortie.write( "pause de "+str(secondes)+" secondes" ) + sortie.write( "\n\n\n" ) + sortie.flush() + + import time + time.sleep( secondes ) + + sortie.flush() + + return + + +if __name__ == "__main__" : + print + print "PAUSE(secondes=-1)" + PAUSE(secondes=-1) + print "PAUSE(secondes=0)" + PAUSE(secondes=0) + print "PAUSE(secondes=2)" + PAUSE(secondes=2) diff --git a/Utilites/scrute.py b/Utilites/scrute.py new file mode 100644 index 00000000..151155ea --- /dev/null +++ b/Utilites/scrute.py @@ -0,0 +1,66 @@ +""" +Module scrute +------------- + le module scrute propose la fonction SCRUTE qui affiche sur + la stderr, la valeur de l'objet (passé en argument) + précédée le nom de l'objet. +""" + +import sys +sortie=sys.stderr +sortie.write( "import de "+__name__+" : $Id$" ) +sortie.write( "\n" ) + + +def SCRUTE( valeur ) : + + """ + Fonction SCRUTE + --------------- + La fonction SCRUTE affiche sur la stderr, la valeur (passée en argument) + d'une variable précédée de son nom. + L'affichage précise également le nom du fichier et le numéro + de la ligne où la fonction SCRUTE a été appelée. + + N.B. : le type de la variable doit posséder de préférence une méthode __str__ + + Usage : + from scrute import SCRUTE + r=1.0 + SCRUTE(r) + SCRUTE(r+1) + SCRUTE(f(r)) + Erreur : + SCRUTE(r) ; SCRUTE(f(r)) # ==> ERREUR + """ + + import re + import linecache + import ici + + filename,lineno=ici.ICI() + + line = linecache.getline( filename, lineno ) + + ll=re.sub( "\s*#.*$" , '' ,line) + l_occurrences=[] + l_occurrences=re.findall( "SCRUTE" , ll ) + assert(len(l_occurrences)>0),__name__+" : pas de SCRUTE trouvé !" + assert(len(l_occurrences)<=1),\ + __name__+" : "+str(len(l_occurrences))+" SCRUTE sur la même ligne ; c'est LIMITE à 1 !" + + ll=re.sub( "\s*;.*$" , '' ,line) + regex='^.*SCRUTE[^(]*\(' + l=re.sub( regex , '' ,ll) + regex='\)[^)]*$' + nom_objet=re.sub( regex , '' ,l) + + try : + sortie.write( nom_objet+'=' ) + sortie.write( str(valeur) ) + sortie.write( " ("+str(type(valeur))+")" ) + except : pass + sortie.write( '\n' ) + sortie.flush() + + return