5 sortie.write( "import de "+__name__+" : $Id$" )
8 def get_nombre_de_blancs( str ) :
11 nombre_de_blancs=len(re.sub( "[^ ].*$" , "" , str ))
12 return nombre_de_blancs
16 def get_classname( filename, lineno ) :
18 Cette méthode sert à trouver dans quelle classe (le cas échéant)
19 se trouve l'instruction numéro lineno dans le fichier filename.
23 assert(type(filename)==types.StringType)
24 ####print "RECHERCHE de la classe de "+filename+" ligne : ",lineno
27 f=open( filename , 'r' )
35 l_lines = s.split( '\n' )
37 inst = l_lines[lineno]
38 nb_blancs= get_nombre_de_blancs( inst )
43 elif re.search( "^ *def ", line ) != None :
44 if get_nombre_de_blancs( line ) < nb_blancs :
45 current_func=re.sub( "^ *def *" , "" , line )
46 current_func=re.sub( " *\(.*$" , "" , current_func )
47 elif re.search( "^class ", line ) != None :
48 classname = re.sub( "^class *" , "" , line )
49 classname = re.sub( " *[(:].*$" , "" , classname )
51 elif current_func != "" and re.search( "^[^ \t]", line ) != None :
55 if current_func == "" : current_func="__main__"
56 return classname ,current_func
64 Conversion des 3 informations nom de méthode, nom de fichier
65 numéro de ligne en un nom complet de méthode
68 def __init__ ( self , *args ) :
70 # le premier argument est optionnel (c'est un nom de fonction
71 # qu'on peut reconstituer avec le nom du fichier et le numéro de ligne.
75 if args[k] != "" : self.name = args[k]
80 self.filename = args[k] # recuperation du nom du fichier source
84 self.lineno = args[k] # recupération du numero de ligne
86 self.classname,funcname = get_classname( self.filename, self.lineno )
87 if self.name == None : self.name = funcname
88 ###assert(funcname==self.name or self.name=="main" or self.name=="<lambda>" ), "attendue '"+self.name+"' - trouvee '"+funcname+"'"
90 def __str__ ( self ) :
91 if self.classname != "" :
92 name=self.classname+"."+self.name
98 if __name__ == "__main__" :
99 print 'FUNCNAME("","funcname.py", 68)='+str(FUNCNAME("","funcname.py", 63) )
100 print 'FUNCNAME("funcname.py", 68)='+str(FUNCNAME("funcname.py", 63) )