]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
fin projetction cataRN avant passage des tests Accas--> XSD
authorPASCALE NOYRET <pascale.noyret@edf.fr>
Thu, 24 Mar 2022 14:36:20 +0000 (15:36 +0100)
committerEric Fayolle <eric.fayolle@edf.fr>
Fri, 8 Apr 2022 08:44:07 +0000 (10:44 +0200)
Editeur/session.py
Efi2Xsd/AccasXsd.py
Efi2Xsd/MCAccasXML.py
Efi2Xsd/balisesXSD.py
InterfaceQT4/editor.py
InterfaceQT4/editorSsIhm.py
InterfaceQT4/monWidgetMatrice.py
Validation/V_MCSIMP.py

index 2fd87c62475a92da8481fac43fdc904b1360f5c2..7a415370901a2a0afbf1d3838200bbdf6c6a9d32 100644 (file)
@@ -264,7 +264,7 @@ def createparser():
     parser.add_option(u"-c","--cata", action="store", type="string",dest="fichierCata",
                   help=tr("catalogue a utiliser"))
 
-    parser.add_option(u"-o","--fichierXMLOut", action="store", type="string",dest="fichierXMLOut",
+    parser.add_option(u"-o","--fichierOut", action="store", type="string",dest="fichierOut",
                   help=tr("nom du fichier xml genere"))
 
     parser.add_option(u"-v","--label", action="store", type="string",dest="labelCode",
@@ -302,7 +302,7 @@ def parse(args):
         options.comm=[]
     if not hasattr(options,"fichierCata"): options.fichierCata=None
     if not hasattr(options,"labelCode"): options.labelCode=None
-    if not hasattr(options,"fichierXMLOut"): options.fichierXMLOut=None
+    if not hasattr(options,"fichierOut"): options.fichierOut=None
     if options.withXSD :
         try : import pyxb
         except : print ('Please, source pyxb environment'); exit()
index bfc0fe6bc3ea32efdbb3cc52ab826b2bb812baa9..c85ea6e339c20c2324b7bc49edf01c45aa5fa399 100755 (executable)
@@ -411,7 +411,7 @@ class X_compoFactoriseAmbigu(X_definition):
 
 
     def ajouteAuxTextes(self,nomMC,indent,debug=False) :
-        if nomMC == 'radial_meshing' : debug =True
+        #if nomMC == 'radial_meshing' : debug =True
         if debug : 
            print ('______________________________________________________')
            print ('ajouteAuxTextes', nomMC, self.nom)
@@ -564,7 +564,7 @@ class X_compoFactoriseAmbigu(X_definition):
         #   print (self.texteSimple)
         #   print ('______________')
 
-    def fusionneDsUnChoix(self, nomMC,indent, debug=True):
+    def fusionneDsUnChoix(self, nomMC,indent, debug=False):
         if debug : print ('______fusionneDsUnChoix ', self.nom, self, nomMC,indent)
         if debug : print (self.texteComplexe)
         texteDocUnion='\n'
@@ -633,6 +633,7 @@ class X_compoFactoriseAmbigu(X_definition):
         if debug : 
            #print ('fusionneDesMatricesDeMemeType self.texteSimple avant', self.texteSimple)
            print ('fusionneDesMatricesDeMemeType self.texteComplexe avant', self.texteComplexe)
+# if 
         self.texteSimple  += debutSimpleType.format(elt.nomDuTypePyxb+'_element')
         self.texteSimple  += debutRestrictionBase.format(elt.nomDuTypeDeBase)
         if typeDeMatrice.typEltInto != None:
@@ -671,7 +672,6 @@ class X_definitionComposee (X_definition):
         #for nom in self.ordre_mc:
         #  mcFils = self.entites[nom]
         if debug : print ('___________________ creeTexteComplexeVenantDesFils', self.nom)
-        if self.nom == 'LeProc' : debug = True
         for mcFils in self.mcXSD :
             if debug : print (mcFils,mcFils.nom)
             else : debug=False
@@ -1218,6 +1218,7 @@ class X_SIMP (X_definition):
               
 
     def dumpSpecifiqueMatrice(self,minOccurs):
+    # ajouter le AccasAssd
     # if faut traiter le defaut
         typeDeMatrice =self.type[0]
 
@@ -1247,14 +1248,17 @@ class X_SIMP (X_definition):
         # il faut ajouter les regles
         # il faut gerer les types tuple et fichier
         # on ne paut pas tester le type qui depend du cataloge
+        if self.nom == "assembly_list" : debug=True
         if hasattr(self.type[0], 'typElt') : 
+            if debug : print ( self.nom , 'est une matrice')
             self.suisUneMatrice = True
-            # on presume que le type de l elt est un ASSDi si il n est pas un type connu
-            if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string'
+            # on presume que le type de l elt est un ASSD si il n est pas un type connu
+            if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'AccasAssd'
             return dictNomsDesTypes[self.type[0].typElt] 
         else :
             self.suisUneMatrice = False
         if hasattr(self.type[0], 'ntuple') :
+            if debug : print ( self.nom , 'est un tuple')
             self.suisUnTuple = True
             # Pour l instant pas de into dans les tuples non homogenes et pas de reference
             # sinon, il faudra faire un for sur la suite avec les createObjet
@@ -1265,7 +1269,7 @@ class X_SIMP (X_definition):
                 # a Reprendre
                 typeATraduire = self.validators.typeDesTuples[i]
                 if not (typeATraduire in list(dictNomsDesTypes.keys())) :
-                   enRetour.append('xs:string')
+                   enRetour.append('AccasAssd')
                 else : 
                     enRetour.append(dictNomsDesTypes[self.validators.typeDesTuples[i]])
             return enRetour
@@ -1275,7 +1279,9 @@ class X_SIMP (X_definition):
             typeATraduire=self.type[0]
         if not (typeATraduire in list(dictNomsDesTypes.keys())) :
             #if (isinstance(typeATraduire, Accas.ASSD) or issubclass(typeATraduire, Accas.ASSD)) :
+            if debug : print ( self.nom , 'n est pas un type de base')
             if (not(isinstance(typeATraduire,str)) and issubclass(typeATraduire, Accas.ASSD)) :
+                if debug : print ( self.nom , 'est d un type sous classe de ASSD')
             # cas d une creation
                 cata = CONTEXT.getCurrentCata()
                 # PNPNPN a Revoir pour la creation des keyrefs
@@ -1285,6 +1291,7 @@ class X_SIMP (X_definition):
                     else :
                         cata.dictTypesASSDorUserASSDCrees[typeATraduire.__name__].append(self)
                     if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_C'
+                    if issubclass(typeATraduire, Accas.ASSD) : return 'AccasAssd' 
                     else : return  'xs:string'
 
                 # cas d une consommation
@@ -1293,6 +1300,7 @@ class X_SIMP (X_definition):
                 else :
                     cata.dictTypesASSDorUserASSDUtilises[typeATraduire].append(self,)
                 if issubclass(typeATraduire, Accas.UserASSD) : return typeATraduire.__name__+'_U'
+                if issubclass(typeATraduire, Accas.ASSD) : return 'AccasAssd' 
                 else : return  'xs:string'
             else : return ('YYYYY')
         return dictNomsDesTypes[typeATraduire]
@@ -1337,7 +1345,7 @@ class X_SIMP (X_definition):
 class X_JDC_CATA :
 #-----------------
 
-    def dumpXsd(self, avecEltAbstrait,  debug = True):
+    def dumpXsd(self, avecEltAbstrait,  avecSubstitution=True, debug = True):
         cata = CONTEXT.getCurrentCata()
         if debug : print ('avecEltAbstrait   -------------------', avecEltAbstrait)
         if debug : print ('self.importedBy -------------------', self.importedBy)
@@ -1390,6 +1398,8 @@ class X_JDC_CATA :
         else :
             self.texteXSD  = texteDebut.format(self.code,self.code,self.code,self.code,self.code,self.code)
  
+       
+        self.texteXSD += defBaseXSDASSD
         self.texteXSD += self.texteSimple
         self.texteXSD += self.texteComplexe
 
index a2aea67e87a6876928e32f91704def9511641fe0..02bf2e8108e57adff9fb1a27b01c98d89a38eb73 100755 (executable)
@@ -511,7 +511,7 @@ class X_JDC (X_MCCOMPO):
         #print ('monUri', monUri)
         #pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, monUri)
 
-        ns1 = pyxb.namespace.Namespace("http://www.w3.org/2001/XMLSchema-instance")
+        ns1 = pyxb.namespace.NamespaceForURI("http://www.w3.org/2001/XMLSchema-instance",True)
         pyxb.utils.domutils.BindingDOMSupport.DeclareNamespace(ns1, 'xsi')
         texteXML  = self.objPyxb.toDOM().toprettyxml()
         if debug : print (texteXML)
@@ -527,6 +527,9 @@ class X_JDC (X_MCCOMPO):
         if not hasattr(self.cata.modeleMetier,'AccasUserAssd'):
             from Accas import UserASSD
             self.cata.modeleMetier.AccasUserAssd=UserASSD
+        if not hasattr(self.cata.modeleMetier,'AccasUserAssdMultiple'):
+            from Accas import UserASSDMultiple
+            self.cata.modeleMetier.AccasUserAssdMultiple=UserASSDMultiple
         for contentObjEtape in self.objPyxb.orderedContent():
             objEtape=contentObjEtape.value
             objEtape.dictArgs=(self.pyxbToDict(objEtape))
@@ -552,26 +555,29 @@ class X_JDC (X_MCCOMPO):
             if debug : print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh')
 
 
-    def pyxbToDict(self,objAAnalyser, debug=True):
+    def pyxbToDict(self,objAAnalyser, debug=False):
         # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout
         if objAAnalyser is None: return
-        if debug : print ('debut pour_____________________________ ',objAAnalyser)
+        #if (objAAnalyser.__class__.__name__.find('BU_map')>0) : debug=True
+        #if (objAAnalyser.__class__.__name__.find('n1')>0) : debug=True
+        #if debug : print ('debut pour_____________________________ ',objAAnalyser, objAAnalyser.__class__.__name__)
         dictArgs = {}
         # traitement SIMP
         # ---------------
         # a revoir pour les matrices
         # et les tuples
-        debug = 1
         if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition):
             if debug : print ('je suis un MCSimple', objAAnalyser)
             # traitement scalaire
             objAAnalyser.dictPyxb=objAAnalyser
             if not (isinstance(objAAnalyser,pyxb.binding.basis.STD_list)):
                 if debug :  print ('je suis un scalaire')
+                #if (objAAnalyser.__class__.__name__.find('n1')>0) : 
+                #if (isinstance(objAAnalyser,self.cata.modeleMetier.AccasTuple)): return objAAnalyser
                 if isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssd) or isinstance(objAAnalyser,self.cata.modeleMetier.AccasUserAssdMultiple):
-                    if debug : print ('je suis un UserASSD')
                     laClassePyxbUserAssd=type(objAAnalyser)
                     return self.creeUserAssd(objAAnalyser,laClassePyxbUserAssd)
+                if issubclass(objAAnalyser.__class__,self.cata.modeleMetier.AccasAssd): return (self.g_context[str(objAAnalyser)])
                 if isinstance(objAAnalyser, pyxb.binding.datatypes.boolean) : return bool(objAAnalyser)
                 if isinstance(objAAnalyser, str)  : return str(objAAnalyser)
                 if isinstance(objAAnalyser, int)  : return int(objAAnalyser)
@@ -581,16 +587,21 @@ class X_JDC (X_MCCOMPO):
             else :
                 if debug : print ('je suis une liste')
                 laListe=[]
+
                 # liste homogene
-                if len(objAAnalyser)>0:
-                    if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
-                    else : estUnUserASSDorUserASSDMultiple=False
-                else : estUnUserASSDorUserASSDMultiple=False
-                if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
+                #if len(objAAnalyser)>0:
+                #    if issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(objAAnalyser[0].__class__,self.cata.modeleMetier.AccasUserAssdMultiple): estUnUserASSDorUserASSDMultiple = True
+                #    else : estUnUserASSDorUserASSDMultiple=False
+                #    print (objAAnalyser[0].__class__,objAAnalyser, estUnUserASSDorUserASSDMultiple)
+                #else : estUnUserASSDorUserASSDMultiple=False
+                #if debug : print ('estUnUserASSDorUserASSDMultiple', estUnUserASSDorUserASSDMultiple)
+
                 for obj in objAAnalyser :
-                    if estUnUserASSDorUserASSDMultiple:
+                    if issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssd) or issubclass(obj.__class__,self.cata.modeleMetier.AccasUserAssdMultiple):
                        laClassePyxbUserAssd=obj.__class__
                        laListe.append(self.creeUserAssd(obj,laClassePyxbUserAssd))
+                    elif issubclass(obj.__class__,self.cata.modeleMetier.AccasAssd):
+                         laListe.append(self.g_context[str(obj)])
                     elif isinstance(obj, str): laListe.append (str(obj))
                     elif isinstance(obj, int): laListe.append (int(obj))
                     elif isinstance(obj, float): laListe.append (float(obj))
@@ -627,18 +638,22 @@ class X_JDC (X_MCCOMPO):
                 # print ('ajout dans dictPyxb', objPyxbName, objPyxbValue.dictPyxb)
                 #print ('avec la valeur', 'de',  objAAnalyser.dictPyxb[objPyxbName])
 
-        #print ("***********************************")
-        #print ('pyxbToDict  fin pour ********** ', objAAnalyser)
-        #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
-        #print ('pyxbToDict  fin pour ********** ', objAAnalyser)
-        #print ("***********************************")
-        #print (dictArgs)
-        #print (dictPyxb)
-        #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i]))
-        #print ('fin pour ',objAAnalyser)
+        if debug : print ("***********************************")
+        if debug : print ('pyxbToDict  fin pour ********** ', objAAnalyser)
+        if debug : print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb)
+        if debug : print ('pyxbToDict  fin pour ********** ', objAAnalyser)
+        if debug : print ("***********************************")
+        # traitement des Matrices et des Tuples
+        # on change ce qu on retourne pour ne garder que la valeur de la matrice
+        if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Matrice': return dictArgs['line']
+        if hasattr(objAAnalyser,'sdType') and objAAnalyser.sdType == 'Tuple': 
+            liste=[]
+            for (k,v) in dictArgs.items(): liste.append(v)
+            return liste
+        if debug : print ('fin pour ',objAAnalyser)
         return dictArgs
 
-    def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=True):
+    def creeUserAssd(self,objAAnalyser,laClassePyxbUserAssd,debug=False):
 
         enCreation=False
         if debug : print ('creeUserAssd ', objAAnalyser, ' ',laClassePyxbUserAssd)
index 64d2c9a66c2d24f0dca45b3ebcbfe9766cfdef5b..32bd87791f99cf4c696662b51a933edf3cec873d 100644 (file)
@@ -3,6 +3,7 @@ texteDebutNiveau2='<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="
 texteDebutNiveau3='<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"\nxmlns="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\nxmlns:{}="http://chercheurs.edf.com/logiciels/{}"\ntargetNamespace="http://chercheurs.edf.com/logiciels/{}"\nelementFormDefault="qualified" attributeFormDefault="unqualified" version="0">\n'
 texteFin='</xs:schema>'
 
+
 #texteAnnotation= '\t<xs:simpleType name="PNEFdico_{}">\n\t\t<xs:annotation>\n\t\t<xs:documentation>{}\n\t\t</xs:documentation>\n\t\t</xs:annotation>\n\t<xs:restriction base="xs:string"></xs:restriction>\n\t</xs:simpleType>\n'
 texteAnnotation= '\t<xs:simpleType name="PNEFdico">\n\t\t<xs:annotation>\n\t\t<xs:documentation>{}\n\t\t</xs:documentation>\n\t\t</xs:annotation>\n\t<xs:restriction base="xs:string"></xs:restriction>\n\t</xs:simpleType>\n'
 
@@ -81,6 +82,7 @@ attributeTypeForASSD = '\t\t<xs:attribute name="sdType" type="xs:string" fixed="
 attributeTypeUtilisateurName = '\t\t<xs:attribute name="typeUtilisateur" type="xs:string" fixed="{}"/>\n'
 producingASSDkeyRefDeclaration='\t<xs:key name="Key_Name_For_{}">\n\t\t<xs:selector xpath="."/>\n\t\t<xs:field xpath="{}"/>\n\t</xs:key>\n'
 texteFieldUnitaire="./{}:{}/@name |"
+defBaseXSDASSD = '\t<xs:simpleType name="AccasAssd">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
 defBaseXSDUserASSD='\t<xs:simpleType name="AccasUserAssd">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
 defBaseXSDUserASSDMultiple='\t<xs:simpleType name="AccasUserAssdMultiple">\n\t\t<xs:restriction base="xs:string">\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
 
@@ -127,13 +129,13 @@ tupleNonHomogeneSimpleType = '\t<xs:simpleType name="{}_n{}_tuple">\n\t\t<xs:res
 tupleNonHomogeneElt        = '\t\t\t<xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
 tupleDebutComplexeType     = '\t<xs:complexType name="{}">\n\t\t<xs:sequence>'
 tupleMilieuComplexeType    = '\n\t\t\t<xs:element name="n{}" type="{}_n{}_tuple" minOccurs="1" maxOccurs="1"/>'
-tupleFinComplexeType       = '\n\t\t</xs:sequence>\n\t</xs:complexType>\n'
+tupleFinComplexeType       = '\n\t\t</xs:sequence>\n\t\t<xs:attribute name="sdType" type="xs:string" fixed="Tuple"/>\n\t</xs:complexType>\n'
 
 # MATRICE
 eltMatrice = '\t\t\t <xs:element name="{}" type="{}:{}" minOccurs="{}" maxOccurs="{}"/>\n'
 matriceSimpleType = '\t<xs:simpleType name="{}_line">\n\t\t<xs:restriction>\n\t\t\t<xs:simpleType>\n\t\t\t\t<xs:list>\n\t\t\t\t\t<xs:simpleType>\n\t\t\t\t\t\t<xs:restriction  base="{}_element"/>\n\t\t\t\t\t</xs:simpleType>\n\t\t\t\t</xs:list>\n\t\t\t</xs:simpleType>\n\t\t\t<xs:minLength value="{}"/>\n\t\t\t<xs:maxLength value="{}"/>\n\t\t</xs:restriction>\n\t</xs:simpleType>\n'
 matriceSimpleType +='\t<xs:group name="{}_matrix">\n\t\t<xs:sequence>\n\t\t\t<xs:element name="line" type="{}:{}_line" minOccurs="{}" maxOccurs="{}"/>\n\t\t </xs:sequence>\n\t</xs:group>\n'
-matriceSimpleType +='\t<xs:complexType name="{}"> \n\t\t<xs:group ref="{}:{}_matrix" minOccurs="1" maxOccurs="1"/>\n\t</xs:complexType>\n'
+matriceSimpleType +='\t<xs:complexType name="{}"> \n\t\t<xs:group ref="{}:{}_matrix" minOccurs="1" maxOccurs="1"/>\n\t\t<xs:attribute name="sdType" type="xs:string" fixed="Matrice"/>\n\t</xs:complexType>\n'
 
 # CHAINES AVEC BLANC
 debutChaineAvecBlancsInto  = '\t<xs:simpleType name="{}_enum">\n\t\t<xs:restriction base="xs:string">\n'
index 4769c91583b7b33b5fbabd8675650f0988ad353f..cee7154ef1b9ff27f409a8b6af0796ea88c8ed3e 100755 (executable)
@@ -853,9 +853,9 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
 
         if  self.jdc.cata.modeleMetier:self.jdc.toXml(self.fichier)
         if  self.jdc.cata.modeleMetier and self.jdc.isValid():
-            if self.generator != self.XMLgenerator :
-                self.XMLgenerator.gener(self.jdc)
-                self.XMLgenerator.writeDefault(fn)
+            if self.generator != self.XMLGenerator :
+                self.XMLGenerator.gener(self.jdc)
+                self.XMLGenerator.writeDefault(fn)
 
         if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
         #if hasattr(self.generator, "writeDefault"):
index 766341d3aa7f2e98832ab1c5783cc7913b36f2d5..259746eb0239656d3d8e14e7edeb81734de1dc77 100755 (executable)
@@ -118,8 +118,10 @@ class JDCEditorSsIhm :
 
         self.maConfiguration.mesGenerators     = generator
         self.maConfiguration.mesconvertisseurs = convert
-        try    : self.XMLgenerator=generator.plugins['xml']()
-        except : self.XMLgenerator=None
+        try    : self.XMLGenerator=generator.plugins['xml']()
+        except : self.XMLGenerator=None
+        try    : self.pythonGenerator=generator.plugins['python']()
+        except : self.pythonGenerator=None
 
 
         if self.formatFichierOut in generator.plugins.keys():
@@ -503,7 +505,7 @@ class JDCEditorSsIhm :
                 a.close()
             except :
                 checksum='Fichier trop long \n'
-            ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+            ligne="#CHECKSUM:"+cecksum[0:-1]+":FIN CHECKSUM"
         return ligne
 
     #----------------------#
@@ -604,9 +606,9 @@ class JDCEditorSsIhm :
         self.fichierOut = fichier
         if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
         if  self.jdc.cata.modeleMetier and self.jdc.isValid():
-            if self.generator != self.XMLgenerator :
-                self.XMLgenerator.gener(self.jdc)
-                self.XMLgenerator.writeDefault(fichier)
+            if self.generator != self.XMLGenerator :
+                self.XMLGenerator.gener(self.jdc)
+                self.XMLGenerator.writeDefault(fichier)
                 return(1,self.fichier)
         if self.jdc.isValid() and hasattr(self.generator, "writeDefault"):
             self.generator.writeDefault(fichier)
index cb5921e1465197c799f4ae2f25e913cd32356f97..cb6f3cf1d9a294db7b9330e46e228612381636c6 100644 (file)
@@ -125,6 +125,7 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
         dejaAffiche=0
         if (len(liste)) != self.nbLigs  :
             QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
+            return
         for i in range(self.nbLigs):
             inter=liste[i]
             if (len(inter)) != self.nbCols :
index 49df4914b59ee209bc1c1c057253266ef4b76796..bf1a8ea4ff9ecbe2a0c347dad17c995dd4c35945 100644 (file)
@@ -159,8 +159,7 @@ class MCSIMP(object):
                         try:
                             self.definition.validators.convert(lval)
                         except ValError as e:
-                            self.cr.fatal(
-                                "invalid keyword %s  : %s\nCriteria : %s" % (tr(self.nom)), str(e), self.definition.validators.info())
+                            self.cr.fatal("invalid keyword {}:{}\nCriteria : {}".format(tr(self.nom), str(e), self.definition.validators.info()))
                             valid = 0
                 else:
                     # si pas de cr demande, on sort a la toute premiere erreur