From 6548125857fd513e3b8f9b9bcd17d68927f9bec7 Mon Sep 17 00:00:00 2001 From: PASCALE NOYRET Date: Tue, 1 Mar 2022 17:19:19 +0100 Subject: [PATCH] generator dico avec noms des concepts --- generator/generator_dico.py | 91 ++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 12 deletions(-) diff --git a/generator/generator_dico.py b/generator/generator_dico.py index 0b3eb71d..aa5acc75 100644 --- a/generator/generator_dico.py +++ b/generator/generator_dico.py @@ -63,6 +63,13 @@ class DicoGenerator(PythonGenerator): self.text=PythonGenerator.gener(self,obj,format) return self.text + def generDico(self,obj,format='brut',config=None,appliEficas=None): + + self.initDico() + # Cette instruction genere le contenu du fichier de commandes (persistance) + self.text=PythonGenerator.gener(self,obj,format) + return self.dicoComm + #---------------------------------------------------------------------------------------- # initialisations @@ -70,8 +77,8 @@ class DicoGenerator(PythonGenerator): def initDico(self) : - self.Dico={} - self.texteDico = "" + self.dicoComm={} + self.rang=0 #---------------------------------------------------------------------------------------- @@ -81,7 +88,7 @@ class DicoGenerator(PythonGenerator): def writeDefault(self,fn) : fileDico = fn[:fn.rfind(".")] + '.py' f = open( str(fileDico), 'w') - f.write('Dico = '+str(self.Dico)) + f.write('dicoComm = '+str(self.dicoComm)) f.close() #---------------------------------------------------------------------------------------- @@ -97,20 +104,80 @@ class DicoGenerator(PythonGenerator): objTraite=objTraite.parent if objTraite.nature == 'JDC' : break if objTraite.nature == 'BLOC' : continue - if objTraite.nature == 'OPERATEUR' : - if objTraite.sd.nom != None : listeParents.insert(0,objTraite.sd.nom) - else : listeParents.insert(0,'SD_non_nommee_erreur') + if objTraite.nature == 'OPERATEUR' or objTraite.nature == 'PROCEDURE' : + listeParents.insert(0,objTraite) elif objTraite.nature == 'MCList' : if len(objTraite.data > 1) : - monRang=objTraite.data.index(objTraite) - listeParents.insert(0,objTraite.nom+'_'+str(monRang)) + monRang=objTraite.data.index(objTraite) + listeParents.insert(0,objTraite.nom+'_'+str(monRang)) else : listeParents.insert(0,objTraite.nom) else : listeParents.insert(0,objTraite.nom) - courant=self.Dico - for p in listeParents: + courant=self.dicoComm + # On traite l etape pour ajouter le rang et la classe + etape=listeParents[0] + ordreId=etape.parent.etapes.index(etape) + if etape.nature == 'OPERATEUR' : + if not etape.sd.nom in courant.keys() : + courant[etape.sd.nom]={} + courant[etape.sd.nom]["@classeAccas"]= etape.nom + courant[etape.sd.nom]["@ordreAccas" ]= ordreId + courant=courant[etape.sd.nom] + else : + if not etape.nom in courant.keys() : + courant[etape.nom]={} + courant[etape.nom]["@classeAccas"]= etape.nom + courant[etape.nom]["@ordreAccas" ]= ordreId + courant=courant[etape.nom] + else : + if not(isinstance(courant[etape.nom], list)) : + laListe=[courant[etape.nom],] + courant[etape.nom]=laListe + newDict={} + newDict["@classeAccas"]= etape.nom + newDict["@ordreAccas" ]= ordreId + courant[etape.nom].append(newDict) + courant=newDict + for p in listeParents[1:]: if not (p in courant.keys()) : courant[p]={} courant=courant[p] - courant[obj.nom]=s - self.texteDico+=obj.nom+ "=" + s[0:-1]+ "\n" + # on transforme les concepts en nom + laValeur=self.transformeObjInRef(obj) + courant[obj.nom]=laValeur return s + def transformeObjInRef(self,obj) : + # cas d une matrice d ASSD + for ssType in obj.definition.type: + if hasattr(ssType,'typElt') : + if ssType.typElt not in ('R','I','C','TXM') : + # on a une matrice d ASSD + listeLigne=[] + for ligne in obj.val: + col=[] + for elt in ligne : + col.append(elt.nom) + listeLigne.append(col) + return listeLigne + if obj.nom == 'library_map' : print (type(obj.valeur)) + waitASSDTuple=0 + if type(obj.valeur) in (tuple,list) : + for ss_type in obj.definition.type: + if repr(ss_type).find('Tuple') != -1 : + if hasattr(ssType,'typeDesTuples') : + for t in ssType.typeDesTuples : + if t not in ('R','I','C','TXM') : + waitASSDTuple=1 + break + elif ss_type not in ('R','I','C','TXM'): + waitASSDTuple=1 + if waitASSDTuple : + listeRetour=[] + for elt in obj.val : + if hasattr(elt,'nom') : listeRetour.append(elt.nom) + else : listeRetour.append(elt) + return listeRetour + + if hasattr(obj.val,'nom') : listeRetour.append(obj.val.nom) + return obj.val + + -- 2.39.2