Salome HOME
AY a ajouté l'interception de l'exception levée lorsque la chaine passée
[tools/eficas.git] / Misc / MakeNomComplet.py
1 # Auteur : A. Yessayan
2 # Date : jeudi 06/03/2003 a 14:36:00
3
4 """
5
6 Module MakeNomComplet
7 ---------------------
8     Construction du nom complet d'un fichier dans un répertoire existant.
9     Le fichier n'existe pas forcément mais le répertoire doit OBLIGATOIREMENT
10     exister.
11     
12     Usage :
13            import MakeNomComplet
14
15            txt="main.py"
16            txt="./main.py"
17            txt="/tmp/main.py"
18            try :
19                 nom_complet=str(MakeNomComplet.FILNAME( txt ))
20                 dir_name = MakeNomComplet.dirname(txt)
21                 fic_name = MakeNomComplet.basename(txt)
22            except Exception,e:
23                 print txt,' est un nom INVALIDE'
24                 print str(e) 
25
26 """
27
28 try :
29         from developpeur import DEVELOPPEUR
30 except :
31         DEVELOPPEUR=None
32
33 if DEVELOPPEUR :
34     import developpeur
35     developpeur.sortie.write( "import de "+__name__+" : $Id: MakeNomComplet.py,v 1.1 2003/03/06 16:09:53 eficas Exp $" )
36     developpeur.sortie.write( "\n" )
37
38
39 import string
40 import os
41 import os.path
42 import types
43 import re
44
45 class FILENAME :
46     def __init__( self , s ) :
47         assert(type(s)==types.StringType)
48         assert(len(s)>0)
49         self.text = s
50         self.rep=None
51         self.file=None
52         liste=string.split( self.text , '/' )
53         l=len(liste)
54         assert(l>=1)
55         if l == 1 :
56             rep="."
57         else :
58             # evaluation des eventuels paramètres shell : DEBUT
59             l_evalue=[]
60             for d in liste :
61                 if len(d) and d[0]=='$' :
62                      d=re.sub( "[\${}]" , "" , d )
63                      d=os.getenv(d)
64                 l_evalue.append(d)
65             # evaluation des eventuels paramètres shell : FIN
66
67             rep=string.join( l_evalue[0:l-1] , '/' )
68         try :
69             self.rep = self.getcwd_( rep )
70             self.file = liste[-1]
71         except Exception,e :
72             raise Exception( "nom de repertoire INVALIDE : "+rep )
73
74     def getcwd_ ( self , rep ) :
75         prev = os.getcwd()
76         os.chdir( rep )
77         wd = os.getcwd()
78         os.chdir( prev )
79         return wd
80
81     def dirname( self ) :
82         return self.rep
83
84     def basename( self ) :
85         return self.file
86
87     def __str__ ( self ) :
88         return self.rep+'/'+self.file
89         
90         
91
92
93 def dirname( s ) :
94     """
95     retourne dans une string, le nom complet du répertoire
96     du fichier dont le nom est passe dans s.
97     S'il n' y a pas de chemin dans s, c'ets le nom complet
98     du répertoire courant qui est retourné.
99     N.B. : ce repertoire doit exister
100     """
101     f=FILENAME(s)
102     return f.dirname()
103
104
105 def basename( s ) :
106     """
107     retourne dans une string, le nom simple du fichier dont le nom
108     est passe dans s.
109     N.B. : le repertoire (s'il ya un chemin dans s) doit exister
110     """
111     f=FILENAME(s)
112     return f.basename()
113
114
115 if __name__ == "__main__" :
116
117     import sys
118
119     import MakeNomComplet
120
121     s="${PWD}/MakeNomComplet.py"
122     print dirname( s )
123     print basename( s )
124     print str(MakeNomComplet.FILENAME(s))
125
126     print dirname( "MakeNomComplet.py" )
127     print basename( "MakeNomComplet.py" )
128
129     print dirname( "./MakeNomComplet.py" )
130     print basename( "./MakeNomComplet.py" )
131
132
133     try :
134         print basename( "/toto/main.py" )
135         print "ERREUR"
136         sys.exit(5)
137     except Exception,e :
138         print str(e)
139         print "OKAY"
140         pass
141     print "FIN NORMALE DE "+__name__
142     sys.exit(0)