]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
1ere version avec les ASSD ds une matrice
authorpascale.noyret <pascale.noyret@edf.fr>
Wed, 28 Apr 2021 09:49:58 +0000 (11:49 +0200)
committerpascale.noyret <pascale.noyret@edf.fr>
Wed, 28 Apr 2021 09:49:58 +0000 (11:49 +0200)
Accas/A_TUPLE.py
Accas/__init__.py
Efi2Xsd/AccasXsd.py
Ihm/I_MCSIMP.py
InterfaceQT4/monWidgetFact.py
InterfaceQT4/monWidgetMatrice.py
Noyau/N_TUPLE.py [new file with mode: 0644]
generator/generator_python.py

index cdc2e7da64c470b00c10c23bb47ab661ec39dfc3..c9564e282e3a3f949931cbcb0bb33c811d3842fb 100644 (file)
@@ -1,15 +1,6 @@
-import types
-class Tuple:
-    def __init__(self,ntuple):
-        self.ntuple=ntuple
+#
+from __future__ import absolute_import
+from Noyau import N_TUPLE
 
-    def __convert__(self,valeur):
-        try:
-            if isinstance(valeur, basestring) : return None
-        except NameError:
-            if isinstance(valeur, str): return None
-        if len(valeur) != self.ntuple: return None
-        return valeur
-
-    def info(self):
-        return "Tuple de %s elements" % self.ntuple
+class Tuple (N_TUPLE.N_Tuple): pass
+class Matrice(N_TUPLE.N_Matrice): pass
index 64f3079eee0f9f165a051bfd9c03a62186c287b5..8b3a5f96fe008fa8e67992bc4a4bfb378cdc3a3a 100644 (file)
@@ -45,6 +45,7 @@ from .A_SIMP     import SIMP
 from .A_EVAL     import EVAL
 from .A_NUPLET   import NUPL
 from .A_TUPLE    import Tuple
+from .A_TUPLE    import Matrice
 
 
 from .A_JDC         import JDC
index 1af0889be3832c3509434855091093b83361089c..f1cc9e7e098bc1c7fe1fbdf9f4186be6b13692ea 100755 (executable)
@@ -1026,6 +1026,8 @@ class X_SIMP (X_definition):
         if hasattr(self.type[0], 'typElt') : 
             #print ('je suis une Matrice de ' ,dictNomsDesTypes[self.type[0].typElt]) 
             self.suisUneMatrice = True
+            # on presume que le type de l elt est un ASSD
+            if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string'
             return dictNomsDesTypes[self.type[0].typElt] 
         else :
             self.suisUneMatrice = False
index 1883e1bbdfa7921bd22aa7c95266a00b5f4098d5..aa0c45eaa6df11b4e87a6cd7ab859682b217ab94 100644 (file)
@@ -58,7 +58,8 @@ class MCSIMP(I_OBJECT.OBJECT):
         if self.state == 'unchanged':
             return self.valid
         for type_permis in self.definition.type:
-            if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
+            #if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
+            if hasattr(type_permis, "typElt") :
                 self.monType=type_permis
                 return self.valideMatrice(cr=cr)
         validite=Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr)
@@ -736,33 +737,37 @@ class MCSIMP(I_OBJECT.OBJECT):
 
     def valideMatrice(self,cr):
         ok=1
+        commentaire =''
         if self.valeur == None :
             self.setValid(0)
             return 0
+
         if self.monType.methodeCalculTaille != None :
             MCSIMP.__dict__[self.monType.methodeCalculTaille](*(self,))
+
         if len(self.valeur) == self.monType.nbLigs :
             for i in range(len(self.valeur)):
                 if len(self.valeur[i]) != self.monType.nbCols: ok=0
+        else : ok=0
+
         if not ok :
             self.setValid(0)
             if cr == 'oui' :
                 self.cr.fatal(tr("La matrice n'est pas une matrice %(n_lign)d sur %(n_col)d", \
                 {'n_lign': self.monType.nbLigs, 'n_col': self.monType.nbCols}))
             return 0
+
         for i in range(self.monType.nbLigs):
             for j in range(self.monType.nbCols):
                 val=self.valeur[i][j]
-                if self.monType.typElt == 'R' :
-                    try    : val=float(str(val))
-                    except : ok=0
-                if self.monType.typElt == 'TXM' :
-                    if self.monType.typEltInto != None and val not in self.monType.typEltInto : ok=0
-        if not ok :
-            self.setValid(0)
-            if cr == 'oui' :
-                self.cr.fatal(tr("Les elements de la matrice ne sont pas d un bon type"))
-            return 0
+                ok, commentaire = self.monType.verifItem(str(val),self.parent)
+                if self.monType.typElt not in ('TXM','I','R') and type(val) != self.monType.typElt : 
+                   ok=0; commentaire = 'mauvais type'; self.valeur=None
+                if not ok :
+                    self.setValid(0)
+                    if cr == 'oui' :
+                       self.cr.fatal(tr(commentaire))
+                    return 0
         self.setValid(1)
         return 1
 
index 74b43bdd63290ca8aab4d4e6e461c2c9fa6a1099..8bf1c5dc283ff64be47ecc37106ca3eb72f66197 100644 (file)
@@ -35,7 +35,7 @@ class MonWidgetFactCommun(Groupe):
     """
     """
     def __init__(self,node,editor,parentQt,definition, obj, niveau,commande):
-        print ("fact : ",node.item.nom)
+        #print ("fact : ",node.item.nom)
         Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande)
         labeltext,fonte,couleur = self.node.item.getLabelText()
         self.GroupBox.setText(tr(labeltext))
index f284026ffd96e88a1dcbf119fdcdde19f5d9ba91..0edff3a8a99b3f537d292d479eed598dfd379201 100644 (file)
@@ -30,6 +30,7 @@ import types,os,sys
 # Modules Eficas
 from Extensions.i18n import tr
 from .feuille         import Feuille
+from Extensions.eficas_exception import EficasException
 
 
 from desWidgetMatrice  import Ui_desWidgetMatrice
@@ -62,7 +63,7 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
 
     def monFocusOutEvent(self,event):
         self.acceptVal()
-        QTableWidget.focusInEvent(self.TBMatrice,event)
+        QTableWidget.focusOutEvent(self.TBMatrice,event)
 
 
     def itemChanged(self):
@@ -70,30 +71,11 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
         if monItem==None : return
         texte=monItem.text()
         if texte=="" : return
-        if self.monType.typElt == 'R' :
-            try    : val=float(str(texte)); ok=True
-            except : ok=False
-            if ok == False :
-                self.editor.afficheInfos(tr("Entrer un float SVP"),Qt.red)
-                monItem.setText("")
-                return
-            if self.monType.valSup != None :
-                if val > self.monType.valSup :
-                    self.editor.afficheInfos(tr("Entrer un float inferieur a ") + repr(self.monType.valSup),Qt.red)
-                    monItem.setText("")
-                    return
-            if self.monType.valMin != None :
-                if val < self.monType.valMin :
-                    self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red)
-                    monItem.setText("")
-                    return
-            self.editor.afficheInfos("")
-            if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,))
-        if self.monType.typElt == 'TXM' :
-            if self.monType.typEltInto != None and texte not in self.monType.typEltInto :
-                self.editor.afficheInfos(tr("Entrer une valeur qui est ") + str(self.monType.typEltInto),Qt.red)
-                monItem.setText("")
-                return
+        boolOk, commentaire = self.monType.verifItem(texte,self.node.item.object)
+        if not boolOk :
+            self.editor.afficheInfos(tr(commentaire),Qt.red)
+            monItem.setText("")
+            return
 
 
     def creeColonnes(self):
@@ -138,10 +120,8 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
                 monItem=self.TBMatrice.item(i,j)
                 if monItem : texte=monItem.text()
                 else       : texte = ''
-                if self.monType.typElt == 'R' :
-                    try    : val=float(str(texte))
-                    except : val=None
-                val=texte
+                if texte != '' : val=self.monType.convertItem(texte)
+                else : val = None
                 listeCol.append(val)
             liste.append(listeCol)
         self.node.item.setValeur(liste)
diff --git a/Noyau/N_TUPLE.py b/Noyau/N_TUPLE.py
new file mode 100644 (file)
index 0000000..f993939
--- /dev/null
@@ -0,0 +1,82 @@
+import types
+import Accas
+import inspect
+class N_Tuple:
+    def __init__(self,ntuple):
+        self.ntuple=ntuple
+
+    def __convert__(self,valeur):
+        try:
+            if isinstance(valeur, basestring) : return None
+        except NameError:
+            if isinstance(valeur, str): return None
+        if len(valeur) != self.ntuple: return None
+        return valeur
+
+    def info(self):
+        return "Tuple de %s elements" % self.ntuple
+
+class N_Matrice:
+    def __init__(self, nbLigs=None, nbCols=None,
+                 methodeCalculTaille=None, formatSortie="ligne",
+                 valSup=None, valMin=None, structure=None, typElt='R',
+                 typEltInto=None, listeHeaders=None):
+        self.nbLigs = nbLigs
+        self.nbCols = nbCols
+        self.methodeCalculTaille = methodeCalculTaille
+        self.formatSortie = formatSortie
+        self.valSup = valSup
+        self.valMin = valMin
+        self.structure = structure
+        self.typElt = typElt
+        self.listeHeaders = listeHeaders
+        self.typEltInto = typEltInto
+        self.jdc=None
+
+    def __convert__(self, valeur):
+        # Attention ne verifie pas grand chose
+        if not isinstance(valeur, types.ListType):
+            return None
+        return valeur
+
+    def verifItem(self,texte,mc):
+        val=''
+        if self.typElt == 'R' :
+            try    : val=float(str(texte)); ok=True
+            except : return (False,"Entrer un float SVP")
+        if self.typElt == 'I' :
+            try    : val=int(str(texte)); ok=True
+            except : return (False,"Entrer un float SVP")
+        if self.typElt in ('R', 'I') and self.valSup != None :
+            if val > self.valSup :
+               return (False, "Entrer un nombre inferieur a " + repr(self.valSup))
+        if self.typElt in ('R', 'I') and self.valMin != None :
+            if val < self.valMin :
+               return (False, "Entrer un nombre superieur a " + repr(self.valMin))
+        if val=='' : val = texte
+        if self.typEltInto != None and val not in self.typEltInto :
+                return ( "Entrer une valeur contenue dans " + str(self.typEltInto))
+        try :
+           if issubclass (self.typElt, Accas.ASSD):
+              if not self.jdc : self.jdc = CONTEXT.getCurrentJdC()
+              if not(val in self.jdc.sdsDict.keys()) : return (False, 'Concept inexistant')
+              if not (isinstance(self.jdc.sdsDict[val],self.typElt)) : return (False, 'Concept d un autre type')
+              a=self.jdc.getSdAvantDuBonType(mc.etape,(self.typElt,))
+              if texte not in self.jdc.getSdAvantDuBonType(mc.etape,(self.typElt,)) : 
+                 return (False, 'Le concept doit etre defini avant')
+        except :
+              pass
+        return ( True, "")
+
+    def convertItem(self,texte):
+        if self.typElt == 'R' : val=float(str(texte))
+        if self.typElt == 'I' : val=int(str(texte))
+        if issubclass (self.typElt, Accas.ASSD): return self.jdc.sdsDict[texte]
+
+
+    def info(self):
+        return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+    __repr__ = info
+    __str__ = info
+
index d4432d08a7933133c49da03c98db598c95f75f19..d8623e910cf81b3fdc2fce92b0004ebae50ff82f 100644 (file)
@@ -569,26 +569,35 @@ class PythonGenerator(object):
             syntaxe python
         """
         waitTuple=0
+        waitMatriceDASSD=0
         if type(obj.valeur) in (tuple,list) :
             s = ''
             for ss_type in obj.definition.type:
                 if repr(ss_type).find('Tuple') != -1 :
                     waitTuple=1
                     break
+                if hasattr(ss_type,'typElt'):
+                    if ss_type.typElt not in ('TXM','I','R') : waitMatriceDASSD=1
 
             if waitTuple :
                 #s = str(obj.valeur) +','
                 #obj.valeurFormatee=obj.valeur
                 s = obj.getText() +','
                 obj.valeurFormatee=obj.getText()
+            elif waitMatriceDASSD :
+                s=s+'('
+                for lines in obj.valeur : 
+                    s=s+'('
+                    for elt in lines :
+                        s=s+elt.nom+','
+                    s=s+'),'
+                s=s+'),'
             else :
                 obj.valeurFormatee=[]
                 for val in obj.valeur :
                     s =s +self.formatItem(val,obj.etape,obj,1) + ','
-                    if obj.waitTxm() :
-                        obj.valeurFormatee.append(val)
-                    else :
-                        obj.valeurFormatee.append(self.formatItem(val,obj.etape,obj))
+                    if obj.waitTxm() : obj.valeurFormatee.append(val)
+                    else : obj.valeurFormatee.append(self.formatItem(val,obj.etape,obj))
                 if len(obj.valeur) >= 1:
                     s = '(' + s + '),'
                 if obj.valeur==[] or obj.valeur==() : s="(),"