From 74f9904a0090276838882be6e1ac7e048d84d3e2 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Thu, 23 Sep 2021 18:03:21 +0200 Subject: [PATCH] partage Eric --- Editeur/Objecttreeitem.py | 22 ++++++ Efi2Xsd/AccasXsd.py | 2 +- InterfaceSsIhm/editorSsIhm.py | 12 +++- InterfaceWeb/browser.py | 93 +++++++++---------------- InterfaceWeb/compojdc.py | 17 +++-- InterfaceWeb/compomclist.py | 11 +++ InterfaceWeb/composimp.py | 3 + InterfaceWeb/editor.py | 20 +++++- Noyau/N_MCFACT.py | 1 + Noyau/N_MCSIMP.py | 1 + WebTest/cata_essai.py | 8 ++- WebTest/web_tres_simple.comm | 3 + WebTest/web_tres_simple_avec_2Fact.comm | 5 ++ WebTest/web_tres_simple_avec_Bloc.comm | 5 ++ WebTest/web_tres_simple_avec_Fact.comm | 4 ++ testFlask/cata_essai.py | 2 +- testFlask/connectEficas.py | 55 +++++++++++++-- 17 files changed, 186 insertions(+), 78 deletions(-) create mode 100644 WebTest/web_tres_simple.comm create mode 100644 WebTest/web_tres_simple_avec_2Fact.comm create mode 100644 WebTest/web_tres_simple_avec_Bloc.comm create mode 100644 WebTest/web_tres_simple_avec_Fact.comm diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 8b6fbbd6..e214b254 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -28,6 +28,7 @@ try : except : pass import types,os,glob,imp,sys +import uuid from copy import copy,deepcopy # import du chargeur de composants @@ -145,8 +146,12 @@ class Delegate(object): class ObjectTreeItem(TreeItem,Delegate): def __init__(self, appliEficas, labeltext, object, setFunction=None): + #print (object,'__init__ ObjectTreeItem',labeltext,) self.labeltext = labeltext self.appliEficas = appliEficas + # Attention appliEficas n est pas appliEficas c est le JDCEditor + # utilise par le Web + self.editor = appliEficas # L'objet delegue est stocke dans l'attribut object # L'objet associe a l'item est stocke dans l'attribut _object # Il peut etre obtenu par appel a la methode getObject @@ -161,6 +166,11 @@ class ObjectTreeItem(TreeItem,Delegate): self.expandable = 1 self.sublist=[] self.init() + # on met le meme id au noeud et a l objet + self.idUnique=uuid.uuid1().hex + self._object.idUnique=self.idUnique + # Ici on teste si Web + if hasattr (self.appliEficas,'dicoIdNode') : self.appliEficas.dicoIdNode[self.idUnique]=self def init(self): return @@ -425,6 +435,17 @@ class ObjectTreeItem(TreeItem,Delegate): sublist.append(item) return sublist + def getDicoObjetsPourWeb(self): + from collections import OrderedDict + monDico=OrderedDict() + for mc in self.mcListe : + nodeMC=self.editor.dicoIdNode[mc.idUnique] + if not mc.isMCList() : monDico[mc.idUnique]=nodeMC.getDicoObjetsPourWeb() + else : + for d in nodeMC.getDicoObjetsPourWeb() : + for i,k in d.items() : monDico[i]=k + return monDico + # a piori inutile PN 06 11 17 #def wait_fichier_init(self): """ Retourne 1 si l'object pointe par self attend un fichier d'initialisation @@ -510,3 +531,4 @@ class SequenceTreeItem(ObjectTreeItem): if old_obj is None and obj is None:break if old_obj is obj: self.sublist.append(item) return self.sublist + diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 0f63f0d2..80f61e3b 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -963,7 +963,7 @@ class X_SIMP (X_definition): if self.intoXML and self.into : if self.intoXML != self.into : #print ('je passe la pour ', self.nom) - texteAide :texteAide = texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n' + texteAide = texteAide+'\nPossible choices for '+ self.nom + 'at this place : \n'+str(self.into)+'\n' if self.defaut : if self.max > 1 or self.max == '**' or self.max == float('inf') : diff --git a/InterfaceSsIhm/editorSsIhm.py b/InterfaceSsIhm/editorSsIhm.py index 7c12bdda..6389a136 100755 --- a/InterfaceSsIhm/editorSsIhm.py +++ b/InterfaceSsIhm/editorSsIhm.py @@ -143,7 +143,6 @@ class JDCEditorSsIhm : if jdc==None : #print ('PNPN : chgt try en if') try : - #if 1 : self.jdc = self.readFile(self.fichier) except : print ("mauvaise lecture du fichier") @@ -348,6 +347,17 @@ class JDCEditorSsIhm : #print (dico) return dico + #--------------------------------# + def generDicoPourWeb(self,obj=None): + #--------------------------------# + if obj==None : obj=self.jdc + if 'dico' in generator.plugins: + self.generator=generator.plugins['dico']() + jdc_formate=self.generator.gener(self.jdc) + dico=self.generator.Dico + return dico + + #-----------------------# def viewJdcSource(self): #-----------------------# diff --git a/InterfaceWeb/browser.py b/InterfaceWeb/browser.py index a6a7833f..58304c94 100644 --- a/InterfaceWeb/browser.py +++ b/InterfaceWeb/browser.py @@ -35,51 +35,24 @@ from . import typeNode from Extensions.i18n import tr #from .gereRegles import GereRegles -class MainPage : pass #------------------------------------------ -#class JDCTree( MainPage,GereRegles ): -class JDCTree( MainPage ): +class JDCTree(): #------------------------------------------ - def __init__( self, jdc_item, QWParent): + def __init__( self, jdc_item, editor): #---------------------------------------- - self.editor = QWParent + print ('__init__ JDCTree') + self.editor = editor self.plie=False - #if self.editor.widgetTree !=None : - # QTreeWidget.__init__(self, self.editor.widgetTree ) - # self.editor.verticalLayout_2.addWidget(self) - # if self.editor.enteteQTree=='complet': - # self.headerItem().setText(0, "Commande ") - # self.headerItem().setText(1, "Concept/Valeur") - # else : - # self.headerItem().setText(0, "Commande ") - # self.setColumnWidth(0,200) - # self.setExpandsOnDoubleClick(False) - # self.setSelectionMode(3) - #else : - # QTreeWidget.__init__(self, None ) self.item = jdc_item self.tree = self self.appliEficas = self.editor.appliEficas - self.childrenComplete=[] self.racine=self.item.itemNode(self,self.item) - + print ('self.racine',self.racine) self.itemCourant=None - - #self.itemClicked.connect(self.handleOnItem) - #self.itemCollapsed.connect(self.handleCollapsedItem) - #self.itemExpanded.connect(self.handleExpandedItem) - self.node_selected = self.racine self.inhibeExpand = True - #self.expandItem(self.racine) - #self.inhibeExpand = False - #if self.racine.children !=[] : - # if self.editor.maConfiguration.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche() - # else : self.racine.children[0].deplieToutEtReaffiche() - # self.racine.children[0].fenetre.donnePremier() - #else : - # self.racine.affichePanneau() + self.childrenComplete=[] # def handleContextMenu(self,item,coord): #------------------------------------- @@ -95,11 +68,9 @@ class JDCTree( MainPage ): COMMENT = "COMMENTAIRE" PARAMETERS = "PARAMETRE" -class TreeItem : pass -#------------------------------------------ -#class JDCNode(TreeItem,GereRegles): -class JDCNode(TreeItem): -#------------------------------------------ +#--------------- +class JDCNode(): +#-------------- def __init__( self, treeParent, item, itemExpand=False, ancien=False ): #---------------------------------------------------------------------- #print ("creation d'un noeud : ", item, " ",item.nom,"", treeParent, self) @@ -111,7 +82,6 @@ class JDCNode(TreeItem): self.tree = self.treeParent.tree self.editor = self.treeParent.editor self.appliEficas = treeParent.appliEficas - self.JESUISOFF = 0 self.firstAffiche = True self.childrenComplete=[] @@ -134,18 +104,18 @@ class JDCNode(TreeItem): # self.plie = False # self.appartientAUnNoeudPlie = False - if ancien and itemExpand : self.plie = False - if ancien and not itemExpand : self.plie = True - if (isinstance(self.item,composimp.SIMPTreeItem)) : self.plie=False + #if ancien and itemExpand : self.plie = False + #if ancien and not itemExpand : self.plie = True + #if (isinstance(self.item,composimp.SIMPTreeItem)) : self.plie=False - from . import compobloc - from . import compomclist + #from . import compobloc + #from . import compomclist - ajoutAuParentduNoeud=0 - while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) : - self.treeParent.childrenComplete.append(self) - self.treeParent=self.treeParent.vraiParent - self.treeParent.childrenComplete.append(self) + #ajoutAuParentduNoeud=0 + #while (isinstance(self.treeParent,compobloc.Node) or ( isinstance(self.treeParent,compomclist.Node) and self.treeParent.item.isMCList())) : + # self.treeParent.childrenComplete.append(self) + # self.treeParent=self.treeParent.vraiParent + #self.treeParent.childrenComplete.append(self) #if (isinstance(self,compobloc.Node) or (isinstance(self,compomclist.Node) and self.item.isMCList()) or ( hasattr(self.item.parent,'inhibeValidator') and isinstance(self,compomclist.Node) and self.item.parent.inhibeValidator)) : @@ -175,12 +145,12 @@ class JDCNode(TreeItem): self.state="" self.fenetre=None - try : - if self.item.getObject().isBLOC() : - self.setExpanded(True) - self.plie=False - except : - pass + #try : + # if self.item.getObject().isBLOC() : + # self.setExpanded(True) + # self.plie=False + #except : + # pass def buildChildren(self,posInsertion=10000): @@ -219,12 +189,15 @@ class JDCNode(TreeItem): #print ("fin *********** buildChildren ",self,self.item, self.item.nom, self.children) - def chercheNoeudCorrespondant(self,objSimp): + def getDicoObjetsPourWeb(self): + return self.item.getDicoObjetsPourWeb() + + #def chercheNoeudCorrespondant(self,objSimp): #------------------------------------------- - sublist = self.item._getSubList() - for node in self.childrenComplete: - if node.item.object==objSimp : return node - return None + # sublist = self.item._getSubList() + # for node in self.childrenComplete: + # if node.item.object==objSimp : return node + # return None #def afficheCeNiveau(self): #------------------------- #def getPanelModifie(self): diff --git a/InterfaceWeb/compojdc.py b/InterfaceWeb/compojdc.py index 3c9e5a39..3a50a225 100644 --- a/InterfaceWeb/compojdc.py +++ b/InterfaceWeb/compojdc.py @@ -66,11 +66,6 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem): else: return "ast-red-square" - #def keys(self): - # if self.object.etapes_niveaux != []: - # return range(len(self.object.etapes_niveaux)) - # else: - # return range(len(self.object.etapes)) def addItem(self,name,pos): cmd = self._object.addEntite(name,pos) @@ -130,6 +125,18 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem): listeCmd = self.object.niveau.definition.getListeCmd() return listeCmd + def getValidite(self): + return self.object.isValid() + + def getDicoObjetsPourWeb(self): + from collections import OrderedDict + monDico=OrderedDict() + for e in self.object.etapes : + nodeEtape=self.editor.dicoIdNode[e.idUnique] + monDico[e.idUnique]=nodeEtape.getDicoObjetsPourWeb() + return monDico + + import Accas treeitem =JDCTreeItem objet = Accas.JDC diff --git a/InterfaceWeb/compomclist.py b/InterfaceWeb/compomclist.py index 5d74def0..95af7fd5 100644 --- a/InterfaceWeb/compomclist.py +++ b/InterfaceWeb/compomclist.py @@ -96,6 +96,17 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): else: self.setDelegate(self._object.data[0]) + def getDicoObjetsPourWeb(self): + listeDict=[] + from collections import OrderedDict + for i in self._object.data: + monDico=OrderedDict() + nodeFact=self.appliEficas.dicoIdNode[i.idUnique] + monDico[i.idUnique]=nodeFact.getDicoObjetsPourWeb() + listeDict.append(monDico) + return listeDict + + def panel(self,jdcdisplay,pane,node): """ Retourne une instance de l'objet panneau associe a l'item (self) Si la liste ne contient qu'un mot cle facteur, on utilise le panneau diff --git a/InterfaceWeb/composimp.py b/InterfaceWeb/composimp.py index 8b047566..7350cfef 100644 --- a/InterfaceWeb/composimp.py +++ b/InterfaceWeb/composimp.py @@ -434,6 +434,9 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): liste_param.append(param.nom) return liste_param + def getDicoObjetsPourWeb(self): + return self.val + #-------------------------------------------------- # # Methodes liees a la validite des valeurs saisies diff --git a/InterfaceWeb/editor.py b/InterfaceWeb/editor.py index 18126586..14b7e10b 100755 --- a/InterfaceWeb/editor.py +++ b/InterfaceWeb/editor.py @@ -30,6 +30,7 @@ from Extensions.i18n import tr from Editeur import session from Editeur import comploader from Editeur import Objecttreeitem +from . import browser debug = False @@ -38,18 +39,31 @@ from InterfaceSsIhm.editorSsIhm import JDCEditorSsIhm class JDCWebEditor(JDCEditorSsIhm): -# ----------------------------------------- # +# ------------------------------- # """ Editeur de jdc """ def __init__ (self,appliEficas,fichier = None, jdc=None ): - #------------------------------------------------------------------------------------------------ + #---------------------------------------------------------- JDCEditorSsIhm.__init__(self,appliEficas,fichier) + self.dicoIdNode={} comploader.chargerComposants(Ihm='Web') + self.tree=None if self.jdc: self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc ) + if self.jdc_item : + self.tree = browser.JDCTree( self.jdc_item, self ) - + def getNodeById(self,id ): + #---------------------------- + if id in self.dicoIdNode : return self.dicoIdNode[id] + else : return None + + + def getDicoObjetsPourWeb(self,obj) : + #----------------------------------- + if self.tree == None : return {} + return obj.getDicoObjetsPourWeb() diff --git a/Noyau/N_MCFACT.py b/Noyau/N_MCFACT.py index a1fc0c72..3b43260f 100644 --- a/Noyau/N_MCFACT.py +++ b/Noyau/N_MCFACT.py @@ -26,6 +26,7 @@ from __future__ import absolute_import from . import N_MCCOMPO +import uuid class MCFACT(N_MCCOMPO.MCCOMPO): diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index 046d2d08..5f70ee84 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -32,6 +32,7 @@ from Noyau.N_CO import CO from . import N_OBJECT from .N_CONVERT import ConversionFactory from .N_types import forceList, isSequence +import uuid class MCSIMP(N_OBJECT.OBJECT): diff --git a/WebTest/cata_essai.py b/WebTest/cata_essai.py index 2b05627c..642cf91a 100644 --- a/WebTest/cata_essai.py +++ b/WebTest/cata_essai.py @@ -10,7 +10,11 @@ MonProc = PROC(nom='MonProc', ) MonProc2 = PROC(nom='MonProc2', param1 = SIMP(statut='o',typ='R'), - param2 = SIMP(statut='o',typ='R'), - param3 = SIMP(statut='o',typ='R'), + b1 = BLOC (condition = 'param1 == 2', + param2 = SIMP(statut='o',typ='R'), + ), + Fact1 = FACT (statut ='o', max=2, + param3 = SIMP(statut='o',typ='R'), + ), ) diff --git a/WebTest/web_tres_simple.comm b/WebTest/web_tres_simple.comm new file mode 100644 index 00000000..847e3922 --- /dev/null +++ b/WebTest/web_tres_simple.comm @@ -0,0 +1,3 @@ + +MonProc(param1=1.0,); +#CHECKSUM:b556c522b90166837f3034518e10b4a4 -:FIN CHECKSUM \ No newline at end of file diff --git a/WebTest/web_tres_simple_avec_2Fact.comm b/WebTest/web_tres_simple_avec_2Fact.comm new file mode 100644 index 00000000..0acc7ea1 --- /dev/null +++ b/WebTest/web_tres_simple_avec_2Fact.comm @@ -0,0 +1,5 @@ + +MonProc2(param1=1.0, + Fact1=(_F(param3=43.0,), + _F(param3=44.0,),),); +#CHECKSUM:d9c8c4a30d485f4a75371c76b16999b6 -:FIN CHECKSUM \ No newline at end of file diff --git a/WebTest/web_tres_simple_avec_Bloc.comm b/WebTest/web_tres_simple_avec_Bloc.comm new file mode 100644 index 00000000..619fe85e --- /dev/null +++ b/WebTest/web_tres_simple_avec_Bloc.comm @@ -0,0 +1,5 @@ + +MonProc2(param1=2.0, + param2=42.0, + Fact1=_F(param3=43.0,),); +#CHECKSUM:aee450b5fd522f0492692beed1341b4d -:FIN CHECKSUM \ No newline at end of file diff --git a/WebTest/web_tres_simple_avec_Fact.comm b/WebTest/web_tres_simple_avec_Fact.comm new file mode 100644 index 00000000..98ec1df0 --- /dev/null +++ b/WebTest/web_tres_simple_avec_Fact.comm @@ -0,0 +1,4 @@ + +MonProc2(param1=1.0, + Fact1=_F(param3=2.0,),); +#CHECKSUM:361a5586857360c9841b2d609b4d97a2 -:FIN CHECKSUM \ No newline at end of file diff --git a/testFlask/cata_essai.py b/testFlask/cata_essai.py index ceaca22d..47fae4e1 120000 --- a/testFlask/cata_essai.py +++ b/testFlask/cata_essai.py @@ -1 +1 @@ -/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/cata_essai.py \ No newline at end of file +../WebTest/cata_essai.py \ No newline at end of file diff --git a/testFlask/connectEficas.py b/testFlask/connectEficas.py index 1ce58d00..c707626a 100755 --- a/testFlask/connectEficas.py +++ b/testFlask/connectEficas.py @@ -28,6 +28,7 @@ import os, sys sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')) sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../Editeur')) +from collections import OrderedDict if sys.version_info[0] < 3: @@ -41,20 +42,44 @@ class accasConnecteur : self.code=code from InterfaceSsIhm.qtEficasSsIhm import AppliSsIhm self.monEficas=AppliSsIhm(code=code, salome=0, multi=False, langue=langue,fichierCata=fichierCata) + # Si on permet l ouverture simultanee de plusieurs fichiers il faudra + # faire l equivalent du viewmanager + self.litFichierComm(fichierComm) + # est-ce que id est suffisament unique ? + # est-ce que cela ne va pa empecher le gc de faire son job ? + + def litFichierComm(self,fichierComm=None): from InterfaceWeb.editor import JDCWebEditor self.monEditeur=JDCWebEditor(self.monEficas,fichierComm) def getListeCommandes(self): - print ('getListeCommandes', self.monEditeur.jdc.getListeCmd()) return (self.monEditeur.jdc.getListeCmd()) def getListeMotsClesFilsPossibles(self,nomCommande): # ici il faut programmer getListeMotsClesFilsPossibles dans N_ENTITE - # et faire une boucle infinie en jinja 2 + # Pour l instant on renvoie entites + # doit aussi pouvoir etre appele sur FACT et BLOC maCommande= getattr(self.monEditeur.jdc.cata,nomCommande) laListe=maCommande.entites - print (dir(maCommande)) return laListe + + def generDicoPourWeb(self) : + dico=self.monEditeur.generDicoPourWeb() + return dico + + def getDicoObjetsPourWeb(self,obj) : + dico=self.monEditeur.getDicoObjetsPourWeb(obj) + return dico + + def traiteDico(self,dico): + for k,v in dico.items(): + monNode=self.monEditeur.getNodeById(k) + try : print ('label', monNode.getLabelText()) + except : print ('monNode', monNode) # non operationnel pour jdc + try : print ('validite :', monNode.isValid()) + except : pass # non operationnel pour jdc + if type(v) is OrderedDict : self.traiteDico(v) + else : print ('valeur :', v) if __name__ == "__main__": @@ -64,6 +89,26 @@ if __name__ == "__main__": code=prefs.code monEficasConnecteur=accasConnecteur(code, langue='ang') print ( 'voici le connecteur', monEficasConnecteur) - print ( 'et les commandes', monEficasConnecteur.getListeCommandes()) - print ( 'et les fils de MonProc2', monEficasConnecteur.getListeMotsClesFils('MonProc2')) + print ( 'et les commandes', monEficasConnecteur.getListeCommandes(),'\n') + + #print ( '\n Fichier /home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple.comm') + #monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple.comm') + #print (monEficasConnecteur.generDicoPourWeb()) + #print (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine)) + #print ('\n') + + #monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple_avec_Bloc.comm') + #print (monEficasConnecteur.generDicoPourWeb()) + #print (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine)) + #print ('\n') + + monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple_avec_2Fact.comm') + print (monEficasConnecteur.generDicoPourWeb()) + monDicoAAfficher = (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine)) + monEficasConnecteur.traiteDico(monDicoAAfficher) + + #monEficasConnecteur.litFichierComm('/home/A96028/QT5GitEficasTravail/Web/eficas/WebTest/web_tres_simple_avec_Fact.comm') + #print (monEficasConnecteur.generDicoPourWeb()) + #print (monEficasConnecteur.getDicoObjetsPourWeb(monEficasConnecteur.monEditeur.tree.racine)) + #print ('\n') -- 2.39.2