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