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