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.
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.
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
22 class fiabilite_fichier :
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.
35 def __init__ ( self, jdc, Rep_Calc_LOGICIEL_global, nomfic, info = 1 ) :
37 # jdc : le jeu de commandes en cours de traitement
41 # Rep_Calc_LOGICIEL_global : le répertoire d'exécution du logiciel de fiabilité
43 self.Rep_Calc_LOGICIEL_global = Rep_Calc_LOGICIEL_global
45 # nomfic : nom local du fichier à créer
49 # messages_erreur : messages d'erreur
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." }
58 # info : niveau d'information au sens ASTER
62 # ligne_sep : ligne de séparation
64 self.ligne_sep = "========================================================="
65 self.ligne_commentaire = "#" + self.ligne_sep + "\n"
68 print "Création du fichier : "+self.nomfic
71 # 2. Ouverture du fichier
74 def Ouvre_Fichier ( self, type_ouvr ) :
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
88 # 2.1. ==> Le nom global du fichier
90 self.nomfic_global = os.path.join(self.Rep_Calc_LOGICIEL_global,self.nomfic)
96 if ( type_ouvr == "w" or type_ouvr == "r" ) :
98 if ( type_ouvr == "r" ) :
99 if not os.path.isfile(self.nomfic_global) :
104 self.jdc.cr.warn("Type d'ouverture : "+type_ouvr)
107 # 2.3. ==> Ouverture vraie
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])
118 # 2.4. ==> C'est fini
121 self.jdc.cr.warn("Fichier : "+self.nomfic)
122 self.jdc.cr.warn(self.messages_erreur[erreur])
127 # 3. Fermeture du fichier
130 def Ferme_Fichier ( self ) :
132 # 3.0. ==> Préalables
136 0 : tout s'est bien passé
137 20 : impossible d'imprimer
146 if not os.path.isfile(self.nomfic_global) :
149 # 3.2. ==> Fermeture vraie
156 except os.error,erreur_partiel :
157 self.jdc.cr.warn("Code d'erreur de close : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
160 # 3.3. ==> C'est fini
163 self.jdc.cr.warn("Fichier : "+self.nomfic)
164 self.jdc.cr.warn(self.messages_erreur[erreur])
169 # 4. Impression du contenu du fichier
172 def Imprime_Fichier ( self ) :
174 # 4.0. ==> Préalables
178 0 : tout s'est bien passé
179 20 : impossible d'imprimer
184 erreur = self.Ouvre_Fichier ( "r" )
186 les_lignes = self.fic.readlines()
187 erreur = self.Ferme_Fichier ( )
189 # 4.2. ==> Impression
193 print "\n"+self.ligne_sep
194 print "Contenu du fichier " + self.nomfic," :"
195 for ligne in les_lignes :
197 print self.ligne_sep+"\n"
199 # 4.4. ==> C'est fini
203 self.jdc.cr.warn("Fichier : "+self.nomfic)
204 self.jdc.cr.warn(self.messages_erreur[erreur])
209 # 5. Ecriture de lignes de commentaires
212 def Ecrit_Commentaires ( self, comm ) :
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
221 if type(comm) == type([ ]) :
227 self.fic.write("# "+str(ligne)+"\n")
230 # 6. Ecriture de lignes de titres
233 def Ecrit_Titre ( self, comm ) :
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
242 self.fic.write(self.ligne_commentaire)
243 self.Ecrit_Commentaires(comm)
244 self.fic.write(self.ligne_commentaire)
247 # 7. Ecriture d'une ligne de valeurs
250 def Ecrit_Valeurs ( self, val ) :
253 Liste = liste des valeurs à écrire, représenatn une ligne
254 Remarque : cela suppose que le fichier est ouvert en écriture
257 if type(val) == type([ ]) :
260 ligne = ligne + " " + str(aux)
264 self.fic.write(ligne+"\n")
267 #=======================================================================================
268 #=======================================================================================
273 if __name__ == "__main__" :
281 Rep_Calc_LOGICIEL_global = tempfile.mktemp()
282 os.mkdir(Rep_Calc_LOGICIEL_global)
286 # 2. ==> Création de la classe
289 fic = fiabilite_fichier ( jdc, Rep_Calc_LOGICIEL_global , nomfic )
291 # 3. ==> Ouverture du fichier
293 erreur = fic.Ouvre_Fichier ( "w" )
295 # 4. ==> Remplissage du fichier
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)
305 fic.Ecrit_Commentaires (aux)
307 fic.Ecrit_Valeurs (aux)
309 fic.Ecrit_Valeurs (aux)
311 # 5. ==> Fermeture du fichier
314 erreur = fic.Ferme_Fichier ( )
316 # 4. ==> Impression du fichier
319 erreur = fic.Imprime_Fichier ( )
323 Liste = os.listdir(Rep_Calc_LOGICIEL_global)
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)
332 mess = "Erreur " + str(erreur)
334 mess = "Fin normale."