]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
Ajout du package Utilites contenant les modules :
authoreficas <>
Tue, 4 Feb 2003 10:39:13 +0000 (10:39 +0000)
committereficas <>
Tue, 4 Feb 2003 10:39:13 +0000 (10:39 +0000)
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

Utilites/__init__.py [new file with mode: 0644]
Utilites/ici.py [new file with mode: 0644]
Utilites/message.py [new file with mode: 0644]
Utilites/pause.py [new file with mode: 0644]
Utilites/scrute.py [new file with mode: 0644]

diff --git a/Utilites/__init__.py b/Utilites/__init__.py
new file mode 100644 (file)
index 0000000..1d35c5c
--- /dev/null
@@ -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 (file)
index 0000000..fdfa8c9
--- /dev/null
@@ -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( indice<len(trace) ),"valeur de offset INVALIDE : "+str(offset)+" taille de la table "+len(trace)
+        file, lineno, funcname, dummytxt = trace[ indice ]
+
+        assert( (indice>0) 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 (file)
index 0000000..90b41c3
--- /dev/null
@@ -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 (file)
index 0000000..40d23a8
--- /dev/null
@@ -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 (file)
index 0000000..151155e
--- /dev/null
@@ -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