2 # -*- coding: utf-8 -*-
3 # Copyright (C) 2007-2021 EDF R&D
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 from __future__ import absolute_import
24 from __future__ import print_function
26 from builtins import str
30 repIni = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
31 ihmQTDir = os.path.join(repIni,"UiQT5")
32 editeurDir = os.path.join(repIni,"Editeur")
33 ihmDir = os.path.join(repIni,"InterfaceQT4")
35 if ihmDir not in sys.path : sys.path.append(ihmDir)
36 if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
37 if editeurDir not in sys.path : sys.path.append(editeurDir)
39 if sys.version_info[0] < 3:
40 print("Must be using Python 3")
43 def lanceEficas(code=None, multi=False, langue='en', labelCode=None):
44 #-------------------------------------------------------------------
46 Lance l'appli EFICAS avec Ihm
49 from PyQt5.QtWidgets import QApplication
51 print('Please, set qt environment')
54 from Editeur import session
55 options = session.parse(sys.argv)
56 if options.code != None : code=options.code
58 from InterfaceQT4.qtEficas import Appli
59 app = QApplication(sys.argv)
61 Eficas=Appli(code=code,salome=0,multi=multi,langue=langue,labelCode=labelCode)
67 def getEficasSsIhm(code=None, multi=False, langue='en', ssCode=None, labelCode=None,forceXML=False, genereXSD=False, fichierCata=None):
68 #-------------------------------------------------------------------------------------------------------------------------
70 Lance l'appli EFICAS sans Ihm
72 from Editeur import session
73 options = session.parse(sys.argv)
74 if options.code != None : code=options.code
75 if forceXML : options.withXSD=True
77 from InterfaceQT4.qtEficasSsIhm import AppliSsIhm
78 Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue, ssCode=ssCode, labelCode=labelCode, genereXSD=genereXSD, fichierCata=fichierCata)
83 def genereXSD(code=None):
84 #------------------------
85 from Editeur import session
86 options = session.parse(sys.argv)
87 if code != None : options.code = code
88 if options.fichierCata == None :
89 print ('Use -c cata_name.py')
92 monEficasSsIhm = getEficasSsIhm(code=options.code,genereXSD=True)
93 monEditor=monEficasSsIhm.getEditor()
94 #texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
95 texteXSD=monEditor.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
97 fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
98 #if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
99 #if fichierCataTrunc[0] in ('_','-') : fichierCataTrunc=fichierCataTrunc[1:]
100 fileXSD = fichierCataTrunc + '.xsd'
102 f = open( str(fileXSD), 'w')
103 f.write(str(texteXSD))
105 def genereXML(code=None):
106 #-----------------------
107 from Editeur import session
108 options=session.parse(sys.argv)
109 if code != None : options.code = code
110 if options.fichierCata == None :
111 print ('Use -c cata_name.py')
113 try : fichier=options.comm[0]
114 except : fichier=None
116 print ('comm file is needed')
119 monEficasSsIhm = getEficasSsIhm(code=options.code, forceXML=True)
121 from .editorSsIhm import JDCEditorSsIhm
122 monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
123 if options.fichierXMLOut == None :
124 fichierXMLOut=fichier[:fichier.rfind(".")]+'.xml'
126 fichierXMLOut=options.fichierXMLOut
127 if not(monEditeur.jdc.isValid()):
128 print ('Fichier comm is not valid')
130 #print ('Fichier comm is not valid')
131 monEditeur.XMLgenerator.gener(monEditeur.jdc)
132 monEditeur.XMLgenerator.writeDefault(fichierXMLOut)
134 def genereStructure(code=None):
135 #------------------------------
136 from Editeur import session
137 options=session.parse(sys.argv)
138 if code != None : options.code = code
139 if options.fichierCata == None :
140 print ('Use -c cata_name.py')
143 monEficasSsIhm = getEficasSsIhm(code=options.code,genereXSD=True)
144 monEditor=monEficasSsIhm.getEditor()
145 texteStructure=monEditor.dumpStructure()
147 fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
148 fileStructure = fichierCataTrunc + '.txt'
149 f = open( str(fileStructure), 'w')
150 f.write(str(texteStructure))
154 def validateDataSet(code=None):
155 #------------------------------
156 from Editeur import session
157 options=session.parse(sys.argv)
158 if code != None : options.code = code
159 if options.fichierCata == None :
160 print ('Use -c cata_name.py')
162 fichier=options.comm[0]
164 print ('comm file is needed')
166 from .editorSsIhm import JDCEditorSsIhm
167 monEficasSsIhm = getEficasSsIhm(code=options.code)
168 monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
169 if not (monEditeur.jdc.isValid()) : print (monEditeur.getJdcRapport())
170 else : print ('Jdc is valid')
171 return monEditeur.jdc.isValid()
173 def validateFonction(laFonction, debug=False):
174 #-------------------------------
175 # ici un singleton pour avoir l editor, le catalogue et...
176 monEficasSsIhm = getEficasSsIhm(code='Essai')
177 monEditor=monEficasSsIhm.getEditor()
178 print ('_______ validateFonction', laFonction, laFonction.__name__)
179 from functools import wraps
180 from collections import OrderedDict
181 from inspect import getargspec
183 def fonctionValidee(*args, **kwargs):
184 laFonctionName = laFonction.__name__
185 if debug : print('Appel {} avec args={} et kwargs={}'.format( laFonction.__name__, args, kwargs))
186 laDefDeLaFonctionDansAccas = getattr(monEditor.readercata.cata,laFonctionName)
187 objConstruit = laDefDeLaFonctionDansAccas.makeObjetPourVerifSignature(*args,**kwargs)
188 if (objConstruit.isValid()) :
189 ret = laFonction(*args, **kwargs)
192 print ('mauvais arguments')
193 print (objConstruit.CR())
195 return fonctionValidee
197 #maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
198 return fonctionValidee
203 def createFromDocumentAccas(fichierCata=None,fichier=None,code=None):
204 #------------------------------------------------------------
205 if fichier == None : print ('file is needed'); return None
206 if fichierCata == None : print ('cata file is needed'); return None
208 from Noyau.N_OBJECT import activeSurcharge
211 from .editorSsIhm import JDCEditorSsIhm
212 monEficasSsIhm = getEficasSsIhm(code='Essai', fichierCata=fichierCata)
213 monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier)
214 return monEditeur.jdc
218 # --------------------------- toutes les fonctions après sont obseletes
219 def lanceEficas_ssIhm(code=None,fichier=None,ssCode=None,version=None,debug=False,langue='en'):
221 Lance l'appli EFICAS SsIhm
223 # Analyse des arguments de la ligne de commande
225 from Editeur import session
226 options=session.parse(sys.argv)
227 if version!=None and options.version == None : options.version=version
228 if fichier == None : fichier=options.comm[0]
229 if code == None : code=options.code
231 from .qtEficas import Appli
232 Eficas=Appli(code=code,salome=0,ssCode=ssCode,ssIhm=True,langue=langue)
234 from .ssIhm import QWParentSSIhm
235 parent=QWParentSSIhm(code,Eficas,version)
237 from . import readercata
238 if not hasattr ( Eficas, 'readercata'):
239 monreadercata = readercata.ReaderCata( parent, Eficas )
240 Eficas.readercata=monreadercata
242 from .editor import JDCEditor
243 monEditeur=JDCEditor(Eficas,fichier)
246 def lanceEficas_ssIhm_chercheGroupes(code=None,fichier=None,ssCode=None,version=None):
248 monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version)
249 print((monEditeur.chercheGroupes()))
251 def lanceEficas_ssIhm_cherche_cr(code=None,fichier=None,ssCode=None,version=None):
253 monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version)
254 print((monEditeur.jdc.cr))
256 def lanceEficas_ssIhm_reecrit(code=None,fichier=None,ssCode=None,version=None,ou=None,cr=False,debug=False,leger=False,langue='ang'):
258 #print 'lanceEficas_ssIhm_reecrit', fichier
259 monEditeur=lanceEficas_ssIhm(code,fichier,ssCode,version,langue=langue)
261 fileName=fichier.split(".")[0]+"_reecrit.comm"
262 fn=fichier.split(".")[0]+"_cr.txt"
264 f=fichier.split(".")[0]+"_reecrit.comm"
265 f1=os.path.basename(f)
266 fn=fichier.split(".")[0]+"_cr.txt"
267 f2=os.path.basename(fn)
268 fileName=os.path.join(ou,f1)
269 fileCr=os.path.join(ou,f2)
272 import cProfile, pstats, StringIO
273 pr = cProfile.Profile()
275 monEditeur.saveFileAs(fileName=fileName)
277 s = StringIO.StringIO()
278 sortby = 'cumulative'
279 ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
283 elif not leger : monEditeur.saveFileAs(fileName=fileName)
284 else : monEditeur.saveFileLegerAs(fileName=fileName)
286 f = open(fileCr, 'w')
287 f.write(str(monEditeur.jdc.report()))
290 def lanceEficas_param(code='Adao',fichier=None,version='V0',macro='ASSIMILATION_STUDY'):
292 Lance l'appli EFICAS pour trouver les noms des groupes
295 # Analyse des arguments de la ligne de commande
296 from Editeur import session
297 options=session.parse(sys.argv)
299 from .qtEficas import Appli
301 from .ssIhm import QWParentSSIhm
302 Eficas=QWParentSSIhm(code,version)
304 from . import readercata
305 if not hasattr ( Eficas, 'readercata'):
306 monreadercata = readercata.ReaderCata( parent, Eficas )
307 Eficas.readercata=monreadercata
309 from .editor import JDCEditor
310 monEditeur=JDCEditor(Eficas,fichier)
311 texte=loadJDC(fichier)
312 parameters=getJdcParameters(texte,macro)
316 def getJdcParameters(jdc,macro):
318 This function converts the data from the specified macro of the
319 specified jdc text to a python dictionnary whose keys are the
320 names of the data of the macro.
324 source = "def args_to_dict(**kwargs): return kwargs \n"
325 source+= "%s = _F = args_to_dict \n"%macro
326 source+= "parameters="+jdc+" \n"
327 source+= "context['parameters'] = parameters \n"
328 code = compile(source, 'file.py', 'exec')
330 parameters = context['parameters']
333 def loadJDC(filename):
335 This function loads the text from the specified JdC file. A JdC
336 file is the persistence file of Eficas (*.comm).
339 fcomm=open(filename,'r')
341 for line in fcomm.readlines():
342 if not (line[0]=='#'):
345 # Warning, we have to make sure that the jdc comes as a simple
346 # string without any extra spaces/newlines
349 if __name__ == "__main__":
351 sys.path.insert(0,os.path.abspath(os.path.join(os.getcwd(),'..')))
352 lanceEficas(code=None,multi=True)