1 # -*- coding: utf-8 -*-
5 Le module scrute propose la fonction SCRUTE qui affiche sur
6 la stderr, la valeur de l'objet (passé en argument)
7 précédée le nom de l'objet.
8 Il propose également la fonction EXAMINE qui détaille sur
9 la stderr le contenu d'un objet
11 N.B. : les fonctions SCRUTE e EXAMINE ne sont opérantes que pour les développeurs
12 (la variable DEVELOPPEUR doit être définie)
16 from developpeur import DEVELOPPEUR
20 def NULL( *l_args, **d_args ) : pass
25 developpeur.sortie.write( "import de "+__name__+" : $Id: scrute.py,v 1.2 2003/03/06 14:36:12 eficas Exp $" )
26 developpeur.sortie.write( "\n" )
32 def SCRUTE( valeur ) :
37 La fonction SCRUTE affiche sur la stderr, la valeur (passée en argument)
38 d'une variable précédée de son nom.
39 L'affichage précise également le nom du fichier et le numéro
40 de la ligne où la fonction SCRUTE a été appelée.
42 N.B. : le type de la variable doit posséder de préférence une méthode __str__
45 from scrute import SCRUTE
51 SCRUTE(r) ; SCRUTE(f(r)) # ==> ERREUR
55 filename,lineno=ici.ICI()
57 line = linecache.getline( filename, lineno )
59 ll=re.sub( "\s*#.*$" , '' ,line)
62 l_occurrences=re.findall( "SCRUTE" , ll )
63 assert(len(l_occurrences)>0),__name__+" : pas de SCRUTE trouvé !"
64 assert(len(l_occurrences)<=1),\
65 __name__+" : "+str(len(l_occurrences))+" SCRUTE sur la même ligne ; c'est LIMITE à 1 !"
67 ll=re.sub( "\s*;.*$" , '' ,line)
68 regex='^.*SCRUTE[^(]*\('
69 l=re.sub( regex , '' ,ll)
71 nom_objet=re.sub( regex , '' ,l)
74 developpeur.sortie.write( nom_objet+'=' )
76 developpeur.sortie.write( s )
77 developpeur.sortie.write( " ("+str(type(valeur))+")" )
79 developpeur.sortie.write( '\n' )
80 developpeur.sortie.flush()
84 def makeClassName( ob ) :
86 if type(ob) == types.InstanceType :
87 return str(ob.__class__)
94 Affiche sur la developpeur.sortie le contenu d'un objet
100 Utilites.EXAMINE(object)
104 f = sys._getframe( appel_EXAMINE )
107 filename,lineno=ici.ICI()
108 line = linecache.getline( filename, lineno )
109 nom=re.sub( "^.*EXAMINE *\(", "" , line )
110 nom=re.sub( " *[,\)].*$", "" , nom )
111 nom=re.sub( "\n", "" , nom )
112 developpeur.sortie.write( "Examen de "+nom+" de type "+makeClassName(ob)+"\n" )
116 developpeur.sortie.write( '\t'+st+' = ' )
117 developpeur.sortie.flush()
118 commande="import developpeur;developpeur.sortie.write( str("+st+")+'\\n' )"
120 exec commande in context
122 commande="import sys; sys.stderr.write( str("+st+")+'\\n' )"
123 exec commande in context