from Noyau import N_ETAPE
from Validation import V_ETAPE
from Ihm import I_ETAPE
-from Efi2Xsd.MCAccasXML import X_MCCOMPO
+from Efi2Xsd.MCAccasXML import X_ETAPE
-class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_MCCOMPO,N_ETAPE.ETAPE):
+class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_ETAPE,N_ETAPE.ETAPE):
def __init__(self,oper=None,reuse=None,args={}):
N_ETAPE.ETAPE.__init__(self,oper,reuse,args)
V_ETAPE.ETAPE.__init__(self)
default=False,
help=tr("construit le .xml en meme temps que le .comm"))
+ parser.add_option(u"-a","--withEltAbstrait", action="store_true", dest="avecEltAbstrait",
+ default=False,
+ help=tr("construit des elements abstraits dans le XSD pour gerer le cascading"))
+
parser.add_option(u"-s","--schema", action="store", type="string",dest="ssCode",
help=tr("schema"))
# To handle locale information
class X_JDC_CATA :
#-----------------
- def dumpXsd(self, debug = True):
+ def dumpXsd(self, avecEltAbstrait, debug = True):
cata = CONTEXT.getCurrentCata()
+ if debug : print ('avecEltAbstrait -------------------', avecEltAbstrait)
if debug : print ('self.importedBy -------------------', self.importedBy)
if debug : print ('self.code -------------------', self.code)
# -------------
def delObjPyxb(self, debug=True):
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
if self.nom == 'Consigne' : return None
trouve = False
def addObjPyxb(self,indiceDsLeContenu,debug=False):
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
if debug :print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu)
# adherence Accas sur le parent
parent=self.parent
class X_MCSIMP(X_OBJECT):
# -----------------------
- def buildObjPyxb(self, debug=True) :
- if not self.cata.modeleMetier : return
+ def buildObjPyxb(self, debug=False) :
+ if not self.cata or not self.cata.modeleMetier : return
if self.nom == 'Consigne' : return None
if debug : print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur)
if debug and self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb')
if debug : print ('fin X_MCSIMP', self.objPyxb, self.nom, self, self.maClasseModeleMetier,self.valeur)
- def setValeurObjPyxb(self,newVal, debug=False):
- if not self.cata.modeleMetier : return
+ def setValeurObjPyxb(self,newVal, debug=True):
+ if not self.cata or not self.cata.modeleMetier : return
if debug : print (' ___________________________ dans setValeurObjPyxb MCSIMP ', self.nom, newVal)
if debug : print (' self.perePyxb = ', self.perePyxb.nom)
if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) : newVal = newVal.nom
# -------------------------
#
def buildObjPyxb(self,mc_list, debug=True) :
+ if not self.cata or not self.cata.modeleMetier : return
print ('X_MCCOMPO', self.nom)
- if not self.cata.modeleMetier : return
self.listArg=[]
self.dicoArg={}
for objAccas in mc_list :
class X_MCBLOC (X_MCCOMPO):
# --------------------------
def buildObjPyxb(self,mc_list,debug=False):
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
if debug : print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien')
self.perePyxb=None
self.objPyxb=None
def addObjPyxb(self, indiceDsLeContenu, debug=False):
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
if debug : print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu)
rangDeLObjet=indiceDsLeContenu
for obj in self.mcListe:
rangDeLObjet=rangDeLObjet+obj.longueurDsArbre()
def delObjPyxb(self, debug=False):
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
if debug : print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------')
for obj in self.mcListe:
obj.delObjPyxb()
rangDeLObjet= rangDeLObjet + 1
def delObjPyxb(self, debug=False):
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
if debug : print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------')
for obj in self:
obj.delObjPyxb()
# -------------------------
pass
+class X_ETAPE(X_MCCOMPO) :
+# -------------------------
+
+ def metAJourNomASSD(self, nom,debug=False):
+ if not self.cata or not self.cata.modeleMetier : return
+ if debug : print ('X_ETAPE metAJourLesAttributs', self.nom, nom,' --------------------------')
+ self.objPyxb.name=nom
+
class X_JDC (X_MCCOMPO):
# ---------------------
def __init__(self):
self.perePyxb=None
- if not self.cata.modeleMetier : return
+ if not self.cata or not self.cata.modeleMetier : return
#if hasattr(self.cata,'DicoNomTypeDifferentNomElt') : print ('jkllllllllllllllll')
if not(hasattr(self.cata,'DicoNomTypeDifferentNomElt')) : self.cata.DicoNomTypeDifferentNomElt={}
self.monNomClasseModeleMetier=self.code
def toXml(self,fichier=None):
print ('ds to XML')
- if not self.cata.modeleMetier : return
- print ('***************',self.objPyxb,'***************',)
- print ('***************',self,'***************',)
- print ('***************',self.objPyxb.orderedContent(),'***************',)
+ if not self.cata or not self.cata.modeleMetier : return
+ print (' to xml ***************',self.objPyxb,'***************',)
+ print (' to xml ***************',self,'***************',)
+ print (' to xml ***************',self.objPyxb.orderedContent(),'***************',)
print(self.objPyxb.toDOM().toprettyxml())
print(self.objPyxb.toxml())
return (self.objPyxb.toDOM().toprettyxml())
- 0 si le nommage n'a pas pu etre menea son terme,
- 1 dans le cas contraire
"""
- # Le nom d'un concept doit etre un identificateur Python (toujours vrai ?)
+ # Le nom d'un concept doit etre un identificateur Python (toujours vrai ou insuffisant?)
if not conceptRE.match(nom):
return 0, tr("Un nom de concept doit etre un identificateur Python")
if not self.isValid(sd='non') : return 0,"Nommage du concept refuse : l'operateur n'est pas valide"
#
# Cas particulier des operateurs obligatoirement reentrants
+ # plus de concept reentrant (pour Aster)
#
if self.definition.reentrant == 'o':
self.sd = self.reuse = self.jdc.getSdAvantEtape(nom,self)
def updateConcept(self,sd):
if type(self.valeur) in (list,tuple) :
if sd in self.valeur:
+ if self.objPyxb :
+ newVal=[]
+ for v in self.valeur : newVal.append(v.nom)
+ self.setValeurObjPyxb(newVal)
self.initModif()
self.finModif()
else:
if sd == self.valeur:
+ if self.objPyxb : self.setValeurObjPyxb(sd.nom)
self.initModif()
self.finModif()
du concept sd
Attention aux matrices
"""
+##PNPNPN a tester
if type(self.valeur) == tuple :
if sd in self.valeur:
self.initModif()
self.valeur=list(self.valeur)
- self.valeur.remove(sd)
+ while sd in self.valeur : self.valeur.remove(sd)
+ if self.objPyxb :
+ newVal=[]
+ for v in self.valeur : newVal.append(v.nom)
+ if newVal == [] : self.delObjPyxb()
+ else : self.setValeurObjPyxb(sd.nom)
self.finModif()
elif type(self.valeur) == list:
if sd in self.valeur:
self.initModif()
- self.valeur.remove(sd)
+ while sd in self.valeur : self.valeur.remove(sd)
self.finModif()
else:
if self.valeur == sd:
self.initModif()
self.valeur=None
self.val=None
+ if self.objPyxb : self.setValeurObjPyxb()
self.finModif()
# Glut Horrible pour les matrices ???
if sd.__class__.__name__== "variable":
CONTEXT.unsetCurrentStep()
#jdc=self.readercata.cata[0].JdC(procedure=text,
- print ('llllllllllllllll')
- print (self.readercata.cata.JdC)
jdc=self.readercata.cata.JdC(procedure=text,
appliEficas=self.appliEficas,
cata=self.readercata.cata,
nom=jdcName,
rep_mat=self.maConfiguration.rep_mat
)
- print ('llllllllllllllll')
self.modified = False
return jdc
#---------------------------#
def getChecksum(self,texte):
#---------------------------#
- newtexte=texte.replace('"','\\"')
- commande='echo "'+newtexte+'"|md5sum'
- a=os.popen(commande)
- checksum=a.read()
- a.close()
- ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
- return ligne
+ try :
+ import haslib
+ newtexte=texte.replace('"','\\"')
+ hash_checksum = hashlib.md5()
+ hash_checksum.update(newtexte.encode('utf-8'))
+ checksum = hash_checksum.hexdigest()
+ ligne = ligne="#CHECKSUM:"+checksum+":FIN CHECKSUM"
+ except :
+ try :
+ newtexte=texte.replace('"','\\"')
+ commande='echo "'+newtexte+'"|md5sum'
+ a=os.popen(commande)
+ checksum=a.read()
+ a.close()
+ except :
+ checksum='Fichier trop long \n'
+ ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+ return ligne
#----------------------#
def getDico(self):
monEficasSsIhm = getEficasSsIhm(code=options.code)
monEditor=monEficasSsIhm.getEditor()
- texteXSD=monEficasSsIhm.dumpXsd()
+ texteXSD=monEficasSsIhm.dumpXsd(avecEltAbstrait=options.avecEltAbstrait)
fichierCataTrunc=os.path.splitext(os.path.basename(options.fichierCata))[0]
#if fichierCataTrunc[0:4] in ('cata','Cata'): fichierCataTrunc=fichierCataTrunc[4:]
else : print ('Jdc is valid')
return monEditeur.jdc.isValid()
+def validateFonction(laFonction, debug=True):
+#-------------------------------
+ # ici un singleton pour avoir l editor, le catalogue et...
+ monEficasSsIhm = getEficasSsIhm(code='Essai')
+ monEditor=monEficasSsIhm.getEditor()
+ print ('_______ validateFonction', laFonction, laFonction.__name__)
+ from functools import wraps
+ from collections import OrderedDict
+ from inspect import getargspec
+ @wraps(laFonction)
+ def fonctionValidee(*args, **kwargs):
+ laFonctionName = laFonction.__name__
+ if debug : print('Appel {} avec args={} et kwargs={}'.format( laFonction.__name__, args, kwargs))
+ listArgsNames = list(OrderedDict.fromkeys(getargspec(laFonction)[0]))
+ listKwargsNames = list(kwargs.keys())
+ if debug : print (listArgsNames)
+ if debug : print (listKwargsNames)
+ #listTousNames = listArgsNames+listKwargsNames
+ #if debug : print (listTousNames)
+ #args_dict = OrderedDict(list(zip(args_name, args)) + list(kwargs.iteritems()))
+ #print (args_dict)
+
+ #laDefDeLaFonctionDansAccas = getattr(monEditor.readercata.cata,laFonctionName)
+ #print (laDefDeLaFonctionDansAccas)
+ #print (laDefDeLaFonctionDansAccas.entites)
+ #print (dir(laDefDeLaFonctionDansAccas))
+ #print (args)
+ #dict1={'monArgument1' : 'a', 'monArgument2' : 'uuu'}
+
+ #objConstruit = laDefDeLaFonctionDansAccas.makeObjetPourVerifSignature(**dict1)
+ #print (objConstruit)
+ #print (objConstruit.isValid())
+ ret = laFonction(*args, **kwargs)
+ return ret
+ return fonctionValidee
+
+ #maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas)
+ return fonctionValidee
+
+
+ return laFonction
from Extensions.i18n import tr
# Import des panels
+# PN 18 mai 2020 : affiche systematique des optionnels
class MonWidgetFactCommun(Groupe):
"""
"""
self.GroupBox.setText(tr(labeltext))
self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.parentQt.commandesLayout.insertWidget(-1,self)
- self.doitAfficherOptionnel=False
+ self.doitAfficherOptionnel=True
min,max=obj.getMinMax()
if max < 2 and hasattr(self, 'RBPlus') : self.RBPlus.close()
if max > 1 and hasattr(self, 'RBPlus') : self.RBPlus.clicked.connect(self.ajouteMCParPB)
def leaveEvent(self,event):
#print "leaveEvent", self.node.item.getLabelText()[0]
- self.doitAfficherOptionnel=False
+ #self.doitAfficherOptionnel=False
QWidget.leaveEvent(self,event)
def delayAffiche(self):
self.parentQt=parentQt
def afficheOptionnel(self,liste,liste_rouge,MC):
- #print ('afficheOptionnel MonWidgetOptionnel', self,liste,MC)
+ #print ('afficheOptionnel MonWidgetOptionnel',self, liste,MC.node.item.nom)
self.vireLesAutres(MC)
if MC.node.item.nom in self.dicoMCWidgetOptionnel :
ok = editor.saveFileAs()
print ('ok ',ok)
- def dumpXsd(self):
+ def dumpXsd(self, avecEltAbstrait = False):
current_cata = CONTEXT.getCurrentCata()
- texteXSD = current_cata.dumpXsd()
+ texteXSD = current_cata.dumpXsd( avecEltAbstrait)
return texteXSD
#if self.maConfiguration.afficheIhm==False : exit()
#else : return texteXSD
try :
import pyxb
except :
- print ('please source pyxb environment')
+ self.QWParent.informe('environnement', 'please source pyxb environment')
exit()
try :
#if 1 :
pathCata = os.path.dirname(self.fichierCata)+'/raw/'+nomCataXsd+'.py'
import imp
modeleMetier= imp.load_source(nomCataXsd,pathCata)
- #print ('_________________________', modeleMetier)
except :
#else:
if self.appliEficas.ssIhm == False :print ('______________ poum import cata_genere ')
+ self.QWParent.informe('XSD driver', 'unable to load xsd driver',critique=False)
modeleMetier = None
else :
modeleMetier = None
self.cata.modeleMetier = modeleMetier
if not self.cata :
- try:
- from PyQt5.QtWidgets import QMessageBox, QDialog
- QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fichierCata)
- except :
- print ("Impossible d'importer le catalogue "+ self.fichierCata)
+ #try:
+ #from PyQt5.QtWidgets import QMessageBox, QDialog
+ #QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fichierCata)
+ #except :
+ # print ("Impossible d'importer le catalogue "+ self.fichierCata)
+ self.QWParent.informe("Catalogue","Impossible d'importer le catalogue "+ self.fichierCata)
self.appliEficas.close()
if self.appliEficas.salome == 0 :
sys.exit(1)
o=__import__(nom_cata)
return o
except Exception as e:
+ self.QWParent.informe('catalog', 'unable to load catalog file')
import traceback
traceback.print_exc()
return 0
contient le nom des mots cles dans le bon ordre
"""
self.cata_ordonne_dico, self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata)
- print ('_________________________________________', self)
- print (self.cata_ordonne_dico)
+ #print ('_________________________________________', self)
+ #print (self.cata_ordonne_dico)
#self.appliEficas.liste_simp_reel = ()
#self.cata_ordonne_dico = {}
if self.appliEficas.maConfiguration.ficIcones==None : return
try:
ficIcones=self.appliEficas.maConfiguration.ficIcones
- fichierIcones = __import__(ficIcones, globals(), locals(), [], -1)
+ fichierIcones = __import__(ficIcones, globals(), locals(), [], 0)
self.appliEficas.maConfiguration.dicoIcones=fichierIcones.dicoDesIcones.dicoIcones
self.appliEficas.maConfiguration.dicoImages=fichierIcones.dicoDesIcones.dicoImages
except:
# PNPN il faut remonter a l etape
-
+
+ def makeObjetPourVerifSignature(self,**args):
+ etape = self.class_instance(oper=self, args=args)
+ etape.MCBuild()
+ return etape
+
nomsd = self.nommage.getNomConceptResultat(self.nom)
etape = self.class_instance(oper=self, reuse=reuse, args=args)
etape.MCBuild()
+ etape.metAJourNomASSD(nomsd)
return etape.buildSd(nomsd)
def make_objet(self, mc_list='oui'):
Champ = OPER ( nom='Champ', sd_prod=champ,
SurLeMaillage = SIMP( statut='o', typ = maillage),
)
+ChampMultiple = OPER ( nom='ChampMultiple', sd_prod=champ,
+ SurLeMaillage2 = SIMP( statut='o', typ = maillage,max="**"),
+)
-#MaFonction = PROC( nom='MaFonction',
-# monArgument1 = SIMP( statut='o', typ = 'TXM'),
-# monArgument2 = SIMP( statut='f', typ = 'I'),
-#)
-#DefinitionListe = PROC( nom='DefinitionListe',
-# creeListe = SIMP( statut='f', typ = 'TXM',max='**'),
-# creeListe2 = SIMP( statut='f', typ = 'I',homo="SansOrdreNiDoublon",max='**', into=(1,2,3,4)),
-# creeListe3 = SIMP( statut='f', typ = 'I',max='**', into=(1,2,3,4)),
-#)
-#DefinitionFact = PROC (nom='DefinitionFact',
-# leFactRepetable = FACT ( max= '**',
-# unEntier = SIMP (statut='o', typ='I', defaut =1),
-# ),
-# leFactCompose = FACT (statut ='o',max='**',
-# unFactPart1 = SIMP (statut='o', typ='I', defaut =1),
-# unFactPart2 = SIMP (statut='o', typ='I', defaut =1),
-# )
-#)