Salome HOME
merge de la branche BR_dev_mars_06 (tag V1_10b5) dans la branche principale
[tools/eficas.git] / Utilites / ici.py
1 # -*- coding: utf-8 -*-
2 """
3 Module ici
4 ----------
5     le module ici propose la fonction ICI pour afficher
6     le fichier courant et le numéro de la ligne courante.
7 """
8
9 try :
10         from developpeur import DEVELOPPEUR
11 except :
12         DEVELOPPEUR=None
13
14 def NULL( *l_args, **d_args  ) : pass
15
16 if DEVELOPPEUR :
17
18     import developpeur
19     developpeur.sortie.write( "import de "+__name__+" : $Id: ici.py,v 1.3.8.1 2006/03/10 15:09:54 eficas Exp $" )
20     developpeur.sortie.write( "\n" )
21
22     import sys
23
24     def ICI(offset=1) :
25     
26         """
27         Fonction ICI
28         ------------
29         La fonction ICI affiche sur la stderr, le nom du fichier qui l'appelle,
30         le numéro de la ligne ou elle est appelée et retourne ces deux informations.
31     
32         Usage :
33             from ici import ICI
34             ICI()
35             filename,lineno=ICI()
36
37         N.B. : la fonction ICI n'est opérante que pour les développeurs
38         """
39     
40         sys.stdout.flush()
41         sys.stderr.flush()
42         try :
43             1/0
44         except :
45             ###f=sys.exc_info()[2].tb_frame.f_back
46             ###lineno=f.f_lineno
47             ###code=f.f_code
48             ###filename=code.co_filename
49     
50             import traceback
51             trace=traceback.extract_stack()
52     
53             indice = len(trace)-(2+offset)
54             if indice<0 : indice=0
55     
56     
57             assert( indice<len(trace) ),"valeur de offset INVALIDE : "+str(offset)+" taille de la table "+len(trace)
58             file_name, lineno, func_name, dummytxt = trace[ indice ]
59     
60             assert( (indice>0) or (func_name=="?") )
61             if func_name=="?" : func_name = "main"
62     
63         if offset >= 0 :
64                 import funcname
65                 developpeur.sortie.write( file_name+':'+str(lineno)+': ('+str(funcname.FUNCNAME(func_name,file_name,lineno))+') : ' )
66                 developpeur.sortie.flush()
67     
68         return file_name,lineno
69
70
71 else :
72         ICI = NULL