]> SALOME platform Git repositories - tools/eficas.git/blob - Aster/Cata/cataSTA10/Macro/fiabilite_fichier.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / Aster / Cata / cataSTA10 / Macro / fiabilite_fichier.py
1 #@ MODIF fiabilite_fichier Macro  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
2 # -*- coding: iso-8859-1 -*-
3 #            CONFIGURATION MANAGEMENT OF EDF VERSION
4 # ======================================================================
5 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
6 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
7 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
8 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
9 # (AT YOUR OPTION) ANY LATER VERSION.                                                  
10 #                                                                       
11 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
12 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
13 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
14 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
15 #                                                                       
16 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
17 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
18 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
19 # ======================================================================
20 # RESPONSABLE GNICOLAS G.NICOLAS
21 #
22 class fiabilite_fichier :
23 #
24   """ Classe des fichiers de données des logiciels fiabilistes
25       Cette classe a été mise au point pour le couplage entre
26       Code_ASTER et MEFISTO, mais pourrait servir ailleurs.
27   """
28 #
29 #
30 #====
31 # 1. Le constructeur
32 #====
33 #
34 #
35   def __init__ ( self, jdc, Rep_Calc_LOGICIEL_global, nomfic, info = 1 ) :
36 #
37 #   jdc : le jeu de commandes en cours de traitement
38 #
39     self.jdc = jdc
40 #
41 #   Rep_Calc_LOGICIEL_global : le répertoire d'exécution du logiciel de fiabilité
42 #
43     self.Rep_Calc_LOGICIEL_global = Rep_Calc_LOGICIEL_global
44 #
45 #   nomfic : nom local du fichier à créer
46 #
47     self.nomfic = nomfic
48 #
49 #   messages_erreur : messages d'erreur
50 #
51     self.messages_erreur = { 0 : "Tout va bien",
52                              1 : "==> Ce fichier est inconnu.",
53                              2 : "==> Ce type d'ouverture est inconnu.",
54                             10 : "==> Problème à l'ouverture.",
55                             11 : "==> Problème à la fermeture.",
56                             20 : "==> Problème à l'impression." }
57 #
58 #   info : niveau d'information au sens ASTER
59 #
60     self.info = info
61 #
62 #   ligne_sep : ligne de séparation
63 #
64     self.ligne_sep = "========================================================="
65     self.ligne_commentaire = "#" + self.ligne_sep + "\n"
66 #
67     if info >= 2 :
68       print "Création du fichier : "+self.nomfic
69 #
70 #====
71 # 2. Ouverture du fichier
72 #====
73 #
74   def Ouvre_Fichier ( self, type_ouvr ) :
75 #
76 # 2.0. ==> Préalables
77 #
78     """
79     Ouvre le fichier en lecture ou écriture.
80     0 : tout s'est bien passé
81     1 : on veut ouvrir en lecture un fichier qui n'existe pas
82     2 : le mode d'ouverture est inconnu
83    10 : impossible d'ouvrir
84     """
85 #
86     import os
87 #
88 # 2.1. ==> Le nom global du fichier
89 #
90     self.nomfic_global = os.path.join(self.Rep_Calc_LOGICIEL_global,self.nomfic)
91 #
92 # 2.2. ==> Controles
93 #
94     erreur = 0
95 #
96     if ( type_ouvr == "w" or type_ouvr == "r" ) :
97 #
98       if ( type_ouvr == "r" ) :
99         if not os.path.isfile(self.nomfic_global) :
100           erreur = 1          
101
102     else :
103 #
104       self.jdc.cr.warn("Type d'ouverture : "+type_ouvr)
105       erreur = 2
106 #
107 # 2.3. ==> Ouverture vraie
108 #
109     if not erreur :
110 #
111       erreur_partiel = [0]
112       try :
113         self.fic = open( self.nomfic_global, type_ouvr )
114       except os.error,erreur_partiel :
115         self.jdc.cr.warn("Code d'erreur de open : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
116         erreur = 10
117 #
118 # 2.4. ==> C'est fini
119 #
120     if erreur :
121       self.jdc.cr.warn("Fichier : "+self.nomfic)
122       self.jdc.cr.warn(self.messages_erreur[erreur])
123 #
124     return erreur
125 #
126 #====
127 # 3. Fermeture du fichier
128 #====
129 #
130   def Ferme_Fichier ( self ) :
131 #
132 # 3.0. ==> Préalables
133 #
134     """
135     Ferme le fichier.
136     0 : tout s'est bien passé
137    20 : impossible d'imprimer
138     """
139 #
140     import os
141 #
142 # 3.1. ==> Controles
143 #
144     erreur = 0
145 #
146     if not os.path.isfile(self.nomfic_global) :
147       erreur = 1          
148 #
149 # 3.2. ==> Fermeture vraie
150 #
151     if not erreur :
152 #
153       erreur_partiel = [0]
154       try :
155         self.fic.close( )
156       except os.error,erreur_partiel :
157         self.jdc.cr.warn("Code d'erreur de close : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
158         erreur = 11
159 #
160 # 3.3. ==> C'est fini
161 #
162     if erreur :
163       self.jdc.cr.warn("Fichier : "+self.nomfic)
164       self.jdc.cr.warn(self.messages_erreur[erreur])
165 #
166     return erreur
167 #
168 #====
169 # 4. Impression du contenu du fichier
170 #====
171 #
172   def Imprime_Fichier ( self ) :
173 #
174 # 4.0. ==> Préalables
175 #
176     """
177     Imprime le fichier.
178     0 : tout s'est bien passé
179    20 : impossible d'imprimer
180     """
181 #
182 # 4.1. ==> Lecture
183 #
184     erreur = self.Ouvre_Fichier ( "r" )         
185     if not erreur :
186       les_lignes = self.fic.readlines()
187       erreur = self.Ferme_Fichier ( )         
188 #
189 # 4.2. ==> Impression
190 #
191     if not erreur :
192 #
193       print "\n"+self.ligne_sep
194       print "Contenu du fichier " + self.nomfic," :"
195       for ligne in les_lignes :
196         print ligne[:-1]
197       print self.ligne_sep+"\n"
198 #
199 # 4.4. ==> C'est fini
200 #
201     if erreur :
202       erreur = 20
203       self.jdc.cr.warn("Fichier : "+self.nomfic)
204       self.jdc.cr.warn(self.messages_erreur[erreur])
205 #
206     return erreur
207 #
208 #====
209 # 5. Ecriture de lignes de commentaires
210 #====
211 #
212   def Ecrit_Commentaires ( self, comm ) :
213 #
214     """
215     Liste = commentaires à écrire
216     Soit c'est une chaine qu'on écrit sur une ligne ;
217     Soit c'est une liste, qu'on écrit à raison de une par ligne.
218     Remarque : cela suppose que le fichier est ouvert en écriture
219     """
220 #
221     if type(comm) == type([ ]) :
222       Liste = comm
223     else :
224       Liste = [comm]
225 #
226     for ligne in Liste :
227       self.fic.write("# "+str(ligne)+"\n")
228 #
229 #====
230 # 6. Ecriture de lignes de titres
231 #====
232 #
233   def Ecrit_Titre ( self, comm ) :
234 #
235     """
236     Liste = commentaires à écrire, encadrés par des séparateurs
237     Soit c'est une chaine qu'on écrit sur une ligne ;
238     Soit c'est une liste, qu'on écrit à raison de une par ligne.
239     Remarque : cela suppose que le fichier est ouvert en écriture
240     """
241 #
242     self.fic.write(self.ligne_commentaire)
243     self.Ecrit_Commentaires(comm)
244     self.fic.write(self.ligne_commentaire)
245 #
246 #====
247 # 7. Ecriture d'une ligne de valeurs
248 #====
249 #
250   def Ecrit_Valeurs ( self, val ) :
251 #
252     """
253     Liste = liste des valeurs à écrire, représenatn une ligne
254     Remarque : cela suppose que le fichier est ouvert en écriture
255     """
256 #
257     if type(val) == type([ ]) :
258       ligne = " "
259       for aux in val :
260         ligne = ligne + " " + str(aux)
261     else :
262       ligne = str(val)
263 #
264     self.fic.write(ligne+"\n")
265 #
266 #
267 #=======================================================================================
268 #=======================================================================================
269
270
271 #
272 #
273 if __name__ == "__main__" :
274 #
275   import os
276   import sys
277   import tempfile
278 #
279 # 1. ==> Préalable
280 #
281   Rep_Calc_LOGICIEL_global = tempfile.mktemp()
282   os.mkdir(Rep_Calc_LOGICIEL_global)
283 #
284   jdc = None
285 #
286 # 2. ==> Création de la classe
287 #
288   nomfic = "dataGrad"
289   fic = fiabilite_fichier ( jdc, Rep_Calc_LOGICIEL_global , nomfic )
290 #
291 # 3. ==> Ouverture du fichier
292 #
293   erreur = fic.Ouvre_Fichier ( "w" )
294 #
295 # 4. ==> Remplissage du fichier
296 #
297   if not erreur :
298     aux = ["Titre 1", "Titre 2"]
299     fic.Ecrit_Titre (aux)
300     aux = ["Ligne 1", "Ligne 2"]
301     fic.Ecrit_Commentaires (aux)
302     aux = "Ligne en forme de chaine"
303     fic.Ecrit_Commentaires (aux)
304     aux = 1789.1792
305     fic.Ecrit_Commentaires (aux)
306     aux = [1, 0.0]
307     fic.Ecrit_Valeurs (aux)
308     aux = 1958.
309     fic.Ecrit_Valeurs (aux)
310 #
311 # 5. ==> Fermeture du fichier
312 #
313   if not erreur :
314     erreur = fic.Ferme_Fichier ( )
315 #
316 # 4. ==> Impression du fichier
317 #
318   if not erreur :
319     erreur = fic.Imprime_Fichier ( )
320 #
321 # 4. ==> La fin
322 #
323   Liste = os.listdir(Rep_Calc_LOGICIEL_global)
324 #
325   for nomfic in Liste :
326     fic_total = os.path.join(Rep_Calc_LOGICIEL_global,nomfic)
327     os.chmod  (fic_total,0755)
328     os.remove (fic_total)
329   os.rmdir (Rep_Calc_LOGICIEL_global)
330 #
331   if erreur :
332     mess = "Erreur " + str(erreur)
333   else :
334     mess = "Fin normale."
335   sys.exit(mess)