Salome HOME
*** empty log message ***
[tools/eficas.git] / Editeur / utils.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 """
22     Ce module contient des utilitaires divers
23 """
24 import os,re
25 import glob
26 import traceback
27 import codecs,types
28
29 def substract_list(liste1,liste2):
30   """ 
31       Enlève tous les éléments de liste2 présents dans liste1 et retourne liste1
32   """
33   for item in liste2:
34     try:
35       liste1.remove(item)
36     except:
37       pass
38   return liste1
39
40 def get_rep_user():
41   """
42       Détermine sur quelle plate-forme s'exécute Eficas et recherche
43       le répertoire de l'utilisateur /$home/Eficas_install
44   """
45   if os.name not in ('posix','nt'):
46     print "Système non reconnu par Eficas"
47     print "Prévenir la maintenance"
48     sys.exit(0)
49   if os.name == 'nt':
50     try:
51       drive = os.environ['HOMEDRIVE']
52       nom_user = os.environ['USERNAME']
53       rep_user_eficas = drive+'\\'+nom_user+'\\'+'Eficas_install'
54     except:
55       rep_user_eficas = os.path.join('C:','Eficas_install')
56   else :
57     rep_user_eficas = os.path.join(os.environ['HOME'],'Eficas_install')
58   if os.path.exists(rep_user_eficas):
59     if os.path.isfile(rep_user_eficas) :
60       print "Un fichier de nom %s existe déjà : impossible de créer un répertoire de même nom" %rep_user_eficas
61       sys.exit(0)
62   else :
63     try:
64       os.mkdir(rep_user_eficas)
65     except:
66       print "Création du répertoire %s impossible\n Vérifiez vos droits d'accès" %rep_user_eficas
67   return rep_user_eficas
68
69 def read_file(file):
70   """
71       ouvre le fichier file et retourne son contenu
72       si pbe retourne None
73   """
74   try :
75     f=open(file)
76     text=f.read()
77     f.close()
78     return text
79   except:
80     return None
81
82 def save_in_file(file,text):
83   """
84       crée le fichier file (ou l'écrase s'il existe) et écrit text dedans
85       retourne 1 si OK 0 sinon
86   """
87   try :
88       import string
89       file=string.split(file,"/")[-1]
90       f=open(file,'w')
91       f.write(text)
92       f.close()
93       return 1
94   except:
95       return 0
96
97 def extension_fichier(pathAndFile):
98     """ Return ext if path/filename.ext is given """
99     return os.path.splitext(pathAndFile)[1][1:]
100
101 def stripPath(pathAndFile):
102     """ Return filename.ext if path/filename.ext is given """
103     return os.path.split(pathAndFile)[1]
104
105 def init_rep_cata_dev(fic_cata,rep_goal):
106   """ 
107       Initialise le répertoire des catalogues développeurs (chemin d'accès donné
108       dans le fichier eficas.ini cad :
109         - le crée s'il n'existe pas encore
110         - copie dedans les 3 fichiers nécessaires :
111           * __init__.py (pour que ce répertoire puisse être interprété comme un package)
112           * entete.py (pour réaliser les import nécessaires à l'interprétation des catalogues)
113           * declaration_concepts.py (idem)
114         - crée le fichier cata_developpeur.py qui sera par la suite importé
115   """
116   try :
117     if not os.path.isdir(rep_goal) :
118       os.mkdir(rep_goal)
119     texte_entete = get_entete_cata(fic_cata)
120     # rep_goal doit contenir les catalogues du développeur sous la forme *.capy
121     # il faut créer le catalogue développeur par concaténation de entete,declaration_concepts
122     # et de tous ces fichiers
123     cur_dir = os.getcwd()
124     os.chdir(rep_goal)
125     l_cata_dev = glob.glob('*.capy')
126     if os.path.isfile('cata_developpeur.py') : os.remove('cata_developpeur.py')
127     if len(l_cata_dev) :
128       # des catalogues développeurs sont effectivement présents : on crée cata_dev.py dans rep_goal
129       str = ''
130       str = str + texte_entete+'\n'
131       for file in l_cata_dev :
132         str = str + open(file,'r').read() +'\n'
133       open('cata_developpeur.py','w+').write(str)
134     os.chdir(cur_dir)
135   except:
136     traceback.print_exc()
137     print "Impossible de transférer les fichiers requis dans :",rep_goal
138
139 def get_entete_cata(fic_cata):
140   """ Retrouve l'entete du catalogue """
141   l_lignes = open(fic_cata,'r').readlines()
142   txt = ''
143   flag = 0
144   for ligne in l_lignes :
145     if re.match("# debut entete",ligne) : flag = 1
146     if re.match("# fin entete",ligne) : break
147     if not flag : continue
148     txt = txt + ligne
149   return txt
150