1 # -*- coding: utf-8 -*-
6 sortie.write( "import de "+__name__+" : $Id: funcname.py,v 1.1 2003/03/06 14:36:11 eficas Exp $" )
9 def get_nombre_de_blancs( str ) :
12 nombre_de_blancs=len(re.sub( "[^ ].*$" , "" , str ))
13 return nombre_de_blancs
17 def get_classname( filename, lineno ) :
19 Cette méthode sert à trouver dans quelle classe (le cas échéant)
20 se trouve l'instruction numéro lineno dans le fichier filename.
24 assert(type(filename)==types.StringType)
25 ####print "RECHERCHE de la classe de "+filename+" ligne : ",lineno
28 f=open( filename , 'r' )
36 l_lines = s.split( '\n' )
38 inst = l_lines[lineno]
39 nb_blancs= get_nombre_de_blancs( inst )
44 elif re.search( "^ *def ", line ) != None :
45 if get_nombre_de_blancs( line ) < nb_blancs :
46 current_func=re.sub( "^ *def *" , "" , line )
47 current_func=re.sub( " *\(.*$" , "" , current_func )
48 elif re.search( "^class ", line ) != None :
49 classname = re.sub( "^class *" , "" , line )
50 classname = re.sub( " *[(:].*$" , "" , classname )
52 elif current_func != "" and re.search( "^[^ \t]", line ) != None :
56 if current_func == "" : current_func="__main__"
57 return classname ,current_func
65 Conversion des 3 informations nom de méthode, nom de fichier
66 numéro de ligne en un nom complet de méthode
69 def __init__ ( self , *args ) :
71 # le premier argument est optionnel (c'est un nom de fonction
72 # qu'on peut reconstituer avec le nom du fichier et le numéro de ligne.
76 if args[k] != "" : self.name = args[k]
81 self.filename = args[k] # recuperation du nom du fichier source
85 self.lineno = args[k] # recupération du numero de ligne
87 self.classname,funcname = get_classname( self.filename, self.lineno )
88 if self.name == None : self.name = funcname
89 ###assert(funcname==self.name or self.name=="main" or self.name=="<lambda>" ), "attendue '"+self.name+"' - trouvee '"+funcname+"'"
91 def __str__ ( self ) :
92 if self.classname != "" :
93 name=self.classname+"."+self.name
99 if __name__ == "__main__" :
100 print 'FUNCNAME("","funcname.py", 68)='+str(FUNCNAME("","funcname.py", 63) )
101 print 'FUNCNAME("funcname.py", 68)='+str(FUNCNAME("funcname.py", 63) )