From 1b91010fc2c0a681db9177d6fa0e4e0af866ec31 Mon Sep 17 00:00:00 2001
From: "pascale.noyret"
Date: Mon, 13 Mar 2017 14:12:34 +0100
Subject: [PATCH] fin portage python 3
---
Accas/A_ASSD.py | 2 +-
Accas/A_AU_MOINS_UN.py | 3 +-
Accas/A_AU_PLUS_UN.py | 3 +-
Accas/A_AVANT.py | 3 +-
Accas/A_A_CLASSER.py | 3 +-
Accas/A_BLOC.py | 3 +-
Accas/A_ENSEMBLE.py | 3 +-
Accas/A_ETAPE.py | 1 +
Accas/A_EVAL.py | 1 +
Accas/A_EXCLUS.py | 3 +-
Accas/A_FACT.py | 5 +-
Accas/A_FICHIER.py | 1 +
Accas/A_FORM.py | 3 +-
Accas/A_FORM_ETAPE.py | 1 +
Accas/A_JDC.py | 3 +-
Accas/A_JDC_CATA.py | 3 +-
Accas/A_MACRO.py | 3 +-
Accas/A_MACRO_ETAPE.py | 3 +-
Accas/A_MCBLOC.py | 1 +
Accas/A_MCFACT.py | 1 +
Accas/A_MCLIST.py | 1 +
Accas/A_MCNUPLET.py | 1 +
Accas/A_MCSIMP.py | 1 +
Accas/A_MEME_NOMBRE.py | 3 +-
Accas/A_NUPLET.py | 5 +-
Accas/A_OPER.py | 3 +-
Accas/A_PRESENT_ABSENT.py | 3 +-
Accas/A_PRESENT_PRESENT.py | 3 +-
Accas/A_PROC.py | 3 +-
Accas/A_PROC_ETAPE.py | 1 +
Accas/A_SALOME_ENTRY.py | 2 +
Accas/A_SENSIBILITE.py | 1 +
Accas/A_SIMP.py | 3 +-
Accas/A_UN_PARMI.py | 3 +-
Accas/A_VALIDATOR.py | 1 +
Accas/__init__.py | 93 ++--
Editeur/Objecttreeitem.py | 141 +++---
Editeur/TroisDPal.py | 10 +-
Editeur/__init__.py | 4 +-
Editeur/analyse_catalogue.py | 48 ++-
Editeur/analyse_catalogue_initial.py | 16 +-
Editeur/autre_analyse_cata.py | 8 +-
Editeur/basestyle.py | 6 +-
Editeur/cata2Xml.py | 11 +-
Editeur/catadesc.py | 6 +-
Editeur/comploader.py | 21 +-
Editeur/comploaderqt4.py | 98 -----
Editeur/import_code.py | 5 +-
Editeur/listePatrons.py | 16 +-
Editeur/session.py | 28 +-
Editeur/styles.py | 8 +-
Editeur/uiinfo.py | 10 +-
Editeur/utils.py | 2 -
Extensions/commande_comm.py | 63 +--
Extensions/commentaire.py | 35 +-
Extensions/eficas_exception.py | 1 +
Extensions/etape_niveau.py | 21 +-
Extensions/i18n.py | 6 +-
Extensions/interpreteur_formule.py | 73 ++--
Extensions/jdc.py | 11 +-
Extensions/jdc_include.py | 57 +--
Extensions/localisation.py | 46 +-
Extensions/mcnuplet.py | 46 +-
Extensions/niveau.py | 8 +-
Extensions/nuplet.py | 31 +-
Extensions/param2.py | 44 +-
Extensions/parametre.py | 37 +-
Extensions/parametre_eval.py | 16 +-
Extensions/pluginloader.py | 13 +-
Extensions/translation.py | 10 +-
Extensions/translationQT5.py | 69 +--
Ihm/CONNECTOR.py | 54 ++-
Ihm/I_ASSD.py | 1 +
Ihm/I_AVANT.py | 20 +-
Ihm/I_A_CLASSER.py | 11 +-
Ihm/I_ENTITE.py | 10 +-
Ihm/I_ETAPE.py | 21 +-
Ihm/I_EXCLUS.py | 3 +-
Ihm/I_FICHIER.py | 5 +-
Ihm/I_FONCTION.py | 12 +-
Ihm/I_FORM_ETAPE.py | 81 ++--
Ihm/I_JDC.py | 36 +-
Ihm/I_JDC_CATA.py | 7 +-
Ihm/I_MACRO_ETAPE.py | 82 ++--
Ihm/I_MCBLOC.py | 3 +-
Ihm/I_MCCOMPO.py | 26 +-
Ihm/I_MCFACT.py | 28 +-
Ihm/I_MCLIST.py | 61 +--
Ihm/I_MCSIMP.py | 78 ++--
Ihm/I_OBJECT.py | 18 +-
Ihm/I_PRESENT_ABSENT.py | 3 +-
Ihm/I_PRESENT_PRESENT.py | 3 +-
Ihm/I_PROC_ETAPE.py | 15 +-
Ihm/I_REGLE.py | 10 +-
Ihm/I_UN_PARMI.py | 5 +-
Ihm/I_VALIDATOR.py | 3 +-
Ihm/__init__.py | 4 +-
InterfaceQT4/browser.py | 103 ++---
InterfaceQT4/compobloc.py | 9 +-
InterfaceQT4/compocomm.py | 32 +-
InterfaceQT4/compocommandecomm.py | 24 +-
InterfaceQT4/compofact.py | 19 +-
InterfaceQT4/compoformule.py | 60 +--
InterfaceQT4/compojdc.py | 17 +-
InterfaceQT4/compomacro.py | 35 +-
InterfaceQT4/compomclist.py | 31 +-
InterfaceQT4/compooper.py | 54 +--
InterfaceQT4/compoparam.py | 41 +-
InterfaceQT4/compoproc.py | 9 +-
InterfaceQT4/composimp.py | 116 ++---
InterfaceQT4/configuration.py | 405 +++++++++---------
InterfaceQT4/determine.py | 8 +-
InterfaceQT4/editor.py | 216 +++++-----
InterfaceQT4/eficas_go.py | 41 +-
InterfaceQT4/feuille.py | 57 +--
InterfaceQT4/gereIcones.py | 84 ++--
InterfaceQT4/gereListe.py | 42 +-
InterfaceQT4/gereRegles.py | 17 +-
InterfaceQT4/gereTraduction.py | 18 +-
InterfaceQT4/groupe.py | 30 +-
InterfaceQT4/monBoutonValide.py | 17 +-
InterfaceQT4/monChoixCata.py | 7 +-
InterfaceQT4/monChoixCode.py | 32 +-
InterfaceQT4/monChoixCommande.py | 132 +++---
InterfaceQT4/monChoixLangue.py | 22 +-
InterfaceQT4/monFonctionPanel.py | 23 +-
InterfaceQT4/monGroupeOptionnel.py | 20 +-
InterfaceQT4/monLabelClic.py | 15 +-
InterfaceQT4/monRecherche.py | 21 +-
InterfaceQT4/monRechercheCatalogue.py | 29 +-
InterfaceQT4/monSelectVal.py | 25 +-
InterfaceQT4/monViewRegles.py | 15 +-
InterfaceQT4/monViewTexte.py | 33 +-
InterfaceQT4/monVisu.py | 11 +-
InterfaceQT4/monWidget4a6RadioButton.py | 5 +-
InterfaceQT4/monWidget4a6RadioButtonSD.py | 5 +-
InterfaceQT4/monWidgetBloc.py | 3 +-
InterfaceQT4/monWidgetCB.py | 38 +-
InterfaceQT4/monWidgetCBSD.py | 37 +-
InterfaceQT4/monWidgetCommande.py | 51 ++-
InterfaceQT4/monWidgetCommentaire.py | 45 +-
InterfaceQT4/monWidgetCreeParam.py | 46 +-
InterfaceQT4/monWidgetDate.py | 7 +-
InterfaceQT4/monWidgetFact.py | 12 +-
InterfaceQT4/monWidgetFactPlie.py | 3 +-
InterfaceQT4/monWidgetFormule.py | 57 +--
InterfaceQT4/monWidgetHeure.py | 7 +-
InterfaceQT4/monWidgetInactif.py | 22 +-
InterfaceQT4/monWidgetInfo.py | 14 +-
InterfaceQT4/monWidgetMatrice.py | 28 +-
InterfaceQT4/monWidgetOptionnel.py | 18 +-
InterfaceQT4/monWidgetParam.py | 55 ++-
.../monWidgetPlusieursASSDIntoOrdonne.py | 20 +-
InterfaceQT4/monWidgetPlusieursBase.py | 46 +-
InterfaceQT4/monWidgetPlusieursInto.py | 38 +-
InterfaceQT4/monWidgetPlusieursIntoOrdonne.py | 36 +-
InterfaceQT4/monWidgetPlusieursPlie.py | 26 +-
InterfaceQT4/monWidgetPlusieursTuple.py | 54 ++-
InterfaceQT4/monWidgetPlusieursTuple2.py | 7 +-
InterfaceQT4/monWidgetPlusieursTuple3.py | 7 +-
InterfaceQT4/monWidgetRadioButton.py | 38 +-
InterfaceQT4/monWidgetSDCOInto.py | 30 +-
InterfaceQT4/monWidgetSimpBase.py | 34 +-
InterfaceQT4/monWidgetSimpBool.py | 25 +-
InterfaceQT4/monWidgetSimpComplexe.py | 50 +--
InterfaceQT4/monWidgetSimpFichier.py | 14 +-
InterfaceQT4/monWidgetSimpSalome.py | 26 +-
InterfaceQT4/monWidgetSimpTuple.py | 27 +-
InterfaceQT4/monWidgetSimpTuple2.py | 7 +-
InterfaceQT4/monWidgetSimpTuple3.py | 7 +-
InterfaceQT4/monWidgetSimpTxt.py | 5 +-
InterfaceQT4/monWidgetUniqueSDCO.py | 9 +-
InterfaceQT4/monWidgetVide.py | 7 +-
InterfaceQT4/politiquesValidation.py | 40 +-
InterfaceQT4/qtEficas.py | 117 +++--
InterfaceQT4/qtSaisie.py | 34 +-
InterfaceQT4/readercata.py | 43 +-
InterfaceQT4/ssIhm.py | 7 +-
InterfaceQT4/typeNode.py | 73 +---
InterfaceQT4/viewManager.py | 131 +++---
Noyau/N_ASSD.py | 40 +-
Noyau/N_ASSD_NonAster.py | 136 ------
Noyau/N_BLOC.py | 20 +-
Noyau/N_CO.py | 16 +-
Noyau/N_CONVERT.py | 11 +-
Noyau/N_CR.py | 61 +--
Noyau/N_ENTITE.py | 48 +--
Noyau/N_ETAPE.py | 149 ++++---
Noyau/N_Exception.py | 10 +-
Noyau/N_FACT.py | 31 +-
Noyau/N_FONCTION.py | 24 +-
Noyau/N_FORM.py | 5 +-
Noyau/N_FORM_ETAPE.py | 3 +-
Noyau/N_GEOM.py | 6 +-
Noyau/N_JDC.py | 212 +++++----
Noyau/N_JDC_CATA.py | 9 +-
Noyau/N_LASSD.py | 3 +-
Noyau/N_MACRO.py | 13 +-
Noyau/N_MACRO_ETAPE.py | 276 ++++++------
Noyau/N_MCBLOC.py | 7 +-
Noyau/N_MCCOMPO.py | 46 +-
Noyau/N_MCFACT.py | 3 +-
Noyau/N_MCLIST.py | 24 +-
Noyau/N_MCSIMP.py | 10 +-
Noyau/N_OBJECT.py | 10 +-
Noyau/N_OPER.py | 11 +-
Noyau/N_OPS.py | 9 +-
Noyau/N_PROC.py | 9 +-
Noyau/N_PROC_ETAPE.py | 18 +-
Noyau/N_REGLE.py | 11 +-
Noyau/N_SENSIBILITE.py | 19 +-
Noyau/N_SIMP.py | 14 +-
Noyau/N_VALIDATOR.py | 252 +++++------
Noyau/N__F.py | 12 +-
Noyau/N_info.py | 281 ------------
Noyau/N_types.py | 8 +-
Noyau/N_utils.py | 59 ++-
Noyau/__init__.py | 38 +-
Noyau/ascheckers.py | 143 -------
Noyau/asnom.py | 131 ------
Noyau/asojb.py | 398 -----------------
Noyau/basetype.py | 161 -------
Noyau/context.py | 22 +-
Noyau/nommage.py | 17 +-
Noyau/strfunc.py | 102 ++---
UiQT5/desPBMT.ui | 50 +++
UiQT5/desWidgetPlusieursInto.ui | 32 +-
UiQT5/makefile | 2 +-
UiQT5/myMain.ui | 53 ++-
Validation/V_AU_MOINS_UN.py | 29 +-
Validation/V_AU_PLUS_UN.py | 32 +-
Validation/V_A_CLASSER.py | 63 ++-
Validation/V_ENSEMBLE.py | 29 +-
Validation/V_ETAPE.py | 123 +++---
Validation/V_EXCLUS.py | 25 +-
Validation/V_JDC.py | 20 +-
Validation/V_MACRO_ETAPE.py | 87 ++--
Validation/V_MCBLOC.py | 29 +-
Validation/V_MCCOMPO.py | 59 +--
Validation/V_MCFACT.py | 40 +-
Validation/V_MCLIST.py | 62 +--
Validation/V_MCSIMP.py | 90 ++--
Validation/V_MEME_NOMBRE.py | 31 +-
Validation/V_PRESENT_ABSENT.py | 29 +-
Validation/V_PRESENT_PRESENT.py | 31 +-
Validation/V_PROC_ETAPE.py | 36 +-
Validation/V_UN_PARMI.py | 31 +-
convert/__init__.py | 7 +-
convert/autre_parseur.py | 66 +--
convert/convert_TELEMAC.py | 57 +--
convert/convert_map.py | 4 +-
convert/convert_pyth.py | 19 +-
convert/convert_python.py | 17 +-
convert/parseur_python.py | 166 +++----
generator/Formatage.py | 34 +-
generator/__init__.py | 7 +-
generator/generator_GroupMA.py | 17 +-
generator/generator_PSEN.py | 10 +-
generator/generator_ProcessOutputs.py | 8 +-
generator/generator_TELEMAC.py | 40 +-
generator/generator_ZCracks.py | 12 +-
generator/generator_aplat.py | 107 ++---
generator/generator_dico.py | 12 +-
generator/generator_dicoImbrique.py | 17 +-
generator/generator_file_from_template.py | 12 +-
generator/generator_ini.py | 50 ++-
generator/generator_map.py | 10 +-
generator/generator_modification.py | 88 ++--
generator/generator_pyth.py | 45 +-
generator/generator_python.py | 42 +-
generator/generator_vers3DSalome.py | 24 +-
271 files changed, 4421 insertions(+), 5403 deletions(-)
delete mode 100644 Editeur/comploaderqt4.py
delete mode 100644 Noyau/N_ASSD_NonAster.py
delete mode 100644 Noyau/N_info.py
delete mode 100644 Noyau/ascheckers.py
delete mode 100644 Noyau/asnom.py
delete mode 100644 Noyau/asojb.py
delete mode 100644 Noyau/basetype.py
create mode 100644 UiQT5/desPBMT.ui
diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py
index c4e26340..92d1f6d4 100644
--- a/Accas/A_ASSD.py
+++ b/Accas/A_ASSD.py
@@ -18,11 +18,11 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Ihm import I_ASSD
from Ihm import I_LASSD
from Ihm import I_FONCTION
from Noyau import N_ASSD
-#from Noyau import N_LASSD
from Noyau import N_GEOM
from Noyau import N_FONCTION
from Noyau import N_CO
diff --git a/Accas/A_AU_MOINS_UN.py b/Accas/A_AU_MOINS_UN.py
index ea946f59..7a58ed75 100644
--- a/Accas/A_AU_MOINS_UN.py
+++ b/Accas/A_AU_MOINS_UN.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_AU_MOINS_UN
from Ihm import I_REGLE
@@ -24,6 +25,6 @@ from Ihm import I_REGLE
class AU_MOINS_UN(V_AU_MOINS_UN.AU_MOINS_UN,I_REGLE.REGLE,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_AU_MOINS_UN.AU_MOINS_UN n'en a pas
"""
diff --git a/Accas/A_AU_PLUS_UN.py b/Accas/A_AU_PLUS_UN.py
index 5d331f47..74fdc74f 100644
--- a/Accas/A_AU_PLUS_UN.py
+++ b/Accas/A_AU_PLUS_UN.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_AU_PLUS_UN
from Ihm import I_REGLE
@@ -24,6 +25,6 @@ from Ihm import I_REGLE
class AU_PLUS_UN(V_AU_PLUS_UN.AU_PLUS_UN,I_REGLE.REGLE,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_AU_PLUS_UN.AU_PLUS_UN n'en a pas
"""
diff --git a/Accas/A_AVANT.py b/Accas/A_AVANT.py
index 43c10834..41a4ccda 100644
--- a/Accas/A_AVANT.py
+++ b/Accas/A_AVANT.py
@@ -17,12 +17,13 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Ihm import I_REGLE, I_AVANT
class AVANT(I_AVANT.I_AVANT,I_REGLE.REGLE,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
I_AVANT.I_AVANT n'en a pas
"""
diff --git a/Accas/A_A_CLASSER.py b/Accas/A_A_CLASSER.py
index 74950a1c..9ad290d5 100644
--- a/Accas/A_A_CLASSER.py
+++ b/Accas/A_A_CLASSER.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_A_CLASSER
from Ihm import I_A_CLASSER
@@ -24,5 +25,5 @@ from Ihm import I_A_CLASSER
class A_CLASSER(V_A_CLASSER.A_CLASSER,N_REGLE.REGLE,I_A_CLASSER.A_CLASSER):
"""
La classe utilise l'initialiseur du module V_.
- Il faut absolument que V_A_CLASSER soit en premier dans l'héritage
+ Il faut absolument que V_A_CLASSER soit en premier dans l'heritage
"""
diff --git a/Accas/A_BLOC.py b/Accas/A_BLOC.py
index 3ba0b4cc..e8a6f530 100644
--- a/Accas/A_BLOC.py
+++ b/Accas/A_BLOC.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_BLOC
from Ihm import I_ENTITE
-import A_MCBLOC
+from . import A_MCBLOC
class BLOC(N_BLOC.BLOC,I_ENTITE.ENTITE):
class_instance=A_MCBLOC.MCBLOC
diff --git a/Accas/A_ENSEMBLE.py b/Accas/A_ENSEMBLE.py
index 529ca3dd..1b1cf755 100644
--- a/Accas/A_ENSEMBLE.py
+++ b/Accas/A_ENSEMBLE.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_ENSEMBLE
from Ihm import I_REGLE
@@ -24,6 +25,6 @@ from Ihm import I_REGLE
class ENSEMBLE(I_REGLE.REGLE,V_ENSEMBLE.ENSEMBLE,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_ENSEMBLE.ENSEMBLE n'en a pas
"""
diff --git a/Accas/A_ETAPE.py b/Accas/A_ETAPE.py
index 50d4e92d..34c9e173 100644
--- a/Accas/A_ETAPE.py
+++ b/Accas/A_ETAPE.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_ETAPE
from Validation import V_ETAPE
from Ihm import I_ETAPE
diff --git a/Accas/A_EVAL.py b/Accas/A_EVAL.py
index b9c49cce..28a432b8 100644
--- a/Accas/A_EVAL.py
+++ b/Accas/A_EVAL.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Ihm import I_EVAL
class EVAL(I_EVAL.EVAL):
diff --git a/Accas/A_EXCLUS.py b/Accas/A_EXCLUS.py
index 63bc3b18..4a315b5e 100644
--- a/Accas/A_EXCLUS.py
+++ b/Accas/A_EXCLUS.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_EXCLUS
from Ihm import I_EXCLUS
@@ -24,6 +25,6 @@ from Ihm import I_EXCLUS
class EXCLUS(I_EXCLUS.EXCLUS,V_EXCLUS.EXCLUS,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_EXCLUS.EXCLUS n'en a pas
"""
diff --git a/Accas/A_FACT.py b/Accas/A_FACT.py
index 2e15b62a..61b11d2e 100644
--- a/Accas/A_FACT.py
+++ b/Accas/A_FACT.py
@@ -17,10 +17,11 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_FACT
from Ihm import I_ENTITE
-import A_MCFACT
-import A_MCLIST
+from . import A_MCFACT
+from . import A_MCLIST
class FACT(N_FACT.FACT,I_ENTITE.ENTITE):
class_instance=A_MCFACT.MCFACT
diff --git a/Accas/A_FICHIER.py b/Accas/A_FICHIER.py
index d3ab7dbf..026207b6 100644
--- a/Accas/A_FICHIER.py
+++ b/Accas/A_FICHIER.py
@@ -21,6 +21,7 @@
# (defined in Salome EFICAS module) when Eficas is launched in Salome context.
# It handles the objects that can be selected from Salome object browser.
+from __future__ import absolute_import
from Ihm import I_FICHIER
class Fichier (I_FICHIER.Fichier):
diff --git a/Accas/A_FORM.py b/Accas/A_FORM.py
index 8e6bf538..7036dee6 100644
--- a/Accas/A_FORM.py
+++ b/Accas/A_FORM.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_FORM
from Ihm import I_ENTITE
-import A_FORM_ETAPE
+from . import A_FORM_ETAPE
class FORM(N_FORM.FORM,I_ENTITE.ENTITE):
class_instance=A_FORM_ETAPE.FORM_ETAPE
diff --git a/Accas/A_FORM_ETAPE.py b/Accas/A_FORM_ETAPE.py
index 6c2827d0..75e9f13e 100644
--- a/Accas/A_FORM_ETAPE.py
+++ b/Accas/A_FORM_ETAPE.py
@@ -18,6 +18,7 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_FORM_ETAPE
from Validation import V_MACRO_ETAPE
from Ihm import I_FORM_ETAPE
diff --git a/Accas/A_JDC.py b/Accas/A_JDC.py
index 40b371b8..c0213eb3 100644
--- a/Accas/A_JDC.py
+++ b/Accas/A_JDC.py
@@ -17,13 +17,14 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_JDC
from Validation import V_JDC
from Extensions import jdc
from Ihm import I_JDC
class JDC(jdc.JDC,I_JDC.JDC,V_JDC.JDC,N_JDC.JDC):
- from A_ASSD import CO,assd
+ from .A_ASSD import CO,assd
def __init__(self,*pos,**args):
N_JDC.JDC.__init__(self,*pos,**args)
diff --git a/Accas/A_JDC_CATA.py b/Accas/A_JDC_CATA.py
index 36791dcd..06461569 100644
--- a/Accas/A_JDC_CATA.py
+++ b/Accas/A_JDC_CATA.py
@@ -17,7 +17,8 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import A_JDC
+from __future__ import absolute_import
+from . import A_JDC
from Noyau import N_JDC_CATA
from Ihm import I_JDC_CATA
diff --git a/Accas/A_MACRO.py b/Accas/A_MACRO.py
index d5831fba..e3224bb4 100644
--- a/Accas/A_MACRO.py
+++ b/Accas/A_MACRO.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_MACRO
from Ihm import I_ENTITE
-import A_MACRO_ETAPE
+from . import A_MACRO_ETAPE
class MACRO(N_MACRO.MACRO,I_ENTITE.ENTITE):
class_instance=A_MACRO_ETAPE.MACRO_ETAPE
diff --git a/Accas/A_MACRO_ETAPE.py b/Accas/A_MACRO_ETAPE.py
index 590ec521..7e014c51 100644
--- a/Accas/A_MACRO_ETAPE.py
+++ b/Accas/A_MACRO_ETAPE.py
@@ -17,10 +17,11 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_MACRO_ETAPE
from Validation import V_MACRO_ETAPE
from Ihm import I_MACRO_ETAPE
-from A_ASSD import CO
+from .A_ASSD import CO
class MACRO_ETAPE(I_MACRO_ETAPE.MACRO_ETAPE,
V_MACRO_ETAPE.MACRO_ETAPE,
diff --git a/Accas/A_MCBLOC.py b/Accas/A_MCBLOC.py
index 6ca569a5..9833b922 100644
--- a/Accas/A_MCBLOC.py
+++ b/Accas/A_MCBLOC.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_MCBLOC
from Validation import V_MCBLOC
from Ihm import I_MCBLOC
diff --git a/Accas/A_MCFACT.py b/Accas/A_MCFACT.py
index 978119c4..e4b7faaa 100644
--- a/Accas/A_MCFACT.py
+++ b/Accas/A_MCFACT.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_MCFACT
from Validation import V_MCFACT
from Ihm import I_MCFACT
diff --git a/Accas/A_MCLIST.py b/Accas/A_MCLIST.py
index 6ea0b6ee..cee510c7 100644
--- a/Accas/A_MCLIST.py
+++ b/Accas/A_MCLIST.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
# ======================================================================
+from __future__ import absolute_import
from Noyau import N_MCLIST
from Validation import V_MCLIST
from Ihm import I_MCLIST
diff --git a/Accas/A_MCNUPLET.py b/Accas/A_MCNUPLET.py
index 4de84e16..5084232f 100644
--- a/Accas/A_MCNUPLET.py
+++ b/Accas/A_MCNUPLET.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Extensions import mcnuplet
from Ihm import I_MCCOMPO
diff --git a/Accas/A_MCSIMP.py b/Accas/A_MCSIMP.py
index 79094791..2fc86a53 100644
--- a/Accas/A_MCSIMP.py
+++ b/Accas/A_MCSIMP.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_MCSIMP
from Validation import V_MCSIMP
from Ihm import I_MCSIMP
diff --git a/Accas/A_MEME_NOMBRE.py b/Accas/A_MEME_NOMBRE.py
index 0cf3eef8..6ec0d0cf 100644
--- a/Accas/A_MEME_NOMBRE.py
+++ b/Accas/A_MEME_NOMBRE.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_MEME_NOMBRE
from Ihm import I_REGLE
@@ -24,6 +25,6 @@ from Ihm import I_REGLE
class MEME_NOMBRE(V_MEME_NOMBRE.MEME_NOMBRE,I_REGLE.REGLE,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_MEME_NOMBRE.MEME_NOMBRE n'en a pas
"""
diff --git a/Accas/A_NUPLET.py b/Accas/A_NUPLET.py
index d7645974..2378debb 100644
--- a/Accas/A_NUPLET.py
+++ b/Accas/A_NUPLET.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Extensions import nuplet
-import A_MCLIST
-import A_MCNUPLET
+from . import A_MCLIST
+from . import A_MCNUPLET
class NUPL(nuplet.NUPL):
class_instance=A_MCNUPLET.MCNUPLET
diff --git a/Accas/A_OPER.py b/Accas/A_OPER.py
index f880fdfb..6699dfe0 100644
--- a/Accas/A_OPER.py
+++ b/Accas/A_OPER.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_OPER
from Ihm import I_ENTITE
-import A_ETAPE
+from . import A_ETAPE
class OPER(N_OPER.OPER,I_ENTITE.ENTITE):
class_instance=A_ETAPE.ETAPE
diff --git a/Accas/A_PRESENT_ABSENT.py b/Accas/A_PRESENT_ABSENT.py
index 73261065..928d146e 100644
--- a/Accas/A_PRESENT_ABSENT.py
+++ b/Accas/A_PRESENT_ABSENT.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_PRESENT_ABSENT
from Ihm import I_PRESENT_ABSENT
@@ -25,6 +26,6 @@ class PRESENT_ABSENT(I_PRESENT_ABSENT.PRESENT_ABSENT,V_PRESENT_ABSENT.PRESENT_AB
N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_PRESENT_ABSENT.PRESENT_ABSENT n'en a pas
"""
diff --git a/Accas/A_PRESENT_PRESENT.py b/Accas/A_PRESENT_PRESENT.py
index d55afe5a..273b365e 100644
--- a/Accas/A_PRESENT_PRESENT.py
+++ b/Accas/A_PRESENT_PRESENT.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_PRESENT_PRESENT
from Ihm import I_PRESENT_PRESENT
@@ -26,6 +27,6 @@ class PRESENT_PRESENT(I_PRESENT_PRESENT.PRESENT_PRESENT,
N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_PRESENT_PRESENT.PRESENT_PRESENT n'en a pas
"""
diff --git a/Accas/A_PROC.py b/Accas/A_PROC.py
index 0b66d199..feb528b6 100644
--- a/Accas/A_PROC.py
+++ b/Accas/A_PROC.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_PROC
from Ihm import I_ENTITE
-import A_PROC_ETAPE
+from . import A_PROC_ETAPE
class PROC(N_PROC.PROC,I_ENTITE.ENTITE):
class_instance=A_PROC_ETAPE.PROC_ETAPE
diff --git a/Accas/A_PROC_ETAPE.py b/Accas/A_PROC_ETAPE.py
index e580f7ad..99db10d8 100644
--- a/Accas/A_PROC_ETAPE.py
+++ b/Accas/A_PROC_ETAPE.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_PROC_ETAPE
from Validation import V_PROC_ETAPE
from Ihm import I_PROC_ETAPE
diff --git a/Accas/A_SALOME_ENTRY.py b/Accas/A_SALOME_ENTRY.py
index 7fad691b..2a75dcb5 100644
--- a/Accas/A_SALOME_ENTRY.py
+++ b/Accas/A_SALOME_ENTRY.py
@@ -20,5 +20,7 @@
# This empty class is replaced by the class eficas.SalomeEntry
# (defined in Salome EFICAS module) when Eficas is launched in Salome context.
# It handles the objects that can be selected from Salome object browser.
+#from builtins import object
+#class SalomeEntry(object):
class SalomeEntry:
pass
diff --git a/Accas/A_SENSIBILITE.py b/Accas/A_SENSIBILITE.py
index 0eaee8a3..97e28823 100644
--- a/Accas/A_SENSIBILITE.py
+++ b/Accas/A_SENSIBILITE.py
@@ -18,6 +18,7 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Ihm import I_REGLE
from Noyau import N_SENSIBILITE
diff --git a/Accas/A_SIMP.py b/Accas/A_SIMP.py
index e003db06..36378d94 100644
--- a/Accas/A_SIMP.py
+++ b/Accas/A_SIMP.py
@@ -17,9 +17,10 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_SIMP
from Ihm import I_ENTITE
-import A_MCSIMP
+from . import A_MCSIMP
class SIMP(N_SIMP.SIMP,I_ENTITE.ENTITE):
class_instance=A_MCSIMP.MCSIMP
diff --git a/Accas/A_UN_PARMI.py b/Accas/A_UN_PARMI.py
index a92dcd23..f9220d25 100644
--- a/Accas/A_UN_PARMI.py
+++ b/Accas/A_UN_PARMI.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_REGLE
from Validation import V_UN_PARMI
from Ihm import I_UN_PARMI
@@ -24,6 +25,6 @@ from Ihm import I_UN_PARMI
class UN_PARMI(I_UN_PARMI.UN_PARMI,V_UN_PARMI.UN_PARMI,N_REGLE.REGLE):
"""
La classe utilise l'initialiseur de REGLE. Il n'est pas
- nécessaire d'expliciter son initialiseur car
+ necessaire d'expliciter son initialiseur car
V_UN_PARMI.UN_PARMI n'en a pas
"""
diff --git a/Accas/A_VALIDATOR.py b/Accas/A_VALIDATOR.py
index d7e30f6f..2f410cc7 100644
--- a/Accas/A_VALIDATOR.py
+++ b/Accas/A_VALIDATOR.py
@@ -17,4 +17,5 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Ihm.I_VALIDATOR import *
diff --git a/Accas/__init__.py b/Accas/__init__.py
index 4cc226a2..8fcd858f 100644
--- a/Accas/__init__.py
+++ b/Accas/__init__.py
@@ -31,49 +31,50 @@
# permet de se proteger de l'oubli de carte coding
# ce warning deviendra fatal en python 2.4
+from __future__ import absolute_import
import warnings
warnings.filterwarnings('error','Non-ASCII character.*pep-0263',DeprecationWarning)
-from A_JDC_CATA import JDC_CATA
-from A_OPER import OPER
-from A_PROC import PROC
-from A_MACRO import MACRO
-from A_FORM import FORM
-from A_BLOC import BLOC
-from A_FACT import FACT
-from A_SIMP import SIMP
-from A_EVAL import EVAL
-from A_NUPLET import NUPL
+from .A_JDC_CATA import JDC_CATA
+from .A_OPER import OPER
+from .A_PROC import PROC
+from .A_MACRO import MACRO
+from .A_FORM import FORM
+from .A_BLOC import BLOC
+from .A_FACT import FACT
+from .A_SIMP import SIMP
+from .A_EVAL import EVAL
+from .A_NUPLET import NUPL
-from A_JDC import JDC
-from A_ETAPE import ETAPE
-from A_PROC_ETAPE import PROC_ETAPE
-from A_MACRO_ETAPE import MACRO_ETAPE
-from A_FORM_ETAPE import FORM_ETAPE
-from A_MCFACT import MCFACT
-from A_MCLIST import MCList
-from A_MCBLOC import MCBLOC
-from A_MCSIMP import MCSIMP
+from .A_JDC import JDC
+from .A_ETAPE import ETAPE
+from .A_PROC_ETAPE import PROC_ETAPE
+from .A_MACRO_ETAPE import MACRO_ETAPE
+from .A_FORM_ETAPE import FORM_ETAPE
+from .A_MCFACT import MCFACT
+from .A_MCLIST import MCList
+from .A_MCBLOC import MCBLOC
+from .A_MCSIMP import MCSIMP
# Les regles
-from A_AU_MOINS_UN import AU_MOINS_UN
-from A_MEME_NOMBRE import MEME_NOMBRE
-from A_AU_PLUS_UN import AU_PLUS_UN
-from A_UN_PARMI import UN_PARMI
-from A_PRESENT_PRESENT import PRESENT_PRESENT
-from A_PRESENT_ABSENT import PRESENT_ABSENT
-from A_EXCLUS import EXCLUS
-from A_ENSEMBLE import ENSEMBLE
-from A_A_CLASSER import A_CLASSER
-from A_AVANT import AVANT
+from .A_AU_MOINS_UN import AU_MOINS_UN
+from .A_MEME_NOMBRE import MEME_NOMBRE
+from .A_AU_PLUS_UN import AU_PLUS_UN
+from .A_UN_PARMI import UN_PARMI
+from .A_PRESENT_PRESENT import PRESENT_PRESENT
+from .A_PRESENT_ABSENT import PRESENT_ABSENT
+from .A_EXCLUS import EXCLUS
+from .A_ENSEMBLE import ENSEMBLE
+from .A_A_CLASSER import A_CLASSER
+from .A_AVANT import AVANT
-from A_ASSD import ASSD,assd
-from A_ASSD import GEOM,geom
+from .A_ASSD import ASSD,assd
+from .A_ASSD import GEOM,geom
# Pour le moment on laisse fonction (ceinture et bretelles)
-from A_ASSD import FONCTION, fonction
-from A_ASSD import formule
-from A_ASSD import formule_c
-from A_ASSD import CO
+from .A_ASSD import FONCTION, fonction
+from .A_ASSD import formule
+from .A_ASSD import formule_c
+from .A_ASSD import CO
from Noyau.N__F import _F
@@ -83,21 +84,21 @@ from Noyau.N_utils import AsType
from Noyau.N_OPS import OPS, EMPTY_OPS
from Noyau.N_ASSD import not_checked
-from A_VALIDATOR import OrVal,AndVal,OnlyStr
-from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory,Absent,Together
-from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
-from A_VALIDATOR import CardVal, InstanceVal
-from A_VALIDATOR import VerifTypeTuple, VerifExiste
-from A_VALIDATOR import FileExtVal, FunctionVal
-from A_VALIDATOR import CreeMotClef
+from .A_VALIDATOR import OrVal,AndVal,OnlyStr
+from .A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory,Absent,Together
+from .A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
+from .A_VALIDATOR import CardVal, InstanceVal
+from .A_VALIDATOR import VerifTypeTuple, VerifExiste
+from .A_VALIDATOR import FileExtVal, FunctionVal
+from .A_VALIDATOR import CreeMotClef
# On remplace la factory des validateurs initialement dans Noyau par celle
# de A_VALIDATOR
-import A_VALIDATOR
+from .A_VALIDATOR import validatorFactory
import Noyau.N_ENTITE
-Noyau.N_ENTITE.ENTITE.factories['validator']=A_VALIDATOR.validatorFactory
+Noyau.N_ENTITE.ENTITE.factories['validator']=validatorFactory
-from A_SENSIBILITE import CONCEPT_SENSIBLE, REUSE_SENSIBLE, DERIVABLE
+from .A_SENSIBILITE import CONCEPT_SENSIBLE, REUSE_SENSIBLE, DERIVABLE
from Extensions.niveau import NIVEAU
from Extensions.etape_niveau import ETAPE_NIVEAU
@@ -107,4 +108,4 @@ from Extensions.parametre_eval import PARAMETRE_EVAL
from Extensions.commande_comm import COMMANDE_COMM
from Extensions.mcnuplet import MCNUPLET
-from A_SALOME_ENTRY import SalomeEntry
+from .A_SALOME_ENTRY import SalomeEntry
diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py
index 65905d04..0d974573 100644
--- a/Editeur/Objecttreeitem.py
+++ b/Editeur/Objecttreeitem.py
@@ -19,22 +19,31 @@
#
"""
"""
-# import généraux
-import types,string,os,glob,imp,sys
-from repr import Repr
+# import generaux
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except :
+ pass
+import types,os,glob,imp,sys
+from six.moves.reprlib import Repr
from copy import copy,deepcopy
# import du chargeur de composants
-from comploader import make_objecttreeitem
+from .comploader import make_objecttreeitem
from Ihm import CONNECTOR
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
+from six.moves import range
myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100
-class TreeItem:
+class TreeItem(object):
"""Abstract class representing tree items.
@@ -43,14 +52,14 @@ class TreeItem:
"""
# itemNode est une factory qui doit retourner un objet de la classe Node
- # ou dérivé de cette classe.
- # Le widget arbre utilisera cet objet comme noeud associé au tree item.
+ # ou derive de cette classe.
+ # Le widget arbre utilisera cet objet comme noeud associe au tree item.
# Par defaut, utilise la classe Node de base
# La signature de la factory est la suivante :
# itemNode(treeOrNode,item,command,rmenu)
- # ou treeOrNode est le noeud parent, item est l'item associé
- # command est une fonction python appelée sur sélection graphique
- # du noeud et rmenu est une fonction python appelée sur click droit sur le noeud
+ # ou treeOrNode est le noeud parent, item est l'item associe
+ # command est une fonction python appelee sur selection graphique
+ # du noeud et rmenu est une fonction python appelee sur click droit sur le noeud
itemNode=None
def __init__(self):
@@ -101,7 +110,7 @@ class TreeItem:
def OnDoubleClick(self):
"""Called on a double-click on the item."""
-class Delegate:
+class Delegate(object):
def __init__(self, delegate=None):
self.object = delegate
self.__cache = {}
@@ -120,7 +129,7 @@ class Delegate:
return attr
def resetcache(self):
- for key in self.__cache.keys():
+ for key in list(self.__cache.keys()):
try:
delattr(self, key)
except AttributeError:
@@ -128,7 +137,7 @@ class Delegate:
self.__cache.clear()
def cachereport(self):
- keys = self.__cache.keys()
+ keys = list(self.__cache.keys())
keys.sort()
#print keys
@@ -137,15 +146,15 @@ class ObjectTreeItem(TreeItem,Delegate):
def __init__(self, appli, labeltext, object, setfunction=None):
self.labeltext = labeltext
self.appli = appli
- # L'objet délegué est stocké dans l'attribut object
- # L'objet associé à l'item est stocké dans l'attribut _object
- # Il peut etre obtenu par appel à la méthode getObject
- # Attention : le délégué peut etre différent de l'objet associé (MCLIST)
- # Dans le cas d'une MCListe de longueur 1, l'objet associé est la MCListe
- # et l'objet délégué est le MCFACT (object = _object.data[0])
+ # 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
+ # Attention : le delegue peut etre different de l'objet associe (MCLIST)
+ # Dans le cas d'une MCListe de longueur 1, l'objet associe est la MCListe
+ # et l'objet delegue est le MCFACT (object = _object.data[0])
Delegate.__init__(self,object)
# On cache l'objet initial (pour destruction eventuelle
- # ultérieure)
+ # ulterieure)
self._object = object
self.setfunction = setfunction
self.expandable = 1
@@ -159,7 +168,7 @@ class ObjectTreeItem(TreeItem,Delegate):
return self._object
def connect(self,channel,callable,args):
- """ Connecte la fonction callable (avec arguments args) à l'item self sur le
+ """ Connecte la fonction callable (avec arguments args) a l'item self sur le
canal channel
"""
#print self,channel,callable,args
@@ -168,7 +177,7 @@ class ObjectTreeItem(TreeItem,Delegate):
def copy(self):
"""
- Crée un item copie de self
+ Cree un item copie de self
"""
object = self._object.copy()
appli = copy(self.appli)
@@ -192,11 +201,11 @@ class ObjectTreeItem(TreeItem,Delegate):
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte à afficher dans le noeud représentant l'item
+ - le texte a afficher dans le noeud representant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
- # None --> fonte et couleur par défaut
+ # None --> fonte et couleur par defaut
return self.labeltext,None,None
def get_nature(self) :
@@ -206,36 +215,36 @@ class ObjectTreeItem(TreeItem,Delegate):
return self.object.nature
def get_regles(self):
- """ retourne les règles de l'objet pointé par self """
+ """ retourne les regles de l'objet pointe par self """
return self.object.get_regles()
def get_liste_mc_presents(self):
- """ Retourne la liste des mots-clés fils de l'objet pointé par self """
+ """ Retourne la liste des mots-cles fils de l'objet pointe par self """
return self.object.liste_mc_presents()
def get_val(self):
- """ Retourne le nom de la valeur de l'objet pointé par self dans le cas
- où celle-ci est un objet (ASSD) """
+ """ Retourne le nom de la valeur de l'objet pointe par self dans le cas
+ ou celle-ci est un objet (ASSD) """
return self.object.getval()
def get_definition(self):
"""
- Retourne l'objet definition de l'objet pointé par self
+ Retourne l'objet definition de l'objet pointe par self
"""
return self.object.definition
def get_liste_mc_ordonnee(self,liste,dico):
- """ retourne la liste ordonnée (suivant le catalogue) brute des mots-clés
- d'une entité composée dont le chemin complet est donné sous forme
+ """ retourne la liste ordonnee (suivant le catalogue) brute des mots-cles
+ d'une entite composee dont le chemin complet est donne sous forme
d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
- il faut encore réarranger cette liste (certains mots-clés déjà
- présents ne doivent plus être proposés, règles ...)"""
+ il faut encore rearranger cette liste (certains mots-cles deja
+ presents ne doivent plus etre proposes, regles ...)"""
return self.object.get_liste_mc_ordonnee(liste,dico)
def get_liste_mc_ordonnee_brute(self,liste,dico):
"""
- retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
- d'une entité composée dont le chemin complet est donné sous forme
+ retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
+ d'une entite composee dont le chemin complet est donne sous forme
d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
"""
return self.object.get_liste_mc_ordonnee_brute(liste,dico)
@@ -243,23 +252,23 @@ class ObjectTreeItem(TreeItem,Delegate):
def get_genealogie(self):
"""
Retourne la liste des noms des ascendants (noms de MCSIMP,MCFACT,MCBLOC ou ETAPE)
- de l'objet pointé par self
+ de l'objet pointe par self
"""
return self.object.get_genealogie()
def get_index_child(self,nom_fils):
"""
Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
- Nécessaire pour savoir à quelle position dans la liste des fils il faut ajouter
- le nouveau mot-clé
+ Necessaire pour savoir a quelle position dans la liste des fils il faut ajouter
+ le nouveau mot-cle
"""
return self.object.get_index_child(nom_fils)
def get_index_child_old(self,nom_fils):
"""
Retourne l'index dans la liste des fils de self du nouveau fils de nom nom_fils
- Nécessaire pour savoir à quelle position dans la liste des fils il faut ajouter
- le nouveau mot-clé
+ Necessaire pour savoir a quelle position dans la liste des fils il faut ajouter
+ le nouveau mot-cle
"""
liste_noms_mc_ordonnee = self.get_liste_mc_ordonnee_brute(self.get_genealogie(),self.get_jdc().cata_ordonne_dico)
liste_noms_mc_presents = self.object.liste_mc_presents()
@@ -267,19 +276,19 @@ class ObjectTreeItem(TreeItem,Delegate):
for nom in liste_noms_mc_ordonnee:
if nom in liste_noms_mc_presents or nom == nom_fils:
l.append(nom)
- # l contient les anciens mots-clés + le nouveau dans l'ordre
+ # l contient les anciens mots-cles + le nouveau dans l'ordre
return l.index(nom_fils)
def append_child(self,name,pos=None):
"""
- Permet d'ajouter un item fils à self
+ Permet d'ajouter un item fils a self
"""
if pos == 'first':
index = 0
elif pos == 'last':
index = len(self.liste_mc_presents())
- elif type(pos) == types.IntType :
- # la position est fixée
+ elif type(pos) == int :
+ # la position est fixee
index = pos
elif type(pos) == types.InstanceType:
# pos est un item. Il faut inserer name apres pos
@@ -292,8 +301,8 @@ class ObjectTreeItem(TreeItem,Delegate):
def append_brother(self,name,pos='after'):
"""
- Permet d'ajouter un frère à self
- par défaut on l'ajoute après self
+ Permet d'ajouter un frere a self
+ par defaut on l'ajoute apres self
"""
index = self._object.parent.get_index(self.getObject())
if pos == 'before':
@@ -301,7 +310,7 @@ class ObjectTreeItem(TreeItem,Delegate):
elif pos == 'after':
index = index +1
else:
- print (tr("%d n'est pas un index valide pour append_brother", pos))
+ print((tr("%d n'est pas un index valide pour append_brother", pos)))
return
return self.parent.addobject(name,index)
@@ -310,11 +319,11 @@ class ObjectTreeItem(TreeItem,Delegate):
return self.object.get_nom_etape()
def get_copie_objet(self):
- """ Retourne une copie de l'objet pointé par self """
+ """ Retourne une copie de l'objet pointe par self """
return self.object.copy()
def get_position(self):
- """ Retourne la valeur de l'attribut position de l'objet pointé par self """
+ """ Retourne la valeur de l'attribut position de l'objet pointe par self """
definition = self.get_definition()
try:
return getattr(definition,'position')
@@ -322,15 +331,15 @@ class ObjectTreeItem(TreeItem,Delegate):
return 'local'
def get_nom(self):
- """ Retourne le nom de l'objet pointé par self """
+ """ Retourne le nom de l'objet pointe par self """
return self.object.nom
def get_jdc(self):
- """ Retourne le jdc auquel appartient l'objet pointé par self """
+ """ Retourne le jdc auquel appartient l'objet pointe par self """
return self.object.jdc
def get_valeur(self):
- """ Retourne la valeur de l'objet pointé par self """
+ """ Retourne la valeur de l'objet pointe par self """
return self.object.valeur
def get_cr(self):
@@ -339,45 +348,45 @@ class ObjectTreeItem(TreeItem,Delegate):
def get_objet_commentarise(self):
"""
- Cette méthode retourne un objet commentarisé
- représentatif de self.object
- --> à surcharger par les différents items
+ Cette methode retourne un objet commentarise
+ representatif de self.object
+ --> a surcharger par les differents items
"""
raise EficasException("MESSAGE AU DEVELOPPEUR : il faut \
surcharger la methode get_objet_commentarise() \
pour la classe %s", self.__class__.__name__)
def isvalid(self):
- """ Retourne 1 si l'objet pointé par self est valide, 0 sinon"""
+ """ Retourne 1 si l'objet pointe par self est valide, 0 sinon"""
return self.object.isvalid()
def iscopiable(self):
"""
Retourne 1 si l'objet est copiable, 0 sinon
- Par défaut retourne 0
+ Par defaut retourne 0
"""
return 0
def get_mc_presents(self):
- """ Retourne le dictionnaire des mots-clés présents de l'objet pointé par self """
+ """ Retourne le dictionnaire des mots-cles presents de l'objet pointe par self """
return self.object.dict_mc_presents()
def verif_condition_regles(self,l_mc_presents):
return self.object.verif_condition_regles(l_mc_presents)
def get_fr(self):
- """ Retourne le fr de l'objet pointé par self """
+ """ Retourne le fr de l'objet pointe par self """
try:
return self.object.get_fr()
except:
return ""
def get_docu(self):
- """ Retourne la clé de doc de l'objet pointé par self """
+ """ Retourne la cle de doc de l'objet pointe par self """
return self.object.get_docu()
def set_valeur(self,new_valeur):
- """ Remplace la valeur de l'objet pointé par self par new_valeur """
+ """ Remplace la valeur de l'objet pointe par self par new_valeur """
return self.object.set_valeur(new_valeur)
def GetText(self):
@@ -422,14 +431,14 @@ class ObjectTreeItem(TreeItem,Delegate):
return sublist
def wait_fichier_init(self):
- """ Retourne 1 si l'object pointé par self attend un fichier d'initialisation
+ """ Retourne 1 si l'object pointe par self attend un fichier d'initialisation
(ex: macros POURSUITE et INCLUDE de Code_Aster), 0 SINON """
return self.object.definition.fichier_ini
def make_objecttreeitem(self,appli,labeltext, object, setfunction=None):
"""
Cette methode, globale pour les objets de type item, permet de construire et de retourner un objet
- de type item associé à l'object passé en argument.
+ de type item associe a l'object passe en argument.
"""
return make_objecttreeitem(appli,labeltext,object,setfunction)
@@ -448,7 +457,7 @@ class SequenceTreeItem(ObjectTreeItem):
return len(self._object)
def keys(self):
- return range(len(self._object))
+ return list(range(len(self._object)))
def GetIconName(self):
if self._object.isvalid():
@@ -462,7 +471,7 @@ class SequenceTreeItem(ObjectTreeItem):
return self._object.ajout_possible()
def get_index(self,child):
- """ Retourne le numéro de child dans la liste des enfants de self """
+ """ Retourne le numero de child dans la liste des enfants de self """
return self._object.get_index(child.getObject())
def GetText(self):
@@ -476,7 +485,7 @@ class SequenceTreeItem(ObjectTreeItem):
def suppitem(self,item):
try :
self._object.remove(item.getObject())
- # la liste peut être retournée vide !
+ # la liste peut etre retournee vide !
message = "Mot-clef " + item.getObject().nom + " supprime"
self.appli.affiche_infos(message)
return 1
diff --git a/Editeur/TroisDPal.py b/Editeur/TroisDPal.py
index 3d70fcf3..2e79a801 100644
--- a/Editeur/TroisDPal.py
+++ b/Editeur/TroisDPal.py
@@ -21,10 +21,16 @@
Ce module contient la classe 3Dpilote qui va creer les ordres
de pilotage de l idl PAL pour un element de structure
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import object
+except :
+ pass
import generator
from Extensions.i18n import tr
-class TroisDPilote:
+class TroisDPilote(object):
def __init__(self,node,appli):
self.node=node
@@ -34,7 +40,7 @@ class TroisDPilote:
"""
"""
format="vers3DSalome"
- if generator.plugins.has_key(format):
+ if format in generator.plugins :
# Le generateur existe on l'utilise
g=generator.plugins[format]()
g.init_jdc(self.node.get_jdc())
diff --git a/Editeur/__init__.py b/Editeur/__init__.py
index 0885699e..74c8fed7 100644
--- a/Editeur/__init__.py
+++ b/Editeur/__init__.py
@@ -18,6 +18,6 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce package contient les fonctionnalités COMMUNES nécessaires
- aux deux éditeurs graphiques QT et TK
+ Ce package contient les fonctionnalites COMMUNES necessaires
+ aux deux editeurs graphiques QT et TK
"""
diff --git a/Editeur/analyse_catalogue.py b/Editeur/analyse_catalogue.py
index dd5000fe..474593a4 100644
--- a/Editeur/analyse_catalogue.py
+++ b/Editeur/analyse_catalogue.py
@@ -17,12 +17,22 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-from string import split,strip,lowercase,uppercase
-import re,string,cPickle,os
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except :
+ pass
+
+import re,six.moves.cPickle,os
from Extensions.i18n import tr
from Noyau.N_CR import CR
+from six.moves import range
+
#
__Id__="$Id: analyse_catalogue.py,v 1.9.8.1.2.1.2.6 2014-01-23 09:14:44 pnoyret Exp $"
__version__="$Name: $"
@@ -46,7 +56,7 @@ def cherche_nom(text):
return a.group(1)
def cherche_args(text):
- text = strip(text)
+ text = text.strip()
longueur = len(text)
if text[0] != '(u':
return 'erreur !'
@@ -69,15 +79,15 @@ def cherche_args(text):
except :
return text[1:i],''
-class ENTITE:
+class ENTITE(object):
def cherche_enfants(self):
try :
- self.text = strip(self.text)
+ self.text = self.text.strip()
liste = re.split(u'=',self.text,1)
if len(liste)>1 :
arg1=liste[0]
reste=liste[1]
- reste = strip(reste)
+ reste = reste.strip()
if reste[0:4] in l_noms :
nom_mc = cherche_nom(arg1+'=')
arg_mc, self.text = cherche_args(reste[4:])
@@ -99,7 +109,7 @@ class ENTITE:
mc = SIMP_CATA(nom_mc,self)
self.children.append(mc)
else :
- print (tr("Erreur dans la creation du mot-cle : %s", nom_mc))
+ print (tr("Erreur dans la creation du mot-cle : %s", nom_mc) )
def construit_liste_dico(self):
l=[]
@@ -137,7 +147,7 @@ class COMMANDE_CATA(ENTITE) :
texte_cmd = texte_cmd + child.affiche(1)
return texte_cmd
-class SIMP_CATA :
+class SIMP_CATA(object) :
def __init__(self,nom,parent):
self.nom = nom
self.cr = CR()
@@ -170,7 +180,7 @@ class FACT_CATA(ENTITE) :
text = text + child.affiche(ind+1)
return text
-class CATALOGUE_CATA:
+class CATALOGUE_CATA(object):
def __init__(self,parent,fichier):
self.parent = parent
self.fichier=fichier
@@ -187,7 +197,7 @@ class CATALOGUE_CATA:
self.texte_complet=f.read()
f.close()
except :
- print (tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier)))
+ print((tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier))))
self.cr.fatal(tr("Impossible d'ouvrir le fichier : %s ", str(self.fichier)))
def constr_list_txt_cmd(self,text):
@@ -198,7 +208,6 @@ class CATALOGUE_CATA:
self.liste_textes_commandes.append(liste[i]+')')
def analyse_commande_old(self,text):
- #if strip(text) == '' or strip(text) ==')': return
liste = re.split(u'OPER *\(u',text,1)
if len(liste) < 2 :
liste = re.split(u'PROC *\(u',text,1)
@@ -213,21 +222,20 @@ class CATALOGUE_CATA:
fin = liste[1]
nom_cmd = cherche_nom(debut)
if nom_cmd == 'erreur !':
- print (tr("Erreur dans la recherche du nom de la commande : "), debut)
+ print((tr("Erreur dans la recherche du nom de la commande : "), debut))
args_cmd,toto = cherche_args(u'(u'+fin)
if args_cmd == 'erreur !':
- print (tr("Erreur dans la recherche des args de la commande :") , debut)
+ print((tr("Erreur dans la recherche des args de la commande :") , debut))
cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
self.liste_commandes.append(cmd)
def analyse_commande(self,text):
- #if strip(text) == '' or strip(text) ==')': return
for nom_cmd in l_noms_commandes:
liste = re.split(nom_cmd+' *\(u',text,1)
if len(liste) == 2 : break
if len(liste) < 2 :
- print (tr("le texte a analyser n'est pas celui d'une commande connue : \
- %(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text}))
+ print((tr("le texte a analyser n'est pas celui d'une commande connue : \
+ %(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text})))
self.cr.fatal(tr("le texte a analyser n'est pas celui d'une commande connue : \
%(v_1)s %(v_2)s", {'v_1': str(l_noms_commandes), 'v_2': text}))
return
@@ -235,11 +243,11 @@ class CATALOGUE_CATA:
fin = liste[1]
nom_cmd = cherche_nom(debut)
if nom_cmd == 'erreur !':
- print ( tr("Erreur dans la recherche du nom de la commande : "), debut)
+ print(( tr("Erreur dans la recherche du nom de la commande : "), debut))
args_cmd,toto = cherche_args(u'(u'+fin)
if args_cmd == 'erreur !':
- print ( tr("Erreur dans la recherche des args de la commande : "), debut)
- print (tr(fin))
+ print(( tr("Erreur dans la recherche des args de la commande : "), debut))
+ print((tr(fin)))
cmd=COMMANDE_CATA(nom_cmd,args_cmd,self)
self.liste_commandes.append(cmd)
@@ -297,7 +305,7 @@ def make_cata_pickle(fic_cata):
fic_cata_p = os.path.splitext(fic_cata)[0]+'_pickled.py'
cata_ordonne = analyse_catalogue(None,fic_cata)
f = open(fic_cata_p,'w+')
- p = cPickle.Pickler(f)
+ p = six.moves.cPickle.Pickler(f)
p.dump(cata_ordonne.entites)
f.close()
diff --git a/Editeur/analyse_catalogue_initial.py b/Editeur/analyse_catalogue_initial.py
index 983432bf..b0ea99f8 100644
--- a/Editeur/analyse_catalogue_initial.py
+++ b/Editeur/analyse_catalogue_initial.py
@@ -17,8 +17,14 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-from string import split,strip,lowercase,uppercase
-import re,string,os
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
+import re,os
from Extensions.i18n import tr
#
@@ -27,7 +33,7 @@ __version__="$Name: V7_main $"
#
-class Catalogue_initial:
+class Catalogue_initial(object):
def __init__(self,fichier):
self.liste_commandes=[]
self.lignes=[]
@@ -41,7 +47,7 @@ class Catalogue_initial:
self.lignes=f.readlines()
f.close()
except :
- print tr("Impossible d'ouvrir le fichier : %s", str(self.fichier))
+ print(tr("Impossible d'ouvrir le fichier : %s", str(self.fichier)))
def constr_list_txt_cmd(self):
pattern = '^# Ordre Catalogue '
@@ -58,7 +64,7 @@ def analyse_catalogue(nom_cata):
if __name__ == "__main__" :
- monCata="/local/noyret/Install_Eficas/EficasQT4/Openturns_StudyOpenTURNS_Cata_Study_V4.py"
+ monCata="/local/noyret/Install_Eficas/EficasQT4/Openturns_StudyOpenTURNS_Cata_Study_V4.py"
analyse_catalogue(monCata)
diff --git a/Editeur/autre_analyse_cata.py b/Editeur/autre_analyse_cata.py
index 979b1afb..d6411f7c 100644
--- a/Editeur/autre_analyse_cata.py
+++ b/Editeur/autre_analyse_cata.py
@@ -21,6 +21,8 @@
Ce module sert a retrouver l'ordre des mots cles d'un catalogue de
commandes
"""
+from __future__ import absolute_import
+from __future__ import print_function
if __name__ == "__main__" :
import sys
sys.path[:0]=[".."]
@@ -48,7 +50,7 @@ def traite_entite(entite,liste_simp_reel):
de entite
"""
l=[]
- for k,v in entite.entites.items():
+ for k,v in list(entite.entites.items()):
if isinstance(v,NUPL):
traite_entiteNUPL(v)
else:
@@ -121,7 +123,7 @@ if __name__ == "__main__" :
for mocle in entite.ordre_mc:
print_entite(entite.entites[mocle],dec=dec+' ')
- for k,v in dico.items():
+ for k,v in list(dico.items()):
print_entite(v,dec='')
- print (dico.keys())
+ print (dico)
diff --git a/Editeur/basestyle.py b/Editeur/basestyle.py
index c9a806b0..3448a567 100644
--- a/Editeur/basestyle.py
+++ b/Editeur/basestyle.py
@@ -16,7 +16,11 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-class STYLE:
+try :
+ from builtins import object
+except : pass
+
+class STYLE(object):
background='gray90'
foreground='black'
entry_background='white'
diff --git a/Editeur/cata2Xml.py b/Editeur/cata2Xml.py
index 763ee03b..f739cba7 100755
--- a/Editeur/cata2Xml.py
+++ b/Editeur/cata2Xml.py
@@ -19,6 +19,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
import sys,os
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__)),'../InterfaceQT4'))
@@ -40,7 +47,7 @@ def prettify(elem):
return reparsed.toprettyxml(indent=" ")
-class CatalogueXML:
+class CatalogueXML(object):
def __init__(self,cata,cataName):
self.fichier="/tmp/XML/"+cataName+".xml"
self.cata=cata
@@ -61,7 +68,7 @@ class CatalogueXML:
f.write(prettify(self.first))
f.close()
except :
- print ("Impossible d'ecrire le fichier : "+ str(self.fichier))
+ print(("Impossible d'ecrire le fichier : "+ str(self.fichier)))
def constr_list_txt_cmd(self):
mesCommandes=self.cata.JdC.commandes
diff --git a/Editeur/catadesc.py b/Editeur/catadesc.py
index daa349da..9be0229e 100644
--- a/Editeur/catadesc.py
+++ b/Editeur/catadesc.py
@@ -17,7 +17,11 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-class CatalogDescription:
+try :
+ from builtins import object
+except : pass
+
+class CatalogDescription(object):
def __init__(self, identifier, cata_file_path, file_format = "python",
default = False, code = None,ss_code=None, user_name = None,
diff --git a/Editeur/comploader.py b/Editeur/comploader.py
index cb1f9ebf..03f3633d 100644
--- a/Editeur/comploader.py
+++ b/Editeur/comploader.py
@@ -28,20 +28,21 @@
- gettreeitem(object) -> type d'item : fonction qui retourne un type
d'item correspondant au type de l'objet noyau fourni.
- make_objecttreeitem(appli,labeltext, object, setfunction=None) -> item : fonction qui retourne un item
- correspondant à l'objet noyau fourni.
+ correspondant a l'objet noyau fourni.
"""
-# import généraux
+# import generaux
+from __future__ import absolute_import
import os,glob,types
-# Dictionnaire {object : item} permettant d'associer un item à un object
-# Ce dictionnaire est renseigné par la méthode charger_composants
+# Dictionnaire {object : item} permettant d'associer un item a un object
+# Ce dictionnaire est renseigne par la methode charger_composants
composants = {}
def charger_composants(Ihm="TK"):
"""
Cette fonction a pour but de charger tous les modules composants graphiques
- (fichiers compo*.py dans le même répertoire que ce module )
- et de remplir le dictionnaire composants utilisé par make_objecttreeitem
+ (fichiers compo*.py dans le meme repertoire que ce module )
+ et de remplir le dictionnaire composants utilise par make_objecttreeitem
"""
reper=os.path.dirname(__file__)
if Ihm == "TK" :
@@ -62,8 +63,8 @@ def charger_composants(Ihm="TK"):
def gettreeitem(object):
"""
- Cette fonction retourne la classe item associée à l'objet object.
- Cette classe item dépend bien sûr de la nature de object, d'où
+ Cette fonction retourne la classe item associee a l'objet object.
+ Cette classe item depend bien sur de la nature de object, d'ou
l'interrogation du dictionnaire composants
"""
# Si la definition de l'objet a un attribut itemeditor, il indique
@@ -81,7 +82,7 @@ def gettreeitem(object):
pass
# Puis une eventuelle classe heritee (aleatoire car sans ordre)
- for e in composants.keys():
+ for e in list(composants.keys()):
if e and isinstance(object,e):
itemtype= composants[e]
return itemtype
@@ -93,7 +94,7 @@ def gettreeitem(object):
def make_objecttreeitem(appli,labeltext, object, setfunction=None):
"""
Cette fonction permet de construire et de retourner un objet
- de type item associé à l'object passé en argument.
+ de type item associe a l'object passe en argument.
"""
c = gettreeitem(object)
#print appli,labeltext, object, setfunction
diff --git a/Editeur/comploaderqt4.py b/Editeur/comploaderqt4.py
deleted file mode 100644
index 019e59f9..00000000
--- a/Editeur/comploaderqt4.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-"""
- Module de chargement des composants et de mapping des objets du noyau
- Accas vers les items d'EFICAS
-
- - composants : dictionnaire de stockage des relations entre types
- d'objet du noyau et types d'item
- - charger_composants() : fonction de chargement des composants. Retourne
- le dictionnaire composants.
- - gettreeitem(object) -> type d'item : fonction qui retourne un type
- d'item correspondant au type de l'objet noyau fourni.
- - make_objecttreeitem(appli,labeltext, object, setfunction=None) -> item : fonction qui retourne un item
- correspondant à l'objet noyau fourni.
-"""
-# import généraux
-import os,glob,types
-
-# Dictionnaire {object : item} permettant d'associer un item à un object
-# Ce dictionnaire est renseigné par la méthode charger_composants
-composants = {}
-
-def charger_composants(Ihm="TK"):
- """
- Cette fonction a pour but de charger tous les modules composants graphiques
- (fichiers compo*.py dans le même répertoire que ce module )
- et de remplir le dictionnaire composants utilisé par make_objecttreeitem
- """
- reper=os.path.dirname(__file__)
- if Ihm == "TK" :
- repertoire=reper+"/../InterfaceTK"
- package="InterfaceTK"
- else :
- repertoire=reper+"/../InterfaceQT4"
- package="InterfaceQT4"
- listfich=glob.glob(os.path.join(repertoire, "compo*.py"))
- for fichier in listfich:
- m= os.path.basename(fichier)[:-3]
- module=__import__(package,globals(),locals(),[m])
- module = getattr(module, m)
- composants[module.objet]=module.treeitem
- return composants
-
-def gettreeitem(object):
- """
- Cette fonction retourne la classe item associée à l'objet object.
- Cette classe item dépend bien sûr de la nature de object, d'où
- l'interrogation du dictionnaire composants
- """
- # Si la definition de l'objet a un attribut itemeditor, il indique
- # la classe a utiliser pour l'item
- try:
- return object.definition.itemeditor
- except:
- pass
-
- # On cherche ensuite dans les composants (plugins)
- try:
- itemtype= composants[object.__class__]
- return itemtype
- except:
- pass
-
- # Puis une eventuelle classe heritee (aleatoire car sans ordre)
- for e in composants.keys():
- if e and isinstance(object,e):
- itemtype= composants[e]
- return itemtype
-
- # Si on n'a rien trouve dans les composants on utilise l'objet par defaut
- itemtype=composants[None]
- return itemtype
-
-def make_objecttreeitem(appli,labeltext, object, setfunction=None):
- """
- Cette fonction permet de construire et de retourner un objet
- de type item associé à l'object passé en argument.
- """
- c = gettreeitem(object)
- return c(appli,labeltext, object, setfunction)
-
diff --git a/Editeur/import_code.py b/Editeur/import_code.py
index 030e98fb..bf207e7a 100644
--- a/Editeur/import_code.py
+++ b/Editeur/import_code.py
@@ -18,9 +18,10 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module réalise toutes les mises à jour du chemin pour
+ Ce module realise toutes les mises a jour du chemin pour
les imports de modules Python
"""
+from __future__ import absolute_import
import sys
import os
@@ -30,7 +31,7 @@ prefs_Code=__import__(name)
INSTALLDIR=prefs_Code.INSTALLDIR
# Ce chemin permet d'importer les modules Noyau et Validation
-# représentant le code utilisé (si fourni)
+# representant le code utilise (si fourni)
# Ensuite on utilise les packages de l'intallation
if hasattr(prefs_Code,'CODE_PATH'):
if prefs_Code.CODE_PATH:
diff --git a/Editeur/listePatrons.py b/Editeur/listePatrons.py
index 46c98908..66e406bf 100644
--- a/Editeur/listePatrons.py
+++ b/Editeur/listePatrons.py
@@ -16,35 +16,41 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+try :
+ from builtins import range
+ from builtins import object
+except : pass
import os
import re
+from six.moves import range
sous_menus={
# "OPENTURNS_STUDY" : {0:{"Essai":"Std.comm"}},
# "OPENTURNS_WRAPPER" : {0:{"Essai":"wrapper_exemple.comm"}},
}
-class listePatrons :
+class listePatrons(object) :
def __init__(self,code = "ASTER"):
repIni=os.path.dirname(os.path.abspath(__file__))
self.rep_patrons=repIni+"/Patrons/"+code
self.sous_menu={}
- if code in sous_menus.keys() :
+ if code in sous_menus :
self.sous_menu=sous_menus[code]
self.code=code
self.liste={}
self.traite_liste()
def traite_liste(self):
- if not (self.code in sous_menus.keys()) : return
+ if not (self.code in sous_menus) : return
if not (os.path.exists(self.rep_patrons)) : return
for file in os.listdir(self.rep_patrons):
for i in range(len(self.sous_menu)):
- clef=self.sous_menu[i].keys()[0]
+ clef=list(self.sous_menu[i].keys())[0]
chaine=self.sous_menu[i][clef]
if re.search(chaine,file) :
- if clef in self.liste.keys():
+ if clef in self.liste:
self.liste[clef].append(file)
else :
self.liste[clef]=[file]
diff --git a/Editeur/session.py b/Editeur/session.py
index 9babc7c8..954f277d 100644
--- a/Editeur/session.py
+++ b/Editeur/session.py
@@ -55,6 +55,12 @@ comm=ppp
La session utilisera le catalogue V7.3 en mode debug.
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except :
+ pass
try:
import optparse
from optparse import OptionValueError
@@ -63,7 +69,7 @@ except:
from Tools.optparse import OptionValueError
import os,traceback
-import ConfigParser
+import six.moves.configparser
import re
from Extensions.i18n import tr
@@ -137,7 +143,7 @@ def check_jdc(config,jdc,parser,fich):
parser : objet analyseur de la ligne de commande
fich : nom du fichier .ini en cours d'analyse
config : objet de la classe ConfigParser permettant de parser le fichier fich
- jdc : nom de la section du fichier fich à analyser
+ jdc : nom de la section du fichier fich a analyser
"""
d_study={}
@@ -192,7 +198,7 @@ def check_fich(option, opt_str, fich, parser):
if not hasattr(parser.values,"studies"):
parser.values.studies=[]
parser.values.comm=[]
- config = ConfigParser.ConfigParser()
+ config = six.moves.configparser.ConfigParser()
config.read([fich])
if not config.has_option(u"jdc","jdc"):
raise OptionValueError(tr(" jdc %s manque option jdc dans section jdc", str(fich)))
@@ -213,19 +219,19 @@ def check_fich(option, opt_str, fich, parser):
def print_pours(d_pours,dec=''):
# Les fichiers includes d'abord
- for k,v in d_pours.items():
+ for k,v in list(d_pours.items()):
if k in (u"pours","comm"):continue
- print ( tr("%(v_1)s include %(v_2)s : %(v_3)s", {'v_1': str(dec), 'v_2': str(k), 'v_3': str(v)}))
+ print(( tr("%(v_1)s include %(v_2)s : %(v_3)s", {'v_1': str(dec), 'v_2': str(k), 'v_3': str(v)})))
- if d_pours.has_key(u"pours"):
+ if "pours" in d_pours:
# Description de la poursuite
- print (tr("%(v_1)s fichier poursuite: %(v_2)s", {'v_1': dec, 'v_2': d_pours["pours"]["comm"]}))
+ print((tr("%(v_1)s fichier poursuite: %(v_2)s", {'v_1': dec, 'v_2': d_pours["pours"]["comm"]})))
print_pours(d_pours["pours"],dec=dec+"++")
def print_d_env():
if d_env.studies is None:return
for study in d_env.studies:
- print (tr("nom etude : %s", study["comm"]))
+ print((tr("nom etude : %s", study["comm"])))
print_pours(study,dec="++")
def create_parser():
@@ -291,7 +297,7 @@ def parse(args):
options.comm.append(file)
options.studies.append({"comm":file})
elif len(args) == 1 and options.locale:
- print (tr("Localisation specifiee pour l'application."))
+ print((tr("Localisation specifiee pour l'application.")))
else:
parser.error(tr("Nombre incorrect d'arguments"))
@@ -317,14 +323,14 @@ def get_unit(d_study,appli):
def get_dunit(d_unit,appli):
d={}
- if d_unit.has_key(u"pours"):
+ if 'pours' in d_unit:
# on a une poursuite
comm=d_unit["pours"]["comm"]
g=get_dunit(d_unit["pours"],appli)
text=appli.get_source(comm)
d[None]=comm,text,g
- for k,v in d_unit.items():
+ for k,v in list(d_unit.items()):
if k in (u"pours","comm"): continue
text=appli.get_source(v)
d[k]=v,text,d
diff --git a/Editeur/styles.py b/Editeur/styles.py
index a899043c..2853600c 100644
--- a/Editeur/styles.py
+++ b/Editeur/styles.py
@@ -17,20 +17,16 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
import os
import prefs
name='prefs_'+prefs.code
prefsCode=__import__(name)
-import basestyle
from basestyle import STYLE,style
inistylefile=os.path.join(prefsCode.repIni,"style.py")
if os.path.isfile(inistylefile):
- execfile(inistylefile)
-
-userstylefile=os.path.expanduser("~/Eficas_install/style.py")
-if os.path.isfile(userstylefile):
- execfile(userstylefile)
+ exec(compile(open(inistylefile).read(), inistylefile, 'exec'))
import fontes
for attr in dir(style):
diff --git a/Editeur/uiinfo.py b/Editeur/uiinfo.py
index 808d2d34..98922e62 100644
--- a/Editeur/uiinfo.py
+++ b/Editeur/uiinfo.py
@@ -21,6 +21,7 @@
Ce module sert a construire les structures de donnees porteuses
des informations liees aux groupes de commandes
"""
+from __future__ import absolute_import
import types
class UIINFO:
@@ -41,7 +42,7 @@ class UIINFO:
if groupes == None:
# L'entite n'a pas de groupe associe. On lui associe le groupe "DEFAUT"
self.groupes=("DEFAUT",)
- if type(self.groupes) != types.TupleType:
+ if type(self.groupes) != tuple:
self.groupes=(self.groupes,)
def traite_commande(commande,niveau):
@@ -59,7 +60,7 @@ def traite_commande(commande,niveau):
#else:
# On ajoute la commande dans tous les groupes specifies
for grp in UI.groupes:
- if not niveau.dict_groupes.has_key(grp): niveau.dict_groupes[grp]=[]
+ if not grp in niveau.dict_groupes: niveau.dict_groupes[grp]=[]
niveau.dict_groupes[grp].append(commande.nom)
def traite_niveau(niveau):
@@ -70,7 +71,7 @@ def traite_niveau(niveau):
traite_commande(oper,niveau)
# A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
# sans doublon
- niveau.liste_groupes=niveau.dict_groupes.keys()
+ niveau.liste_groupes=list(niveau.dict_groupes.keys())
# On ordonne les listes alphabetiquement
niveau.liste_groupes.sort()
for v in niveau.dict_groupes.values():v.sort()
@@ -97,7 +98,7 @@ def traite_UIinfo(cata):
traite_commande(commande,cata.JdC)
# A la fin les cles du dictionnaire dict_groupes donnent la liste des groupes
# sans doublon
- cata.JdC.liste_groupes=cata.JdC.dict_groupes.keys()
+ cata.JdC.liste_groupes=list(cata.JdC.dict_groupes.keys())
# On ordonne les listes alphabetiquement
cata.JdC.liste_groupes.sort()
for v in cata.JdC.dict_groupes.values():v.sort()
@@ -110,4 +111,3 @@ def traite_UIinfo(cata):
-
diff --git a/Editeur/utils.py b/Editeur/utils.py
index 922b975e..dd5ac0cd 100644
--- a/Editeur/utils.py
+++ b/Editeur/utils.py
@@ -75,8 +75,6 @@ def save_in_file(file,text,dir=None):
retourne 1 si OK 0 sinon
"""
try :
- import string
- #file=string.split(file,"/")[-1]
if dir != None:
os.chdir(dir)
f=open(file,'w')
diff --git a/Extensions/commande_comm.py b/Extensions/commande_comm.py
index ec974970..e9458c6f 100644
--- a/Extensions/commande_comm.py
+++ b/Extensions/commande_comm.py
@@ -17,7 +17,12 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import os,traceback,string
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+import os,traceback
import re
from Noyau.N_CR import CR
@@ -28,7 +33,7 @@ from Extensions.i18n import tr
class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
"""
- Cette classe sert à définir les objets de type Commande commentarisée
+ Cette classe sert a definir les objets de type Commande commentarisee
"""
nature = "COMMANDE_COMMENTARISEE"
idracine='_comm'
@@ -56,10 +61,10 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def report(self):
"""
- Génère l'objet rapport (classe CR)
+ Genere l'objet rapport (classe CR)
"""
self.cr=CR()
- if not self.isvalid(): self.cr.warn(tr("Objet commande commentarisé invalide"))
+ if not self.isvalid(): self.cr.warn(tr("Objet commande commentarise invalide"))
return self.cr
def copy(self):
@@ -82,13 +87,13 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def get_valeur(self) :
"""
- Retourne la valeur de self, cad le texte de la commande commentarisée
+ Retourne la valeur de self, cad le texte de la commande commentarisee
"""
return self.valeur
def register(self):
"""
- Enregistre la commande commenatrisée dans la liste des étapes de son parent lorsque celui-ci
+ Enregistre la commande commenatrisee dans la liste des etapes de son parent lorsque celui-ci
est un JDC
"""
self.parent.register(self)
@@ -101,20 +106,20 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def ident(self):
"""
- Retourne le nom interne associé à self
+ Retourne le nom interne associe a self
Ce nom n'est jamais vu par l'utilisateur dans EFICAS
"""
return self.nom
def isrepetable(self):
"""
- Indique si self est répétable ou non : retourne toujours 1
+ Indique si self est repetable ou non : retourne toujours 1
"""
return 1
def get_attribut(self,nom_attribut) :
"""
- Retourne l'attribut de nom nom_attribut de self (ou hérité)
+ Retourne l'attribut de nom nom_attribut de self (ou herite)
"""
if hasattr(self,nom_attribut) :
return getattr(self,nom_attribut)
@@ -136,8 +141,8 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def supprime(self):
"""
- Méthode qui supprime toutes les boucles de références afin que l'objet puisse
- être correctement détruit par le garbage collector
+ Methode qui supprime toutes les boucles de references afin que l'objet puisse
+ etre correctement detruit par le garbage collector
"""
self.parent = None
self.etape = None
@@ -169,15 +174,15 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def uncomment(self):
"""
- Cette méthode a pour but de décommentariser l'objet courant,
+ Cette methode a pour but de decommentariser l'objet courant,
cad de retourner un tuple contenant :
- - l'objet CMD associé
- - le nom de la sdprod éventuellement produite (sinon None)
+ - l'objet CMD associe
+ - le nom de la sdprod eventuellement produite (sinon None)
"""
- # on récupère le contexte avant la commande commentarisée
+ # on recupere le contexte avant la commande commentarisee
context_ini = self.jdc.get_contexte_avant(self)
try:
- # on essaie de créer un objet JDC...
+ # on essaie de creer un objet JDC...
CONTEXT.unset_current_step()
if re.search('Fin Commentaire',self.valeur) :
self.valeur=self.valeur.replace('Fin Commentaire','')
@@ -193,12 +198,12 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
#self.jdc.set_context()
raise AsException(tr("Erreur"),e.__str__())
if len(J.cr.crfatal)>0 :
- # des erreurs fatales ont été rencontrées
+ # des erreurs fatales ont ete rencontrees
#self.jdc.set_context()
print ('erreurs fatales !!!')
- raise AsException(tr("Erreurs fatales"),string.join(J.cr.crfatal))
+ raise AsException(tr("Erreurs fatales"),''.join(J.cr.crfatal))
if not J.etapes :
- # des erreurs ont été rencontrées
+ # des erreurs ont ete rencontrees
raise AsException(tr("Impossible reconstruire commande\n"),str(J.cr))
#self.jdc.set_context()
@@ -230,24 +235,24 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def isactif(self):
"""
- Booléenne qui retourne 1 si self est valide, 0 sinon
+ Booleenne qui retourne 1 si self est valide, 0 sinon
"""
return self.actif
def verif_condition_bloc(self):
"""
Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la définition) de self et
+ (en fonction du catalogue donc de la definition) de self et
retourne deux listes :
- - la première contient les noms des blocs à rajouter
- - la seconde contient les noms des blocs à supprimer
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
"""
return [],[]
def verif_condition_regles(self,liste_presents):
"""
- Retourne la liste des mots-clés à rajouter pour satisfaire les règles
- en fonction de la liste des mots-clés présents
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
"""
return []
@@ -261,14 +266,14 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def verif_existence_sd(self):
"""
- Vérifie que les structures de données utilisées dans self existent bien dans le contexte
- avant étape, sinon enlève la référence à ces concepts
- --> sans objet pour les commandes commentarisées
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la reference a ces concepts
+ --> sans objet pour les commandes commentarisees
"""
pass
def control_sdprods(self,d):
- """sans objet pour les commandes commentarisées"""
+ """sans objet pour les commandes commentarisees"""
pass
def close(self):
diff --git a/Extensions/commentaire.py b/Extensions/commentaire.py
index b4f8f842..4e68dcc4 100644
--- a/Extensions/commentaire.py
+++ b/Extensions/commentaire.py
@@ -19,9 +19,10 @@
#
"""
Ce module contient la classe COMMENTAIRE qui sert dans EFICAS
- pour gérer les commentaires dans un JDC
+ pour gerer les commentaires dans un JDC
"""
+from __future__ import absolute_import
from Noyau.N_CR import CR
from Noyau import N_OBJECT
from Ihm import I_OBJECT
@@ -29,7 +30,7 @@ from Extensions.i18n import tr
class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
"""
- Cette classe permet de créer des objets de type COMMENTAIRE
+ Cette classe permet de creer des objets de type COMMENTAIRE
"""
nature = 'COMMENTAIRE'
idracine = '_comm'
@@ -41,8 +42,8 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
self.jdc = self.parent = CONTEXT.get_current_step()
else:
self.jdc = self.parent = parent
- # La classe COMMENTAIRE n'a pas de définition. On utilise self
- # pour complétude
+ # La classe COMMENTAIRE n'a pas de definition. On utilise self
+ # pour completude
self.definition=self
self.nom=''
self.niveau = self.parent.niveau
@@ -52,12 +53,12 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def register(self):
"""
- Enregistre le commentaire dans la liste des étapes de son parent
+ Enregistre le commentaire dans la liste des etapes de son parent
lorsque celui-ci est un JDC
"""
if self.parent.nature == 'JDC':
# le commentaire est entre deux commandes:
- # il faut l'enregistrer dans la liste des étapes
+ # il faut l'enregistrer dans la liste des etapes
self.parent.register(self)
def copy(self):
@@ -76,7 +77,7 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
return 0
def isrepetable(self):
- """ Indique si self est répétable ou non : retourne toujours 1 """
+ """ Indique si self est repetable ou non : retourne toujours 1 """
return 1
def active(self):
@@ -94,14 +95,14 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def isactif(self):
"""
- Booléenne qui retourne 1 si self est valide, 0 sinon
+ Booleenne qui retourne 1 si self est valide, 0 sinon
"""
return self.actif
def supprime(self):
"""
- Méthode qui supprime toutes les boucles de références afin que
- l'objet puisse être correctement détruit par le garbage collector
+ Methode qui supprime toutes les boucles de references afin que
+ l'objet puisse etre correctement detruit par le garbage collector
"""
self.parent=None
self.jdc=None
@@ -141,13 +142,13 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
pass
def report(self):
- """ Génère l'objet rapport (classe CR) """
+ """ Genere l'objet rapport (classe CR) """
self.cr=CR()
if not self.isvalid(): self.cr.warn(tr("Objet commentaire non valorise"))
return self.cr
def ident(self):
- """ Retourne le nom interne associé à self
+ """ Retourne le nom interne associe a self
Ce nom n'est jamais vu par l'utilisateur dans EFICAS
"""
return self.nom
@@ -161,17 +162,17 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) :
def verif_condition_bloc(self):
"""
Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la définition) de self et
+ (en fonction du catalogue donc de la definition) de self et
retourne deux listes :
- - la première contient les noms des blocs à rajouter
- - la seconde contient les noms des blocs à supprimer
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
"""
return [],[]
def verif_condition_regles(self,liste_presents):
"""
- Retourne la liste des mots-clés à rajouter pour satisfaire les règles
- en fonction de la liste des mots-clés présents
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
"""
return []
diff --git a/Extensions/eficas_exception.py b/Extensions/eficas_exception.py
index 90b3fc66..6faae636 100644
--- a/Extensions/eficas_exception.py
+++ b/Extensions/eficas_exception.py
@@ -20,6 +20,7 @@ This class supports the internationalization mechanism provided in
the ``i18n`` module.
"""
+from __future__ import absolute_import
class EficasException(Exception):
"""
``EficasException`` class, which embeds the translation mechanism.
diff --git a/Extensions/etape_niveau.py b/Extensions/etape_niveau.py
index 07d6a313..bae8234f 100644
--- a/Extensions/etape_niveau.py
+++ b/Extensions/etape_niveau.py
@@ -21,6 +21,7 @@
Ce module contient la classe ETAPE_NIVEAU qui sert a
concretiser les niveaux au sein d'un JDC
"""
+from __future__ import absolute_import
import traceback
from Noyau import N_OBJECT
@@ -47,12 +48,12 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
def register(self,etape):
"""
- Enregistre la commande étape :
+ Enregistre la commande etape :
- si editmode = 0 : on est en mode relecture d'un fichier de commandes
- auquel cas on ajoute etape à la fin de la liste self.etapes
- - si editmode = 1 : on est en mode ajout d'étape depuis eficas auquel cas
- cette méthode ne fait rien, c'est addentité qui enregistre etape
- à la bonne place dans self.etapes
+ auquel cas on ajoute etape a la fin de la liste self.etapes
+ - si editmode = 1 : on est en mode ajout d'etape depuis eficas auquel cas
+ cette methode ne fait rien, c'est addentite qui enregistre etape
+ a la bonne place dans self.etapes
"""
if self.editmode : return
self.etapes.append(etape)
@@ -72,7 +73,7 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
if self.definition.actif == 1 :
return 1
else :
- # self.actif est une condition à évaluer dans un certain contexte ...
+ # self.actif est une condition a evaluer dans un certain contexte ...
d = self.cree_dict_valeurs()
try:
t=eval(self.definition.actif,d)
@@ -83,8 +84,8 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
def cree_dict_valeurs(self):
"""
- Retourne le dictionnaire des frères aînés de self composé des couples :
- {nom_frère isvalid()}
+ Retourne le dictionnaire des freres aines de self compose des couples :
+ {nom_frere isvalid()}
"""
d={}
for niveau in self.parent.etapes_niveaux:
@@ -93,7 +94,7 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
return d
def isvalid(self):
- """ Méthode booléenne qui retourne 0 si le niveau est invalide, 1 sinon """
+ """ Methode booleenne qui retourne 0 si le niveau est invalide, 1 sinon """
if self.etapes_niveaux == []:
if len(self.etapes) == 0:
return self.definition.valide_vide
@@ -124,7 +125,7 @@ class ETAPE_NIVEAU(N_OBJECT.OBJECT):
def suppentite(self,etape) :
""" Classe ETAPE_NIVEAU
- Supprime une étape
+ Supprime une etape
"""
self.jdc.suppentite(etape)
diff --git a/Extensions/i18n.py b/Extensions/i18n.py
index 98b5db69..269d2a3c 100644
--- a/Extensions/i18n.py
+++ b/Extensions/i18n.py
@@ -22,8 +22,8 @@ for the ``Eficas`` application of EDF.
It is usable from both Qt and non-Qt environments.
``PyQt4`` is currently supported.
"""
-
-from translation import tr, tr_qt
-from localisation import localise
+from __future__ import absolute_import
+from .translation import tr, tr_qt
+from .localisation import localise
__all__ = ['tr', 'tr_qt', 'localise']
diff --git a/Extensions/interpreteur_formule.py b/Extensions/interpreteur_formule.py
index f6c64f20..ee956e89 100644
--- a/Extensions/interpreteur_formule.py
+++ b/Extensions/interpreteur_formule.py
@@ -17,13 +17,20 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import string,re,sys,types
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
+import re,sys,types
from Noyau.N_CR import CR
from Extensions.i18n import tr
-#def group(*choices): return '(' + string.join(choices, '|') + ')'
+#def group(*choices): return '(' + ''.join(choices, '|') + ')'
#def any(*choices): return apply(group, choices) + '*'
#def maybe(*choices): return apply(group, choices) + '?'
@@ -63,7 +70,7 @@ class InterpreteurException(Exception):
def __str__(self):
return str(self.args)
-class Interpreteur_Formule:
+class Interpreteur_Formule(object):
"""
Cette classe sert a construire un interpreteur de formules Aster
"""
@@ -159,12 +166,12 @@ class Interpreteur_Formule:
"""
texte = self.t_formule[3]
if not texte : return
- if type(texte) != types.ListType:
+ if type(texte) != list:
texte = [texte,]
for text_arg in texte:
- text_arg = string.replace(text_arg,'\n','')
+ text_arg = text_arg.replace('\n','')
# Enleve les espaces
- text_arg = string.replace(text_arg,' ','')
+ text_arg = text_arg.replace(' ','')
try:
self.l_operateurs.append(self.split_operateurs(text_arg))
except InterpreteurException as e:
@@ -180,10 +187,10 @@ class Interpreteur_Formule:
# dans ce cas il n'y a pas d'arguments puisque pas de fonction ...
if args :
args = args[1:-1] # on enleve les parentheses ouvrante et fermante
- l_args = string.split(args,',')
+ l_args = args.split(',')
for arg in l_args:
- typ,nom = string.split(arg,':')
- nom = string.strip(nom)
+ typ,nom = arg.split(':')
+ nom = nom.strip()
self.l_constantes.append(nom)
# on considere que les fonctions unaires de base sont toutes a un seul argument :
l_f = []
@@ -197,7 +204,7 @@ class Interpreteur_Formule:
for new_fonc in self.new_fonctions_unaires:
self.d_fonctions_unaires[new_fonc[0]] = self.get_nb_args(new_fonc)
#self.d_fonctions_unaires.update(self.new_fonctions_unaires)
- self.l_fonctions_unaires = self.d_fonctions_unaires.keys()
+ self.l_fonctions_unaires = list(self.d_fonctions_unaires.keys())
def ordonne_listes(self):
"""
@@ -214,7 +221,7 @@ class Interpreteur_Formule:
N'analyse pas l'interieur des operateurs (ne fait qu'une passe)
"""
l_operateurs = []
- texte = string.strip(texte)
+ texte = texte.strip()
# on recherche un nombre en debut de texte
try:
oper,reste = self.cherche_nombre(texte)
@@ -251,7 +258,7 @@ class Interpreteur_Formule:
# d'un operateur binaire
l_operateurs.append(oper)
if reste :
- texte = string.strip(reste)
+ texte = reste.strip()
oper,reste = self.cherche_operateur_binaire(texte)
if not oper :
# on a un reste et pas d'operateur binaire --> erreur
@@ -276,7 +283,7 @@ class Interpreteur_Formule:
Retourne ce nombre et le reste ou None et le texte initial
Peut lever une InterpreteurException dans le cas ou le nombre n'est pas valide
"""
- texte = string.strip(texte)
+ texte = texte.strip()
m = pat_number_complet.match(texte)
if m:
# on a trouve un nombre avec exposant
@@ -300,7 +307,7 @@ class Interpreteur_Formule:
nb = nb+l_groups[2]
nombre = sgn+nb
# il faut verifier si ce nombre n'est pas suivi d'un exposant incomplet ...
- reste = string.strip(l_groups[3])
+ reste = l_groups[3].strip()
if reste == '':
return nombre,l_groups[3]
if reste[0] in ('e','E','d','D') :
@@ -318,13 +325,13 @@ class Interpreteur_Formule:
Retourne None,texte si aucune constante trouvee
"""
txt = None
- texte = string.strip(texte)
+ texte = texte.strip()
for cte in self.l_constantes:
- index = string.find(texte,cte)
+ index = texte.find(cte)
#if index == 0 : print 'on a trouve %s dans %s en %d' %(cte,texte,index)
if index == 0 :
txt = cte
- zz,reste = string.split(texte,cte,1)
+ zz,reste = texte.split(cte,1)
break
if txt :
return txt,reste
@@ -339,13 +346,13 @@ class Interpreteur_Formule:
Retourne None,texte si aucune constante trouvee
"""
txt = None
- texte = string.strip(texte)
+ texte = texte.strip()
m = pat_constante.match(texte)
if m :
# on a trouve un identificateur en debut de texte
l_groups = m.groups()
sgn = l_groups[0]
- identificateur = string.strip(l_groups[1])
+ identificateur = l_groups[1].strip()
reste = l_groups[2]
# il faut verifier qu'il ne s'agit pas d'un appel a une fonction
if reste :
@@ -390,12 +397,12 @@ class Interpreteur_Formule:
Cherche dans texte un operateur unaire
"""
txt = None
- texte = string.strip(texte)
+ texte = texte.strip()
for oper in self.l_fonctions_unaires:
- index = string.find(texte,oper)
+ index = texte.find(oper)
if index == 0 :
txt = oper
- zz,reste = string.split(texte,oper,1)
+ zz,reste = texte.split(oper,1)
break
if txt :
#print 'on a trouve :',txt
@@ -428,14 +435,14 @@ class Interpreteur_Formule:
Cherche dans texte un operateur unaire
"""
txt = None
- texte = string.strip(texte)
+ texte = texte.strip()
m = pat_constante.match(texte)
if m :
# on a trouve un identificateur en debut de texte
# il faut encore verifier que l'on a bien a faire a un appel de fonction ...
l_groups = m.groups()
sgn = l_groups[0]
- identificateur = string.strip(l_groups[1])
+ identificateur = l_groups[1].strip()
reste = l_groups[2]
try:
args,reste = self.cherche_args(reste)
@@ -486,13 +493,13 @@ class Interpreteur_Formule:
Cherche dans texte un operateur unaire
"""
txt = None
- texte = string.strip(texte)
+ texte = texte.strip()
for oper in self.l_fonctions_binaires:
- index = string.find(texte,oper)
+ index = texte.find(oper)
#if index != -1 : print 'on a trouve %s dans %s en %d' %(oper,texte,index)
if index == 0 :
txt = oper
- zz,reste = string.split(texte,oper,1)
+ zz,reste = texte.split(oper,1)
break
if txt :
return txt,reste
@@ -504,7 +511,7 @@ class Interpreteur_Formule:
"""
Cherche en debut de texte une expression entre parentheses
"""
- args,reste = self.cherche_args(string.strip(texte))
+ args,reste = self.cherche_args(texte.strip())
if not args :
return None,texte
else:
@@ -526,7 +533,7 @@ class Interpreteur_Formule:
"""
args = args[1:-1] # on enleve les parentheses ouvrante et fermante
if nb_args == 1 : return args
- l_args = string.split(args,',')
+ l_args = args.split(',')
if len(l_args) != nb_args:
raise InterpreteurException ("La fonction %s requiert %d arguments : %d fourni(s)" %(nom_fonction,nb_args,len(l_args)))
else:
@@ -540,12 +547,12 @@ class Interpreteur_Formule:
- unknown
et son nom
"""
- texte = string.strip(texte)
+ texte = texte.strip()
if '(' not in texte:
return 'constante',texte
if texte[-1] != ')':
return 'unknown',''
- nom_oper,args = string.split(texte,'(',1)
+ nom_oper,args = texte.split('(',1)
return 'fonction',nom_oper
def get_nb_args(self,formule):
@@ -553,7 +560,7 @@ class Interpreteur_Formule:
Retourne le nombre d'arguments dans la definition de formule (sous forme de tuple)
"""
args = formule[2][1:-1] # on enleve les parentheses ouvrante et fermante
- l_args = string.split(args,',')
+ l_args = args.split(',')
return len(l_args)
if __name__ == '__main__':
@@ -574,7 +581,7 @@ if __name__ == '__main__':
constantes = constantes,
fonctions = fonctions_unaires)
txt = i.str()
- print ('\nformule %s = %s' %(str(formule),txt))
+ print(('\nformule %s = %s' %(str(formule),txt)))
#if i.isvalid() :
# print "\n\tPas d'erreur !"
#else:
diff --git a/Extensions/jdc.py b/Extensions/jdc.py
index 1c78fdeb..c838b54f 100644
--- a/Extensions/jdc.py
+++ b/Extensions/jdc.py
@@ -18,12 +18,17 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient la classe mixin qui porte les méthodes
+ Ce module contient la classe mixin qui porte les methodes
pour traiter les niveaux au sein d'un JDC
"""
-import etape_niveau
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
-class JDC:
+from . import etape_niveau
+
+class JDC(object):
def __init__(self):
self.dict_niveaux={}
self.build_niveaux()
diff --git a/Extensions/jdc_include.py b/Extensions/jdc_include.py
index ba4f84ff..2e5a9ab7 100644
--- a/Extensions/jdc_include.py
+++ b/Extensions/jdc_include.py
@@ -26,6 +26,7 @@
que le jeu de commandes inclus est valide et compatible
avec le contexte avant et apres l'insertion
"""
+from __future__ import absolute_import
import string
from Accas import JDC,ASSD,AsException,JDC_CATA
from Ihm import CONNECTOR
@@ -62,7 +63,7 @@ class JDC_POURSUITE(JDC):
non utilise
Ajoute un prefixe s'il est specifie (INCLUDE_MATERIAU)
Si le nom est deja utilise, leve une exception
- Met le concept créé dans le contexe global g_context
+ Met le concept cree dans le contexe global g_context
"""
#print "NommerSdprod",sd,sdnom,restrict
if self.prefix_include:
@@ -74,15 +75,15 @@ class JDC_POURSUITE(JDC):
#
# nom commencant par __ : il s'agit de concepts qui seront detruits
# nom commencant par _ : il s'agit de concepts intermediaires qui seront gardes
- # ATTENTION : il faut traiter différemment les concepts dont le nom
- # commence par _ mais qui sont des concepts nommés automatiquement par
- # une éventuelle sous macro.
+ # ATTENTION : il faut traiter differemment les concepts dont le nom
+ # commence par _ mais qui sont des concepts nommes automatiquement par
+ # une eventuelle sous macro.
if sdnom[1] in string.digits:
# Ce concept provient probablement d'une sous macro (cas improbable)
#pas de renommage
pass
elif sdnom[1] == '_':
- #cas d'un concept à ne pas conserver apres execution de la commande
+ #cas d'un concept a ne pas conserver apres execution de la commande
sdnom=sd.id[2:]
pass
else:
@@ -117,7 +118,7 @@ class JDC_POURSUITE(JDC):
return j_context
def force_contexte(self,contexte):
- for nom_sd,sd in contexte.items():
+ for nom_sd,sd in list(contexte.items()):
if not isinstance(sd,ASSD):continue
autre_sd= self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd,
etape=self.etape_include)
@@ -132,16 +133,16 @@ class JDC_POURSUITE(JDC):
def verif_contexte(self,context):
"""
- Cette methode verifie si le contexte passé en argument (context)
- peut etre inséré dans le jdc pere de l'include.
+ Cette methode verifie si le contexte passe en argument (context)
+ peut etre insere dans le jdc pere de l'include.
Elle verifie que les concepts contenus dans ce contexte n'entrent
pas en conflit avec les concepts produits dans le jdc pere
apres l'include.
- Si le contexte ne peut pas etre inséré, la méthode leve une
- exception sinon elle retourne le contexte inchangé
+ Si le contexte ne peut pas etre insere, la methode leve une
+ exception sinon elle retourne le contexte inchange
"""
#print "verif_contexte"
- for nom_sd,sd in context.items():
+ for nom_sd,sd in list(context.items()):
if not isinstance(sd,ASSD):continue
autre_sd= self.jdc_pere.get_sd_apres_etape_avec_detruire(nom_sd,sd,
etape=self.etape_include)
@@ -150,7 +151,7 @@ class JDC_POURSUITE(JDC):
# Il existe un concept produit par une etape apres self
# => impossible d'inserer
raise Exception("Impossible d'inclure le fichier. Un concept de nom " +
- "%s existe déjà dans le jeu de commandes." % nom_sd)
+ "%s existe deja dans le jeu de commandes." % nom_sd)
return context
@@ -172,12 +173,12 @@ class JDC_POURSUITE(JDC):
def init_modif(self):
"""
- Met l'état de l'étape à : modifié
+ Met l'etat de l'etape a : modifie
Propage la modification au parent
- Attention : init_modif doit etre appelé avant de réaliser une modification
- La validité devra etre recalculée apres cette modification
- mais par un appel à fin_modif pour préserver l'état modified
+ Attention : init_modif doit etre appele avant de realiser une modification
+ La validite devra etre recalculee apres cette modification
+ mais par un appel a fin_modif pour preserver l'etat modified
de tous les objets entre temps
"""
#print "jdc_include.init_modif",self,self.etape_include
@@ -187,8 +188,8 @@ class JDC_POURSUITE(JDC):
def fin_modif(self):
"""
- Méthode appelée une fois qu'une modification a été faite afin de
- déclencher d'éventuels traitements post-modification
+ Methode appelee une fois qu'une modification a ete faite afin de
+ declencher d'eventuels traitements post-modification
ex : INCLUDE et POURSUITE
"""
#print "jdc_include.fin_modif",self,self.etape_include
@@ -239,8 +240,8 @@ class JDC_POURSUITE(JDC):
def get_sd_apres_etape(self,nom_sd,etape,avec='non'):
"""
- Cette méthode retourne la SD de nom nom_sd qui est éventuellement
- définie apres etape
+ Cette methode retourne la SD de nom nom_sd qui est eventuellement
+ definie apres etape
Si avec vaut 'non' exclut etape de la recherche
"""
if self.etape_include:
@@ -251,9 +252,9 @@ class JDC_POURSUITE(JDC):
def get_sd_apres_etape_avec_detruire(self,nom_sd,sd,etape,avec='non'):
"""
On veut savoir ce que devient le concept sd de nom nom_sd apres etape.
- Il peut etre detruit, remplacé ou conservé
- Cette méthode retourne la SD sd de nom nom_sd qui est éventuellement
- définie apres etape en tenant compte des concepts detruits
+ Il peut etre detruit, remplace ou conserve
+ Cette methode retourne la SD sd de nom nom_sd qui est eventuellement
+ definie apres etape en tenant compte des concepts detruits
Si avec vaut 'non' exclut etape de la recherche
"""
#print "jdc_include.get_sd_apres_etape_avec_detruire",nom_sd,sd,id(sd)
@@ -268,7 +269,7 @@ class JDC_POURSUITE(JDC):
def delete_concept(self,sd):
"""
- Fonction : Mettre a jour les etapes du JDC suite à la disparition du
+ Fonction : Mettre a jour les etapes du JDC suite a la disparition du
concept sd
Seuls les mots cles simples MCSIMP font un traitement autre
que de transmettre aux fils
@@ -281,7 +282,7 @@ class JDC_POURSUITE(JDC):
def delete_concept_after_etape(self,etape,sd):
"""
- Fonction : Mettre à jour les étapes du JDC qui sont après etape suite à
+ Fonction : Mettre a jour les etapes du JDC qui sont apres etape suite a
la disparition du concept sd
"""
# Nettoyage des etapes de l'include
@@ -301,7 +302,7 @@ class JDC_POURSUITE(JDC):
def replace_concept_after_etape(self,etape,old_sd,sd):
"""
- Fonction : Mettre à jour les étapes du JDC qui sont après etape suite au
+ Fonction : Mettre a jour les etapes du JDC qui sont apres etape suite au
remplacement du concept old_sd par sd
"""
# Nettoyage des etapes de l'include
@@ -317,10 +318,10 @@ class JDC_POURSUITE(JDC):
def control_context_apres(self,etape):
"""
- Cette méthode verifie que les etapes apres l'etape etape
+ Cette methode verifie que les etapes apres l'etape etape
ont bien des concepts produits acceptables (pas de conflit de
nom principalement)
- Si des concepts produits ne sont pas acceptables ils sont supprimés.
+ Si des concepts produits ne sont pas acceptables ils sont supprimes.
Effectue les verifications sur les etapes du jdc mais aussi sur les
jdc parents s'ils existent.
"""
diff --git a/Extensions/localisation.py b/Extensions/localisation.py
index 5ef3a493..5e7d1f53 100644
--- a/Extensions/localisation.py
+++ b/Extensions/localisation.py
@@ -18,47 +18,47 @@
"""
+from __future__ import absolute_import
+from __future__ import print_function
import os
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtCore import QTranslator
-else :
- from PyQt4.QtCore import QTranslator
-qt_translator = QTranslator()
+from PyQt5.QtCore import QTranslator
+
+code_translator = QTranslator()
eficas_translator = QTranslator()
-def localise(application, locale=None,file=None ):
+def localise(application, locale=None,file=None,translatorFichier=None ):
"""
"""
- if monEnvQT5 :
- from PyQt5.QtCore import QLibraryInfo
- from PyQt5.QtCore import QLocale
- from PyQt5.QtWidgets import QApplication
- monPath=os.path.join(os.path.dirname(__file__),'..','UiQT5')
- else :
- from PyQt4.QtCore import QLibraryInfo
- from PyQt4.QtCore import QLocale
- from PyQt4.QtGui import QApplication
- monPath=os.path.join(os.path.dirname(__file__),'..','UiQT4')
+ from PyQt5.QtCore import QLibraryInfo
+ from PyQt5.QtCore import QLocale
+ from PyQt5.QtWidgets import QApplication
+ monPath=os.path.join(os.path.dirname(__file__),'..','UiQT5')
sys_locale = QLocale.system().name()
if locale is None: locale="fr"
- global eficas_translator
if locale=="ang" : locale="en"
if file != None :
print ('chargement de ', file,monPath)
print (eficas_translator.load(file,monPath))
print (QApplication.installTranslator(eficas_translator))
- return
-
- if eficas_translator.load("eficas_" + locale, monPath):
- QApplication.installTranslator(eficas_translator)
+ elif eficas_translator.load("eficas_" + locale, monPath):
+ QApplication.installTranslator(eficas_translator)
else:
- print ("Unable to load Eficas translator!")
+ print ("Unable to load Eficas translator!")
+
+ global code_translator
+ if translatorFichier != None :
+ if (code_translator.load(translatorFichier)):
+ print (translatorFichier, ' loaded')
+ elif (code_translator.load(translatorFichier+'_'+locale)):
+ print(translatorFichier+'_'+locale+ ' loaded')
+ else :
+ print ("Unable to load Code translator!" + translatorFichier)
+ print (QApplication.installTranslator(code_translator))
if __name__ == "__main__":
diff --git a/Extensions/mcnuplet.py b/Extensions/mcnuplet.py
index 220914af..d7eb0e12 100644
--- a/Extensions/mcnuplet.py
+++ b/Extensions/mcnuplet.py
@@ -20,7 +20,11 @@
"""
"""
# Modules Python
-import string
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
# Modules Eficas
from Noyau import N_MCCOMPO
@@ -47,7 +51,7 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
self.niveau = self.parent.niveau
self.etape = self.parent.etape
else:
- # Le mot cle a été créé sans parent
+ # Le mot cle a ete cree sans parent
self.jdc = None
self.niveau = None
self.etape = None
@@ -58,20 +62,20 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def build_mc(self):
"""
Construit la liste des sous-entites de MCNUPLET
- à partir de la liste des arguments (valeur)
+ a partir de la liste des arguments (valeur)
"""
args = self.valeur
if args ==None : args =()
mc_liste=[]
- # on crée les sous entites du NUPLET a partir des valeurs initiales
+ # on cree les sous entites du NUPLET a partir des valeurs initiales
k=0
for v in self.definition.entites:
if k < len(args):
val=args[k]
else:
val=None
- objet=v(val=val,nom=`k`,parent=self)
+ objet=v(val=val,nom=repr(k),parent=self)
if hasattr(objet.definition,'position'):
if objet.definition.position == 'global' :
self.append_mc_global(objet)
@@ -101,7 +105,7 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
if len(self.mc_liste) != len(self.definition.entites):
valid=0
if cr == 'oui' :
- self.cr.fatal(string.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
+ self.cr.fatal(''.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
self.valid = valid
self.state = 'unchanged'
if old_valid:
@@ -110,7 +114,7 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def __getitem__(self,key):
"""
- Retourne le key ème élément du nuplet
+ Retourne le key eme element du nuplet
"""
# Un nuplet est toujours une liste de mots cles simples
# On retourne donc la valeur
@@ -118,8 +122,8 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def __str__(self):
"""
- Retourne une représentation du nuplet sous forme de chaine
- de caractères
+ Retourne une representation du nuplet sous forme de chaine
+ de caracteres
"""
s='('
for e in self.mc_liste:
@@ -128,8 +132,8 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def __repr__(self):
"""
- Retourne une représentation du nuplet sous forme de chaine
- de caractères
+ Retourne une representation du nuplet sous forme de chaine
+ de caracteres
"""
s='('
for e in self.mc_liste:
@@ -138,13 +142,13 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def get_regles(self):
"""
- Retourne la liste des règles attachées au nuplet
+ Retourne la liste des regles attachees au nuplet
"""
return []
def verif_condition_bloc(self):
"""
- Vérifie s'il y a des blocs sous le nuplet et retourne
+ Verifie s'il y a des blocs sous le nuplet et retourne
les blocs en question
"""
# Il n y a pas de BLOCs sous un NUPLET
@@ -152,10 +156,10 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def isrepetable(self):
"""
- Indique si le NUPLET peut etre répété.
+ Indique si le NUPLET peut etre repete.
Retourne 1 si c'est le cas.
Retourne 0 dans le cas contraire.
- L'information est donnée par le catalogue, cad la définition de self
+ L'information est donnee par le catalogue, cad la definition de self
"""
if self.definition.min != self.definition.max :
return 1
@@ -167,11 +171,11 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def get_valeur(self):
"""
- Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par
- cree_dict_valeurs pour construire un dictionnaire contenant les mots clés
- d'une étape.
+ Cette methode doit retourner la valeur de l'objet. Elle est utilisee par
+ cree_dict_valeurs pour construire un dictionnaire contenant les mots cles
+ d'une etape.
Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
- des mots clé simples contenus.
+ des mots cle simples contenus.
"""
l=[]
for v in self.mc_liste:
@@ -180,8 +184,8 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
def get_val(self):
"""
- Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
- Elle est utilisée par la méthode get_mocle
+ Une autre methode qui retourne une "autre" valeur du mot cle facteur.
+ Elle est utilisee par la methode get_mocle
"""
l=[]
for v in self.mc_liste:
diff --git a/Extensions/niveau.py b/Extensions/niveau.py
index c117a45a..903ec213 100644
--- a/Extensions/niveau.py
+++ b/Extensions/niveau.py
@@ -18,11 +18,15 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient la classe NIVEAU qui sert à définir
+ Ce module contient la classe NIVEAU qui sert a definir
des groupes de commandes dans le catalogue
"""
-class NIVEAU:
+try :
+ from builtins import object
+except : pass
+
+class NIVEAU(object):
def __init__(self,nom='',label='',niveaux=(),valide_vide=1,actif=1):
self.nom = nom
self.label = label
diff --git a/Extensions/nuplet.py b/Extensions/nuplet.py
index 3a68ece5..81774ec6 100644
--- a/Extensions/nuplet.py
+++ b/Extensions/nuplet.py
@@ -18,16 +18,21 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient la classe de définition pour les nuplets NUPL
+ Ce module contient la classe de definition pour les nuplets NUPL
"""
# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
import types
# Modules Eficas
from Noyau import N_ENTITE,N_MCLIST,N_CR
from Ihm import I_ENTITE
from Extensions.i18n import tr
-import mcnuplet
+from . import mcnuplet
class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
"""
@@ -48,6 +53,8 @@ class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
self.defaut=defaut
self.min=min
self.max=max
+ if self.max =='**' : self.max=float('inf')
+ if self.min =='**' : self.min=float('-inf')
self.entites=elements
self.regles=()
# on force le statut des sous entites a obligatoire
@@ -57,22 +64,22 @@ class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
def verif_cata(self):
"""
- Cette methode sert à valider les attributs de l'objet de définition
+ Cette methode sert a valider les attributs de l'objet de definition
de la classe NUPL
"""
- if type(self.min) != types.IntType :
- if self.min != '**':
+ if type(self.min) != int :
+ if self.min != '**' and self.min != float('-inf'):
self.cr.fatal(tr("L'attribut 'min' doit etre un entier : ")+str(self.min))
- if type(self.max) != types.IntType :
- if self.max != '**' :
+ if type(self.max) != int :
+ if self.max != '**' and self.max != float('inf'):
self.cr.fatal(tr("L'attribut 'max' doit etre un entier : ")+str(self.max))
if self.min > self.max :
self.cr.fatal(tr("Nombres d'occurrence min et max invalides :") +str(self.min)+","+str(self.max))
- if type(self.fr) != types.StringType :
+ if type(self.fr) != bytes :
self.cr.fatal(tr("L'attribut 'fr' doit etre une chaine de caracteres"))
if self.statut not in ['o','f','c','d']:
self.cr.fatal(tr("L'attribut 'statut' doit valoir 'o','f','c' ou 'd'"))
- if type(self.docu) != types.StringType :
+ if type(self.docu) != bytes :
self.cr.fatal(tr("L'attribut 'docu' doit etre une chaine de caracteres"))
self.verif_cata_regles()
@@ -81,7 +88,7 @@ class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
Construit la structure de donnees pour un NUPLET a partir de sa definition (self)
de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent)
"""
- if (type(val) == types.TupleType or type(val) == types.ListType) and type(val[0]) == types.TupleType:
+ if (type(val) == tuple or type(val) == list) and type(val[0]) == tuple:
# On est en presence d une liste de nuplets
l=self.list_instance()
l.init(nom=nom,parent=parent)
@@ -95,7 +102,7 @@ class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
def report(self):
"""
- Méthode qui crée le rapport de vérification du catalogue du nuplet
+ Methode qui cree le rapport de verification du catalogue du nuplet
"""
self.cr = self.CR()
self.verif_cata()
@@ -109,7 +116,7 @@ class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE):
def affecter_parente(self):
"""
Cette methode a pour fonction de donner un nom et un pere aux
- sous entités qui n'ont aucun moyen pour atteindre leur parent
+ sous entites qui n'ont aucun moyen pour atteindre leur parent
directement
Il s'agit principalement des mots cles
"""
diff --git a/Extensions/param2.py b/Extensions/param2.py
index 9b79cf24..7c6f8135 100644
--- a/Extensions/param2.py
+++ b/Extensions/param2.py
@@ -18,17 +18,27 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
from __future__ import division
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except : pass
import math
import types
+import six
try:
import Numeric
except:
- import numpy
- Numeric = numpy
+ try:
+ import numpy
+ Numeric = numpy
+ except ImportError:
+ Numeric = None
+
def mkf(value):
- if type(value) in (type(1), type(1L), type(1.5), type(1j),type("hh")) :
+ if type(value) in (type(1), type(1), type(1.5), type(1j),type("hh")) :
return Constant(value)
elif isinstance(value, Formula):
return value
@@ -36,10 +46,10 @@ def mkf(value):
return Constant(value)
else:
# return Constant(value)
- raise TypeError, ("Can't make formula from", value)
+ raise TypeError("Can't make formula from", value)
#class Formula(object):
-class Formula:
+class Formula(object):
def __len__(self):
val=self.eval()
if val is None:return 0
@@ -49,7 +59,7 @@ class Formula:
return 1
def __complex__(self): return complex(self.eval())
def __int__(self): return int(self.eval())
- def __long__(self): return long(self.eval())
+ def __long__(self): return int(self.eval())
def __float__(self): return float(self.eval())
def __pos__(self): return self # positive
def __neg__(self): return Unop('-', self)
@@ -81,7 +91,7 @@ class Formula:
def __hash__(self):return id(self)
def _div(a,b):
- if isinstance(a,(int,long)) and isinstance(b,(int,long)):
+ if isinstance(a,six.integer_types) and isinstance(b,six.integer_types):
if a%b:
return a/b
else:
@@ -183,9 +193,9 @@ class Variable(Formula):
def Eval(f):
if isinstance(f,Formula):
f=f.eval()
- elif type(f) in (types.ListType, ):
+ elif type(f) in (list, ):
f=[Eval(i) for i in f]
- elif type(f) in (types.TupleType,):
+ elif type(f) in (tuple,):
f=tuple([Eval(i) for i in f])
return f
@@ -193,8 +203,8 @@ def Eval(f):
def cos(f): return Unop('ncos', f)
def sin(f): return Unop('nsin', f)
def array(f,*tup,**args):
- """array de Numeric met en défaut la mécanique des parametres
- on la supprime dans ce cas. Il faut que la valeur du parametre soit bien définie
+ """array de Numeric met en defaut la mecanique des parametres
+ on la supprime dans ce cas. Il faut que la valeur du parametre soit bien definie
"""
originalMath=OriginalMath()
original_narray=originalMath.original_narray
@@ -218,7 +228,9 @@ class OriginalMath(object):
def __init__(self):
if hasattr(self,'pi') :return
import math
- self.toSurcharge()
+ try :
+ self.toSurcharge()
+ except : pass
def toSurcharge(self):
self.numeric_ncos=Numeric.cos
@@ -278,9 +290,11 @@ class OriginalMath(object):
import numpy
Numeric = numpy
- Numeric.cos=originalMath.numeric_ncos
- Numeric.sin=originalMath.numeric_nsin
- Numeric.array=originalMath.numeric_narray
+ try :
+ Numeric.cos=originalMath.numeric_ncos
+ Numeric.sin=originalMath.numeric_nsin
+ Numeric.array=originalMath.numeric_narray
+ except : pass
math.sin=originalMath.sin
math.cos=originalMath.cos
math.sqrt=originalMath.sqrt
diff --git a/Extensions/parametre.py b/Extensions/parametre.py
index bd55a9d1..c7d45168 100644
--- a/Extensions/parametre.py
+++ b/Extensions/parametre.py
@@ -26,7 +26,15 @@
"""
# import de modules Python
-import string,types
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except : pass
+
+import types
from math import *
import traceback
@@ -34,9 +42,10 @@ import traceback
from Noyau.N_CR import CR
from Noyau import N_OBJECT
from Ihm import I_OBJECT
-from param2 import *
+from .param2 import *
from Ihm import CONNECTOR
from Extensions.i18n import tr
+from six.moves import range
class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
"""
@@ -54,7 +63,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
# La classe PARAMETRE n'a pas de definition : on utilise self pour
# completude
self.definition=self
- # parent ne peut être qu'un objet de type JDC
+ # parent ne peut etre qu'un objet de type JDC
self.jdc = self.parent = CONTEXT.get_current_step()
self.niveau=self.parent.niveau
self.actif=1
@@ -68,17 +77,17 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
def interprete_valeur(self,val):
"""
- Essaie d'interpreter val (chaîne de caracteres)comme :
+ Essaie d'interpreter val (chaine de caracteres)comme :
- un entier
- un reel
- - une chaîne de caracteres
+ - une chaine de caracteres
- une liste d'items d'un type qui precede
Retourne la valeur interpretee
"""
#if not val : return None
valeur = None
- if type(val) == types.ListType:
+ if type(val) == list:
# Un premier traitement a ete fait lors de la saisie
# permet de tester les parametres qui sont des listes
l_new_val = []
@@ -90,7 +99,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
return None
return l_new_val
- if type(val) == types.StringType:
+ if type(val) == bytes:
# on tente l'evaluation dans un contexte fourni par le parent s'il existe
if self.parent:
valeur=self.parent.eval_in_context(val,self)
@@ -103,7 +112,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
#PN je n ose pas modifier je rajoute
# refus des listes heterogenes : ne dvrait pas etre la
if valeur != None :
- if type(valeur) == types.TupleType:
+ if type(valeur) == tuple:
l_new_val = []
typ = None
for v in valeur :
@@ -114,7 +123,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
# la liste est heterogene --> on refuse d'interpreter
# self comme une liste
# on retourne la string initiale
- print ('liste heterogene ',val)
+ print(('liste heterogene ',val))
return val
l_new_val.append(v)
return tuple(l_new_val)
@@ -212,7 +221,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
def supprime(self):
"""
Methode qui supprime toutes les boucles de references afin que
- l'objet puisse être correctement detruit par le garbage collector
+ l'objet puisse etre correctement detruit par le garbage collector
"""
self.parent = None
self.jdc = None
@@ -275,7 +284,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
"""
Donne un echo de self sous la forme nom = valeur
"""
- if type(self.valeur) == types.StringType:
+ if type(self.valeur) == bytes:
if self.valeur.find('\n') == -1:
# pas de retour chariot, on utilise repr
return self.nom+' = '+ repr(self.valeur)
@@ -285,7 +294,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
else:
return self.nom+' = '+ repr(self.valeur)
else:
- if type(self.valeur) == types.ListType :
+ if type(self.valeur) == list :
aRetourner=self.nom+' = ['
for l in self.valeur :
aRetourner=aRetourner+str(l) +","
@@ -363,7 +372,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
def __adapt__(self,validator):
return validator.adapt(self.eval())
-class COMBI_PARAMETRE :
+class COMBI_PARAMETRE(object) :
def __init__(self,chainevaleur,valeur):
self.chainevaleur=chainevaleur
self.valeur=valeur
@@ -375,7 +384,7 @@ class COMBI_PARAMETRE :
if self.valeur and self.chainevaleur:
return 1
-class ITEM_PARAMETRE :
+class ITEM_PARAMETRE(object) :
def __init__(self,param_pere,item=None):
self.param_pere = param_pere
self.item = item
diff --git a/Extensions/parametre_eval.py b/Extensions/parametre_eval.py
index 1ae13082..abe71d5c 100644
--- a/Extensions/parametre_eval.py
+++ b/Extensions/parametre_eval.py
@@ -25,14 +25,16 @@ Ces objets sont crees a partir de la modification du fichier de commandes
de l'utilisateur par le parseur de fichiers Python
"""
# import de modules Python
-import string,types,re
+from __future__ import absolute_import
+from __future__ import print_function
+import types,re
import traceback
# import modules Eficas
-import interpreteur_formule
+from . import interpreteur_formule
from Noyau.N_CR import CR
from Extensions.i18n import tr
-import parametre
+from . import parametre
pattern_eval = re.compile(r'^(EVAL)([ \t\r\f\v]*)\(([\w\W]*)')
@@ -76,13 +78,13 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) :
def interprete_valeur(self,val):
"""
- Essaie d'interpreter val (chaîne de caracteres ou None) comme :
+ Essaie d'interpreter val (chaine de caracteres ou None) comme :
une instance de Accas.EVAL
Retourne la valeur interpretee
"""
if not val : return None
d={}
- val = string.strip(val)
+ val = val.strip()
if val[-1] == ';' : val = val[0:-1]
d['EVAL'] = self.Accas_EVAL
try:
@@ -90,7 +92,7 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) :
return valeur
except:
traceback.print_exc()
- print ("Le texte %s n'est pas celui d'un parametre evalue" %val)
+ print(("Le texte %s n'est pas celui d'un parametre evalue" %val))
return None
def set_valeur(self,new_valeur):
@@ -142,7 +144,7 @@ class PARAMETRE_EVAL(parametre.PARAMETRE) :
if cr == 'oui' :
if not verificateur.cr.estvide():
self.cr.fatal(verificateur.cr.get_mess_fatal())
- return verificateur.isvalid(),string.join(verificateur.cr.crfatal)
+ return verificateur.isvalid(),''.join(verificateur.cr.crfatal)
else:
# pas d'expression EVAL --> self non valide
if cr == 'oui' :
diff --git a/Extensions/pluginloader.py b/Extensions/pluginloader.py
index 31d4df42..3efe0a03 100644
--- a/Extensions/pluginloader.py
+++ b/Extensions/pluginloader.py
@@ -18,15 +18,20 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient le chargeur dynamique de plugins (emprunté à HappyDoc)
+ Ce module contient le chargeur dynamique de plugins (emprunte a HappyDoc)
"""
+from __future__ import absolute_import
import glob,os,sys,traceback
-import UserDict
+try:
+ from UserDict import UserDict
+except ImportError:
+ from collections import UserDict
-class PluginLoader(UserDict.UserDict):
+
+class PluginLoader(UserDict):
def __init__(self,module):
- UserDict.UserDict.__init__(self)
+ UserDict.__init__(self)
self.plugin_dir=module.__path__[0]
self.plugin_set_name=module.__name__
_module_list = glob.glob( os.path.join( self.plugin_dir,
diff --git a/Extensions/translation.py b/Extensions/translation.py
index 75cd3302..dec91c24 100644
--- a/Extensions/translation.py
+++ b/Extensions/translation.py
@@ -1,7 +1,3 @@
-from determine import monEnvQT5
-if monEnvQT5 :
- from translationQT5 import tr
- from translationQT5 import tr_qt
-else :
- from translationQT4 import tr
- from translationQT4 import tr_qt
+from __future__ import absolute_import
+from .translationQT5 import tr
+from .translationQT5 import tr_qt
diff --git a/Extensions/translationQT5.py b/Extensions/translationQT5.py
index fbaab2d1..12222088 100644
--- a/Extensions/translationQT5.py
+++ b/Extensions/translationQT5.py
@@ -22,9 +22,20 @@ tuples, or atoms.
``PyQt4`` is currently supported.
"""
-from eficas_exception import EficasException
+from __future__ import absolute_import
+try :
+ from builtins import zip
+ from builtins import map
+ from builtins import range
+except :
+ pass
+from .eficas_exception import EficasException
#from Extensions.eficas_exception import EficasException
import re
+from six.moves import map
+import six
+from six.moves import range
+from six.moves import zip
regex=re.compile(r"% *[0-9]+")
@@ -40,7 +51,7 @@ def _reformat_qstring_from_tuple(qstring, params):
"""
from PyQt5.QtCore import QRegExp
reg = QRegExp("\%\.[1-9]{1,2}f")
- for p, j in zip(params, range(len(params))):
+ for p, j in zip(params, list(range(len(params)))):
try:
i += 1 + qstring[i + 1:].indexOf("%")
except NameError:
@@ -48,15 +59,15 @@ def _reformat_qstring_from_tuple(qstring, params):
if i == reg.indexIn(qstring):
precision = reg.cap(0).split('.')[1].split('f')[0]
qstring = qstring[:i + 2 + len(precision)].\
- replace("%." + precision, "%" + unicode(1 + j)) + \
+ replace("%." + precision, "%" + six.text_type(1 + j)) + \
qstring[i + 3 + len(precision):]
qstring=regex.sub("{}",qstring)
#qstring = qstring.format(QString.number(float(params[j]), 'f', int(precision)))
qstring = qstring.format(float(params[j]))
else:
- qstring = qstring[:i + 1].replace("%", "%" + unicode(1 + j)) + \
+ qstring = qstring[:i + 1].replace("%", "%" + six.text_type(1 + j)) + \
qstring[i + 2:]
- if isinstance(params[j], unicode):
+ if isinstance(params[j], six.text_type):
qstring=regex.sub("{}",qstring)
qstring = qstring.format(params[j])
elif isinstance(params[j], float):
@@ -85,7 +96,7 @@ def _reformat_qstring_from_dict(qstring, params):
and a dictionary specifying the parameters of the string.
"""
from PyQt5.QtCore import QRegExp
- for p, j in zip(params, range(len(params))):
+ for p, j in zip(params, list(range(len(params)))):
p_reg = QRegExp("\%\("+ p + "\)\.[1-9]{1,2}f")
p_index = p_reg.indexIn(qstring)
if p_index != -1:
@@ -95,13 +106,13 @@ def _reformat_qstring_from_dict(qstring, params):
# arg(QString.number(float(params[p]), \
# 'f', \
# int(precision)))
- qstring = qstring.replace("%(" + p + ")." + precision + "f","%" + unicode(1 + j))
+ qstring = qstring.replace("%(" + p + ")." + precision + "f","%" + six.text_type(1 + j))
qstring=regex.sub("{}",qstring)
qstring = qstring.format(float(params[p]))
else:
qstring.remove(QRegExp("\\)[sdf]{1}"))
- qstring = qstring.replace("%(" + p, "%" + unicode(1 + j))
- if isinstance(params[p], unicode):
+ qstring = qstring.replace("%(" + p, "%" + six.text_type(1 + j))
+ if isinstance(params[p], six.text_type):
qstring=regex.sub("{}",qstring)
qstring = qstring.format(params[p])
elif isinstance(params[p], float):
@@ -135,7 +146,7 @@ def _reformat_qstring_from_atom(qstring, params):
qstring.append("%1")
try:
qstring=regex.sub("{}",qstring)
- qstring = qstring.format(unicode(params))
+ qstring = qstring.format(six.text_type(params))
except AttributeError:
qstring=regex.sub("{}",qstring)
qstring = qstring.format(params)
@@ -153,7 +164,7 @@ def _reformat_qstring_from_atom(qstring, params):
else:
qstring = qstring[:i + 1].replace("%", "%1") + \
qstring[i + 2:]
- if isinstance(params, (unicode, str)):
+ if isinstance(params, (six.text_type, str)):
qstring = qstring.format(_preprocess_atom(params))
elif isinstance(params, float):
#qstring = qstring.format(QString.number(params, 'f', \
@@ -181,14 +192,14 @@ def _reformat_qstring_from_list(qstring, params):
# XXX to add further functionality, e.g. list processing
# when ``%`` not at the end.
if qstring.count("%") == 1 and \
- unicode(qstring).strip()[:-1].endswith("%"):
+ six.text_type(qstring).strip()[:-1].endswith("%"):
qstring = qstring[:qstring.indexOf("%") + 1].append("1")
qstring=regex.sub("{}",qstring)
- qstring = qstring.format(u' '.join(map(unicode, params)))
+ qstring = qstring.format(u' '.join(map(six.text_type, params)))
elif qstring.count("%") == 0:
qstring.append("%1")
qstring=regex.sub("{}",qstring)
- qstring = qstring.format(u' '.join(map(unicode, params)))
+ qstring = qstring.format(u' '.join(map(six.text_type, params)))
else:
raise EficasException("ValueError: i18n.translation: \
At most one '%' expected!")
@@ -202,7 +213,7 @@ def _preprocess_atom(string):
a Unicode object out of it. To this end, assume the string is encoded
in utf-8; if this fails, then assume the string is encoded in Latin-9.
"""
- if isinstance(string, (unicode, int, float, complex)):
+ if isinstance(string, (six.text_type, int, float, complex)):
return string
elif isinstance(string, str):
return _str_to_unicode(string)
@@ -218,10 +229,10 @@ def _str_to_unicode(string):
Latin-9 encoded.
"""
try:
- string = unicode(string, "utf-8")
+ string = six.text_type(string, "utf-8")
except UnicodeDecodeError:
try:
- string = unicode(string, "iso-8859-15")
+ string = six.text_type(string, "iso-8859-15")
except UnicodeDecodeError:
raise EficasException("UnicodeDecodeError: UTF-8, Latin-1 \
or Latin-9 expected")
@@ -238,32 +249,32 @@ def tr(string, *args):
from PyQt5.QtWidgets import QApplication
string = _preprocess_atom(string)
if len(args) == 0:
- r = unicode(QApplication.translate("@default", string))
+ r = six.text_type(QApplication.translate("@default", string))
elif len(args) == 1:
if isinstance(args[0], (dict, tuple)):
if string.count("%") == len(args[0]):
- r = unicode(QApplication.translate("@default", string)) % args[0]
+ r = six.text_type(QApplication.translate("@default", string)) % args[0]
elif string.count("%") == 1 and string.count("%(") == 0:
- r = unicode(QApplication.translate("@default", string))\
+ r = six.text_type(QApplication.translate("@default", string))\
% _preprocess_atom(repr(args[0]))
elif string.count("%") == 0:
- r = (unicode(QApplication.translate("@default", string)), args[0])
+ r = (six.text_type(QApplication.translate("@default", string)), args[0])
else:
raise EficasException("ValueError: i18n.translate.tr: \
Improper input string formatting")
- elif isinstance(args[0], (unicode, str, int, float, complex)):
+ elif isinstance(args[0], (six.text_type, str, int, float, complex)):
if string.count("%") == 1:
- r = unicode(QApplication.translate("@default", string))\
+ r = six.text_type(QApplication.translate("@default", string))\
% _preprocess_atom(args[0])
else:
- r = unicode(QApplication.translate("@default", string)) +\
- unicode(_preprocess_atom(args[0]))
+ r = six.text_type(QApplication.translate("@default", string)) +\
+ six.text_type(_preprocess_atom(args[0]))
elif isinstance(args[0], list) or args[0] is None:
if string.count("%") == 1:
- r = unicode(QApplication.translate("@default", string))\
+ r = six.text_type(QApplication.translate("@default", string))\
% _preprocess_atom(repr(args[0]))
else:
- r = (unicode(QApplication.translate("@default", string)), args[0])
+ r = (six.text_type(QApplication.translate("@default", string)), args[0])
else:
raise EficasException("ValueError: i18n.translation.tr: \
@@ -304,7 +315,7 @@ def tr_qt(string, *args):
else:
raise EficasException("ValueError: i18n.translation.tr_qt: \
Improper formatting string parameters")
- elif isinstance(args[0], (unicode, str, int, float, complex)):
+ elif isinstance(args[0], (six.text_type, str, int, float, complex)):
r = _reformat_qstring_from_atom(r, args[0])
elif isinstance(args[0], list):
r = _reformat_qstring_from_list(r, args[0])
@@ -316,7 +327,7 @@ def tr_qt(string, *args):
else:
raise EficasException("ValueError: i18n.translation.tr_qt: \
Improper formatted string parameter set")
- return unicode(r)
+ return six.text_type(r)
if __name__ == "__main__":
diff --git a/Ihm/CONNECTOR.py b/Ihm/CONNECTOR.py
index bff399dc..45c09921 100644
--- a/Ihm/CONNECTOR.py
+++ b/Ihm/CONNECTOR.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+#i -*- coding: utf-8 -*-
# Copyright (C) 2007-2013 EDF R&D
#
# This library is free software; you can redistribute it and/or
@@ -34,12 +34,12 @@
listener(cargs+args)
"""
+from __future__ import absolute_import
+from __future__ import print_function
import traceback
from copy import copy
import weakref
-from Extensions.i18n import tr
-from Extensions.eficas_exception import EficasException
class ConnectorError(Exception):
pass
@@ -50,14 +50,16 @@ class CONNECTOR:
self.connections={}
def Connect(self, object, channel, function, args):
- ###print "Connect",object, channel, function, args
+ #print ("Connect",object, channel, function, args)
idx = id(object)
- if self.connections.has_key(idx):
+ #if self.connections.has_key(idx):
+ if idx in self.connections :
channels = self.connections[idx]
else:
channels = self.connections[idx] = {}
- if channels.has_key(channel):
+ #if channels.has_key(channel):
+ if channel in channels :
receivers = channels[channel]
else:
receivers = channels[channel] = []
@@ -69,15 +71,14 @@ class CONNECTOR:
receivers.remove((funct,fargs))
receivers.append((ref(function),args))
- ###print "Connect",receivers
def Disconnect(self, object, channel, function, args):
try:
receivers = self.connections[id(object)][channel]
except KeyError:
- raise ConnectorError, \
- 'no receivers for channel %s of %s' % (channel, object)
+ raise ConnectorError (
+ 'no receivers for channel %s of %s' % (channel, object))
for funct,fargs in receivers[:]:
if funct() is None:
@@ -95,9 +96,9 @@ class CONNECTOR:
del self.connections[id(object)]
return
- raise ConnectorError,\
+ raise ConnectorError(
'receiver %s%s is not connected to channel %s of %s' \
- % (function, args, channel, object)
+ % (function, args, channel, object))
@@ -106,7 +107,6 @@ class CONNECTOR:
try:
receivers = self.connections[id(object)][channel]
except KeyError:
- #print "ds except"
return
#print "Emit",object, channel, receivers
# Attention : copie pour eviter les pbs lies aux deconnexion reconnexion
@@ -115,7 +115,11 @@ class CONNECTOR:
try:
func=rfunc()
if func:
- apply(func, args + fargs)
+ #print (func,args,fargs)
+ #rint args + fargs
+ #apply(func, args + fargs)
+ if args + fargs == () : func()
+ else : func ( args + fargs)
else:
# Le receveur a disparu
if (rfunc,fargs) in receivers:receivers.remove((rfunc,fargs))
@@ -123,15 +127,19 @@ class CONNECTOR:
traceback.print_exc()
def ref(target,callback=None):
- if hasattr(target,"im_self"):
+ #if hasattr(target,"im_self"):
+ # return BoundMethodWeakref(target)
+ if hasattr(target,"__self__"):
return BoundMethodWeakref(target)
else:
return weakref.ref(target,callback)
class BoundMethodWeakref(object):
def __init__(self,callable):
- self.Self=weakref.ref(callable.im_self)
- self.Func=weakref.ref(callable.im_func)
+ #self.Self=weakref.ref(callable.im_self)
+ #self.Func=weakref.ref(callable.im_func)
+ self.Self=weakref.ref(callable.__self__)
+ self.Func=weakref.ref(callable.__func__)
def __call__(self):
target=self.Self()
@@ -148,27 +156,35 @@ Disconnect = _the_connector.Disconnect
if __name__ == "__main__":
class A:
pass
+
class B:
def add(self,a):
- print ("add ", self , a)
+ print(("--------------------------------add ", self , a))
+
def __del__(self):
- print ("__del__", self)
+ print(("__del__", self))
def f(a):
- print (f, a)
+ print((f, a))
+
a=A()
b=B()
c=B()
+
Connect(a,"add",b.add,())
Connect(a,"add",b.add,())
Connect(a,"add",c.add,())
Connect(a,"add",f,())
+
Emit(a,"add",1)
+
print ("del b")
del b
+
Emit(a,"add",1)
print ("del f")
del f
+
Emit(a,"add",1)
Disconnect(a,"add",c.add,())
Emit(a,"add",1)
diff --git a/Ihm/I_ASSD.py b/Ihm/I_ASSD.py
index bcd7f0ce..9c9fc948 100644
--- a/Ihm/I_ASSD.py
+++ b/Ihm/I_ASSD.py
@@ -20,6 +20,7 @@
#from I_VALIDATOR import ValidException
+from __future__ import absolute_import
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
from Noyau.N_VALIDATOR import ValError
diff --git a/Ihm/I_AVANT.py b/Ihm/I_AVANT.py
index a72e74e4..d3ad628a 100644
--- a/Ihm/I_AVANT.py
+++ b/Ihm/I_AVANT.py
@@ -18,6 +18,8 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+from __future__ import print_function
import types
@@ -33,16 +35,16 @@ class I_AVANT:
def __init__(self,*args):
if len(args) > 2 :
- print ("Erreur a la creation de la regle A_CLASSER(",args,")")
+ print(("Erreur a la creation de la regle A_CLASSER(",args,")"))
return
- if type(args[0]) == types.TupleType:
- self.listeAvant=args[0]
+ if type(args[0]) == tuple:
+ self.listeAvant=args[0]
else :
- self.listeAvant=(args[0],)
- if type(args[1]) == types.TupleType:
- self.listeApres=args[1]
+ self.listeAvant=(args[0],)
+ if type(args[1]) == tuple:
+ self.listeApres=args[1]
else :
- self.listeApres=(args[1],)
+ self.listeApres=(args[1],)
def verif(self,args):
"""
@@ -55,9 +57,9 @@ class I_AVANT:
boolListeApres=0
boolOK=1
for nom in args:
- if nom in self.listeAvant :
+ if nom in self.listeAvant :
boolListeAvant=1
- if boolListeApres == 1 :
+ if boolListeApres == 1 :
boolOK = 0
if nom in self.listeApres :
boolListeApres=1
diff --git a/Ihm/I_A_CLASSER.py b/Ihm/I_A_CLASSER.py
index d4d7c888..b94d794e 100644
--- a/Ihm/I_A_CLASSER.py
+++ b/Ihm/I_A_CLASSER.py
@@ -20,20 +20,21 @@
"""
"""
-import string
+from __future__ import absolute_import
-import I_REGLE
+from . import I_REGLE
+import six
class A_CLASSER(I_REGLE.REGLE):
def gettext(self):
text = 'Regle ' + self.__class__.__name__+ ' :\n'
t=" D'abord :\n"+' '*8
for arg in self.args0:
- t=t+string.strip(arg)+' ou '
+ t=t+arg.strip()+' ou '
text = text + t[0:-4] +'\n'
t = " Ensuite :\n"+' '*8
for arg in self.args1:
- t=t+string.strip(arg)+' ou '
+ t=t+arg.strip()+' ou '
text = text + t[0:-4] +'\n'
- return unicode(text)
+ return six.text_type(text)
diff --git a/Ihm/I_ENTITE.py b/Ihm/I_ENTITE.py
index ff8512cf..1b3b08d3 100644
--- a/Ihm/I_ENTITE.py
+++ b/Ihm/I_ENTITE.py
@@ -17,6 +17,8 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+import six
_no=0
import Accas
@@ -101,7 +103,7 @@ class ENTITE:
(self.ang != "" and self.ang != None) ):
dico={}
if self.get_docu() !=None : dico["docu"]=self.get_docu()
- if self.fr != None : dico["fr"]=unicode(self.fr,"iso-8859-1")
+ if self.fr != None : dico["fr"]=six.text_type(self.fr,"iso-8859-1")
if self.ang != None : dico["ang"]=self.ang
doc=ET.SubElement(moi,'doc')
doc.attrib=dico
@@ -112,10 +114,10 @@ class ENTITE:
# les attributs sont toujours du texte
dico={}
if (self.defaut != None) and (self.defaut != 'None') :
- if isinstance(self.defaut,str ) : dico["defaut"]=unicode(self.defaut,"iso-8859-1")
+ if isinstance(self.defaut,str ) : dico["defaut"]=six.text_type(self.defaut,"iso-8859-1")
else :dico["defaut"]=str(self.defaut)
if self.get_sug() !=None:
- if isinstance(self.get_sug(),str ) : dico["sug"]=unicode(self.get_sug(),"iso-8859-1")
+ if isinstance(self.get_sug(),str ) : dico["sug"]=six.text_type(self.get_sug(),"iso-8859-1")
else :dico["sug"]=str(self.get_sug())
doc=ET.SubElement(moi,'ValeurDef')
@@ -150,7 +152,7 @@ class ENTITE:
typeAttendu=ET.SubElement(moi,'typeAttendu')
l=[]
for t in self.type:
- if type(t) == types.TypeType : l.append(t.__name__)
+ if type(t) == type : l.append(t.__name__)
else : l.append(t)
typeAttendu.text=str(l)
diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py
index 1216a877..7ece4b6f 100644
--- a/Ihm/I_ETAPE.py
+++ b/Ihm/I_ETAPE.py
@@ -20,8 +20,10 @@
"""
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
import sys,re
-import string,types
+import types
from copy import copy
from Extensions.i18n import tr
@@ -39,8 +41,8 @@ import Validation
# fin import a resorber
# Modules EFICAS
-import I_MCCOMPO
-import CONNECTOR
+from . import I_MCCOMPO
+from . import CONNECTOR
from Extensions import commande_comm
class ETAPE(I_MCCOMPO.MCCOMPO):
@@ -51,13 +53,13 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
def get_sdname(self):
#print "SDNAME ",self.reuse,self.sd,self.sd.get_name()
if CONTEXT.debug :
- print ("SDNAME ", self.reuse, self.sd, self.sd.get_name())
+ print(("SDNAME ", self.reuse, self.sd, self.sd.get_name()))
sdname=''
if self.reuse != None:
sdname= self.reuse.get_name()
else:
if self.sd:sdname=self.sd.get_name()
- if string.find(sdname,'sansnom') != -1 or string.find(sdname,'SD_') != -1:
+ if sdname.find('sansnom') != -1 or sdname.find('SD_') != -1:
# dans le cas ou la SD est 'sansnom' ou 'SD_' on retourne la chaine vide
return ''
return sdname
@@ -177,7 +179,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
else :
#Un concept produit preexiste
old_nom=self.sd.nom
- if string.find(old_nom,'sansnom') :
+ if old_nom.find('sansnom') :
# Dans le cas ou old_nom == sansnom, isvalid retourne 0 alors que ...
# par contre si le concept existe et qu'il s'appelle sansnom c'est que l'etape est valide
# on peut donc le nommer sans test prealable
@@ -254,7 +256,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
"""
#print "control_sdprods",d.keys(),self.sd and self.sd.nom,self.nom
if self.sd:
- if d.has_key(self.sd.nom):
+ if self.sd.nom in d :
# Le concept est deja defini
if self.reuse and self.reuse is d[self.sd.nom]:
# Le concept est reutilise : situation normale
@@ -352,7 +354,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
if type(self.definition.sd_prod) == types.FunctionType:
d=self.cree_dict_valeurs(self.mc_liste)
try:
- classe_sd_prod = apply(self.definition.sd_prod,(),d)
+ classe_sd_prod = self.definition.sd_prod(*(), **d)
except:
return []
else:
@@ -408,7 +410,6 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
texte_commande = g.gener(self,format='beautifie')
# Il faut enlever la premiere ligne vide de texte_commande que
# rajoute le generator
- #rebut,texte_commande = string.split(texte_commande,'\n',1)
# on construit l'objet COMMANDE_COMM repesentatif de self mais non
# enregistre dans le jdc (pas ajoute dans jdc.etapes)
parent=self.parent
@@ -438,7 +439,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
"""
try:
sd=Noyau.N_ETAPE.ETAPE.Build_sd(self,nom)
- except AsException,e :
+ except AsException as e :
# Une erreur s'est produite lors de la construction du concept
# Comme on est dans EFICAS, on essaie de poursuivre quand meme
# Si on poursuit, on a le choix entre deux possibilites :
diff --git a/Ihm/I_EXCLUS.py b/Ihm/I_EXCLUS.py
index 10fe1c55..e15c7208 100644
--- a/Ihm/I_EXCLUS.py
+++ b/Ihm/I_EXCLUS.py
@@ -20,7 +20,8 @@
"""
"""
-import I_REGLE
+from __future__ import absolute_import
+from . import I_REGLE
class EXCLUS(I_REGLE.REGLE):
def purge_liste(self,liste_a_purger,liste_mc_presents):
diff --git a/Ihm/I_FICHIER.py b/Ihm/I_FICHIER.py
index 94996ff8..b309e9a5 100644
--- a/Ihm/I_FICHIER.py
+++ b/Ihm/I_FICHIER.py
@@ -17,7 +17,8 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import types,string
+from __future__ import absolute_import
+import types
class Fichier:
@@ -29,7 +30,7 @@ class Fichier:
def __convert__(self,valeur):
# Attention ne verifie pas grand chose
# cela vaut-il la peine de refaire ce que Qt fait tres bien
- if type(valeur) != types.StringType :
+ if type(valeur) != bytes :
return None
return valeur
diff --git a/Ihm/I_FONCTION.py b/Ihm/I_FONCTION.py
index b36acce9..53a7fc3e 100644
--- a/Ihm/I_FONCTION.py
+++ b/Ihm/I_FONCTION.py
@@ -17,8 +17,9 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import string
-from I_ASSD import ASSD
+from __future__ import absolute_import
+from __future__ import print_function
+from .I_ASSD import ASSD
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
@@ -62,10 +63,9 @@ class formule(FONCTION) :
try :
res=eval(self.expression,self.jdc.const_context, context)
except :
-####### A TRAVAILLER DEPUIS ICI !!
- print (tr(75 * '!'))
- print ('! ' + tr(string.ljust("Erreur evaluation formule %s", 72), self.nom) + '!')
- print (tr(75 * '!'))
+ print (75 * '!')
+ print ('! ' + "Erreur evaluation formule %s" % self.nom + 20*'!')
+ print (75 * '!')
raise EficasException
return res
diff --git a/Ihm/I_FORM_ETAPE.py b/Ihm/I_FORM_ETAPE.py
index 37323c9a..8318bee3 100644
--- a/Ihm/I_FORM_ETAPE.py
+++ b/Ihm/I_FORM_ETAPE.py
@@ -19,16 +19,17 @@
#
"""
"""
+from __future__ import absolute_import
import string,traceback,re
identifier = re.compile(r"^[^\d\W]\w*\Z", re.UNICODE)
from Extensions.i18n import tr
-from I_MACRO_ETAPE import MACRO_ETAPE
+from .I_MACRO_ETAPE import MACRO_ETAPE
from Extensions import interpreteur_formule
from Editeur import analyse_catalogue
-analyse_catalogue.l_noms_commandes.append('FORM') # déclare le nom FORM à l'analyseur de catalogue
+analyse_catalogue.l_noms_commandes.append('FORM') # declare le nom FORM a l'analyseur de catalogue
class FORM_ETAPE(MACRO_ETAPE):
@@ -37,24 +38,24 @@ class FORM_ETAPE(MACRO_ETAPE):
def McBuild(self):
self.mc_liste=self.build_mc()
- # on crée la liste des types autorisés (liste des noms de mots-clés
+ # on cree la liste des types autorises (liste des noms de mots-cles
# simples dans le catalogue de FORMULE)
- self.l_types_autorises = self.definition.entites.keys()
+ self.l_types_autorises = list(self.definition.entites.keys())
# en plus de la construction traditionnelle des fils de self
- # il faut pour les FORMULE décortiquer l'expression ...
+ # il faut pour les FORMULE decortiquer l'expression ...
self.type_retourne,self.arguments,self.corps = self.analyse_formule()
def analyse_formule(self):
"""
- Cette méthode décortique l'expression de la FORMULE.
+ Cette methode decortique l'expression de la FORMULE.
Elle retourne 3 valeurs:
- - le type retourné par la FORMULE
+ - le type retourne par la FORMULE
- les arguments de la FORMULE
- le corps de la FORMULE, cad son expression
"""
if len(self.mc_liste) == 0:
- # pas de fils pour self --> la FORMULE est incomplète
+ # pas de fils pour self --> la FORMULE est incomplete
return None,None,None
type_retourne="REEL"
if len(self.mc_liste) > 0:
@@ -81,7 +82,7 @@ class FORM_ETAPE(MACRO_ETAPE):
def get_formule(self):
"""
- Retourne un tuple décrivant la formule :
+ Retourne un tuple decrivant la formule :
(nom,type_retourne,arguments,corps)
"""
t,a,c = self.analyse_formule()
@@ -90,17 +91,17 @@ class FORM_ETAPE(MACRO_ETAPE):
def verif_arguments(self,arguments = None):
"""
- Vérifie si les arguments passés en argument (si aucun prend les arguments courants)
+ Verifie si les arguments passes en argument (si aucun prend les arguments courants)
sont des arguments valide pour une FORMULE.
Retourne :
- - un booléen, qui vaut 1 si arguments licites, 0 sinon
+ - un booleen, qui vaut 1 si arguments licites, 0 sinon
- un message d'erreurs ('' si illicites)
"""
if not arguments :
arguments = self.arguments
if not arguments :
return 0,"Une formule doit avoir au minimum un argument"
- # il faut au préalable enlever les parenthèses ouvrantes et fermantes
+ # il faut au prealable enlever les parentheses ouvrantes et fermantes
# encadrant les arguments
arguments = string.strip(arguments)
if arguments[0] != '(':
@@ -110,7 +111,7 @@ class FORM_ETAPE(MACRO_ETAPE):
# on peut tester la syntaxe de chaque argument maintenant
erreur=''
test = 1
- arguments = arguments[1:-1] # on enlève les parenthèses ouvrante et fermante
+ arguments = arguments[1:-1] # on enleve les parentheses ouvrante et fermante
l_arguments = string.split(arguments,',')
for a in l_arguments :
if not re.match(identifier,str(a)) : return 0, str(a)+" n est pas un identifiant"
@@ -118,10 +119,10 @@ class FORM_ETAPE(MACRO_ETAPE):
def verif_corps(self,corps=None,arguments=None):
"""
- Cette méthode a pour but de vérifier si le corps de la FORMULE
+ Cette methode a pour but de verifier si le corps de la FORMULE
est syntaxiquement correct.
Retourne :
- - un booléen, qui vaut 1 si corps de FORMULE licite, 0 sinon
+ - un booleen, qui vaut 1 si corps de FORMULE licite, 0 sinon
- un message d'erreurs ('' si illicite)
"""
if not corps :
@@ -129,10 +130,10 @@ class FORM_ETAPE(MACRO_ETAPE):
if not arguments :
arguments = self.arguments
formule=(self.get_nom(),self.type_retourne,arguments,corps)
- # on récupère la liste des constantes et des autres fonctions prédéfinies
- # et qui peuvent être utilisées dans le corps de la formule courante
+ # on recupere la liste des constantes et des autres fonctions predefinies
+ # et qui peuvent etre utilisees dans le corps de la formule courante
l_ctes,l_form = self.jdc.get_parametres_fonctions_avant_etape(self)
- # on crée un objet vérificateur
+ # on cree un objet verificateur
try:
verificateur = self.interpreteur(formule=formule,
constantes = l_ctes,
@@ -144,10 +145,10 @@ class FORM_ETAPE(MACRO_ETAPE):
def verif_nom(self,nom=None):
"""
- Vérifie si le nom passé en argument (si aucun prend le nom courant)
+ Verifie si le nom passe en argument (si aucun prend le nom courant)
est un nom valide pour une FORMULE.
Retourne :
- - un booléen, qui vaut 1 si nom licite, 0 sinon
+ - un booleen, qui vaut 1 si nom licite, 0 sinon
- un message d'erreurs ('' si illicite)
"""
if not nom :
@@ -165,10 +166,10 @@ class FORM_ETAPE(MACRO_ETAPE):
def verif_type(self,type=None):
"""
- Vérifie si le type passé en argument (si aucun prend le type courant)
+ Verifie si le type passe en argument (si aucun prend le type courant)
est un type valide pour une FORMULE.
Retourne :
- - un booléen, qui vaut 1 si type licite, 0 sinon
+ - un booleen, qui vaut 1 si type licite, 0 sinon
- un message d'erreurs ('' si illicite)
"""
if not type:
@@ -181,11 +182,11 @@ class FORM_ETAPE(MACRO_ETAPE):
def verif_formule(self,formule=None):
"""
- Vérifie la validité de la formule passée en argument.
- Cette nouvelle formule est passée sous la forme d'un tuple : (nom,type_retourne,arguments,corps)
- Si aucune formule passée, prend les valeurs courantes de la formule
+ Verifie la validite de la formule passee en argument.
+ Cette nouvelle formule est passee sous la forme d'un tuple : (nom,type_retourne,arguments,corps)
+ Si aucune formule passee, prend les valeurs courantes de la formule
Retourne :
- - un booléen, qui vaut 1 si formule licite, 0 sinon
+ - un booleen, qui vaut 1 si formule licite, 0 sinon
- un message d'erreurs ('' si illicite)
"""
if not formule :
@@ -200,7 +201,7 @@ class FORM_ETAPE(MACRO_ETAPE):
test_corps,erreur_corps = self.verif_corps(corps = formule[3], arguments = args)
# test global = produit des tests partiels
test = test_nom*test_type*test_arguments*test_corps
- # message d'erreurs global = concaténation des messages partiels
+ # message d'erreurs global = concatenation des messages partiels
erreur = ''
if not test :
for mess in (erreur_nom,erreur_type,erreur_arguments,erreur_corps):
@@ -239,17 +240,17 @@ class FORM_ETAPE(MACRO_ETAPE):
def update(self,formule):
"""
- Méthode externe.
- Met à jour les champs nom, type_retourne,arguments et corps de la FORMULE
- par les nouvelles valeurs passées dans le tuple formule.
- On stocke les valeurs SANS vérifications.
+ Methode externe.
+ Met a jour les champs nom, type_retourne,arguments et corps de la FORMULE
+ par les nouvelles valeurs passees dans le tuple formule.
+ On stocke les valeurs SANS verifications.
"""
self.type_retourne = formule[1]
self.arguments = '('+formule[2]+')'
self.corps = formule[3]
- # il faut ajouter le mot-clé simple correspondant dans mc_liste
- # pour cela on utilise la méthode générale build_mc
- # du coup on est obligé de modifier le dictionnaire valeur de self ...
+ # il faut ajouter le mot-cle simple correspondant dans mc_liste
+ # pour cela on utilise la methode generale build_mc
+ # du coup on est oblige de modifier le dictionnaire valeur de self ...
self.valeur = {}
self.valeur[self.type_retourne] = self.arguments+' = ' + self.corps
self.McBuild()
@@ -283,7 +284,7 @@ class FORM_ETAPE(MACRO_ETAPE):
mocles["VALE_C"]=formule[2]
for k,v in self.definition.entites.items():
- if not mocles.has_key(k):continue
+ if not k in mocles : continue
child=self.definition.entites[k](None,nom=k,parent=self)
child.valeur=mocles[k]
child.state = 'modified'
@@ -330,10 +331,10 @@ class FORM_ETAPE(MACRO_ETAPE):
- sd=concept detruit
Fonction :
Mettre a jour les mots cles de l etape et eventuellement le concept produit si reuse
- suite à la disparition du concept sd
+ suite a la disparition du concept sd
Seuls les mots cles simples MCSIMP font un traitement autre que de transmettre aux fils,
- sauf les objets FORM_ETAPE qui doivent vérifier que le concept détruit n'est pas
- utilisé dans le corps de la fonction
+ sauf les objets FORM_ETAPE qui doivent verifier que le concept detruit n'est pas
+ utilise dans le corps de la fonction
"""
self.init_modif()
@@ -343,8 +344,8 @@ class FORM_ETAPE(MACRO_ETAPE):
- old_sd=concept remplace
- sd = nouveau concept
Fonction :
- Les objets FORM_ETAPE devraient vérifier que le concept remplacé n'est pas
- utilisé dans le corps de la fonction
+ Les objets FORM_ETAPE devraient verifier que le concept remplace n'est pas
+ utilise dans le corps de la fonction
"""
self.init_modif()
diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py
index 2e169c5b..67a14414 100644
--- a/Ihm/I_JDC.py
+++ b/Ihm/I_JDC.py
@@ -20,21 +20,23 @@
"""
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
import types,traceback,sys,os
-import string,linecache
+import linecache
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
# Modules Eficas
-import I_OBJECT
+from . import I_OBJECT
import Noyau
from Noyau.N_ASSD import ASSD
#from Noyau.N_LASSD import LASSD
from Noyau.N_ETAPE import ETAPE
from Noyau.N_Exception import AsException
from Extensions import commentaire,parametre,parametre_eval
-import CONNECTOR
+from . import CONNECTOR
import Validation
class LASSD:
@@ -195,7 +197,7 @@ class JDC(I_OBJECT.OBJECT):
return 1
elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' :
return 1
- elif type(type_ok) != types.ClassType and not isinstance(type_ok,type):
+ elif type(type_ok) != type and not isinstance(type_ok,type):
continue
elif v.__class__ == type_ok or issubclass(v.__class__,type_ok):
return 1
@@ -219,7 +221,7 @@ class JDC(I_OBJECT.OBJECT):
if isinstance(child,commentaire.COMMENTAIRE):
ind = ind+1
objet = commentaire.COMMENTAIRE('',parent=self)
- objet.nom = "_comm_"+`ind`
+ objet.nom = "_comm_"+repr(ind)
if pos == None : pos = 0
self.etapes.insert(pos,objet)
self.reset_context()
@@ -561,7 +563,7 @@ class JDC(I_OBJECT.OBJECT):
et du contexte gobal
"""
if param in self.params : self.params.remove(param)
- if self.g_context.has_key(param.nom) : del self.g_context[param.nom]
+ if param.nom in self.g_context : del self.g_context[param.nom]
def get_parametres_fonctions_avant_etape(self,etape):
"""
@@ -579,12 +581,12 @@ class JDC(I_OBJECT.OBJECT):
for param in self.params:
nom = param.nom
if not nom : continue
- if d.has_key(nom): l_constantes.append(nom)
+ if nom in d: l_constantes.append(nom)
# construction de l_fonctions
for form in self.fonctions:
nom = form.nom
if not nom : continue
- if d.has_key(nom): l_fonctions.append(form.get_formule())
+ if nom in d: l_fonctions.append(form.get_formule())
# on ajoute les concepts produits par DEFI_VALEUR
# XXX On pourrait peut etre faire plutot le test sur le type
@@ -697,8 +699,8 @@ class JDC(I_OBJECT.OBJECT):
#print "del_sdprod",self.g_context
#print "del_sdprod",self.sds_dict
#if sd in self.sds : self.sds.remove(sd)
- if self.g_context.has_key(sd.nom) : del self.g_context[sd.nom]
- if self.sds_dict.has_key(sd.nom) : del self.sds_dict[sd.nom]
+ if sd.nom in self.g_context : del self.g_context[sd.nom]
+ if sd.nom in self.sds_dict : del self.sds_dict[sd.nom]
def del_param(self,param):
"""
@@ -706,7 +708,7 @@ class JDC(I_OBJECT.OBJECT):
et du contexte gobal
"""
if param in self.params : self.params.remove(param)
- if self.g_context.has_key(param.nom) : del self.g_context[param.nom]
+ if param.nom in self.g_context : del self.g_context[param.nom]
def del_fonction(self,fonction):
"""
@@ -714,7 +716,7 @@ class JDC(I_OBJECT.OBJECT):
et du contexte gobal
"""
if fonction in self.fonctions : self.fonctions.remove(fonction)
- if self.g_context.has_key(fonction.nom) : del self.g_context[fonction.nom]
+ if fonction.nom in self.g_context: del self.g_context[fonction.nom]
def append_sdprod(self,sd):
"""
@@ -790,9 +792,9 @@ class JDC(I_OBJECT.OBJECT):
child.update_concept(sd)
def dump_state(self):
- print ("JDC.state: ",self.state)
+ print(("JDC.state: ",self.state))
for etape in self.etapes :
- print (etape.nom+".state: ",etape.state)
+ print((etape.nom+".state: ",etape.state))
def change_unit(self,unit,etape,old_unit):
#print "change_unit",unit,etape,old_unit
@@ -891,7 +893,7 @@ class JDC(I_OBJECT.OBJECT):
# Cette etape est indiquee par l'attribut _etape_context qui a ete
# positionne prealablement par un appel a set_etape_context
- if CONTEXT.debug : print ("JDC.NommerSdprod ",sd,sdnom)
+ if CONTEXT.debug : print(("JDC.NommerSdprod ",sd,sdnom))
if self._etape_context:
o=self.get_contexte_avant(self._etape_context).get(sdnom,None)
@@ -949,9 +951,9 @@ class JDC(I_OBJECT.OBJECT):
text=fproc.read()
fproc.close()
#if file == None : return None,None
- text=string.replace(text,'\r\n','\n')
+ text=text.replace('\r\n','\n')
if file:
- linecache.cache[file]=0,0,string.split(text,'\n'),file
+ linecache.cache[file]=0,0,text.split('\n'),file
return file,text
def isvalid(self,cr='non'):
diff --git a/Ihm/I_JDC_CATA.py b/Ihm/I_JDC_CATA.py
index 9ffcce38..fadcf680 100644
--- a/Ihm/I_JDC_CATA.py
+++ b/Ihm/I_JDC_CATA.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau import N_JDC_CATA
class JDC_CATA:
@@ -31,11 +32,11 @@ class JDC_CATA:
return
-#ATTENTION SURCHARGE: cette methode doit etre synchronisée avec celle du Noyau
+#ATTENTION SURCHARGE: cette methode doit etre synchronisee avec celle du Noyau
def enregistre(self,commande):
"""
- Cette méthode surcharge la méthode de la classe du Noyau
- Marche avec Noyau mais si un autre package l'a déjà surchargée ???
+ Cette methode surcharge la methode de la classe du Noyau
+ Marche avec Noyau
"""
N_JDC_CATA.JDC_CATA.enregistre(self,commande)
self.l_noms_entites.append(commande.nom)
diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py
index 62ca9a7e..b3c03efb 100644
--- a/Ihm/I_MACRO_ETAPE.py
+++ b/Ihm/I_MACRO_ETAPE.py
@@ -20,17 +20,18 @@
"""
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
import sys
import os.path as osp
-import traceback,types,string
+import traceback,types
# Modules Eficas
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-import exceptions
-import I_ETAPE
-import I_ENTITE
-import I_OBJECT
+from . import I_ETAPE
+from . import I_ENTITE
+from . import I_OBJECT
import Noyau
from Noyau.N_ASSD import ASSD
from Noyau import N__F
@@ -42,6 +43,8 @@ import Noyau, Validation.V_MACRO_ETAPE
from Noyau import N_Exception
from Noyau.N_Exception import AsException
import Accas # attention aux imports circulaires
+import six
+from six.moves import range
# fin import a resorber
class MACRO_ETAPE(I_ETAPE.ETAPE):
@@ -64,7 +67,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
if co.nom == nom_sd:return co
if type(self.definition.op_init) == types.FunctionType:
d={}
- apply(self.definition.op_init,(self,d))
+ self.definition.op_init(*(self,d))
return d.get(nom_sd,None)
return None
@@ -77,10 +80,11 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
ou leve une exception
--> utilisee par ops.POURSUITE et INCLUDE
"""
- #print "get_contexte_jdc",self,self.nom
+ print ("get_contexte_jdc",self,self.nom)
# On recupere l'etape courante
step=CONTEXT.get_current_step()
try:
+ #if 1 :
# on essaie de creer un objet JDC auxiliaire avec un contexte initial
# Attention get_contexte_avant retourne un dictionnaire qui contient
# le contexte courant. Ce dictionnaire est reactualise regulierement.
@@ -119,7 +123,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
format=self.jdc.appli.format_fichier.get()
#on force a python pour Carmel
if format=="CARMEL3D" : format="python"
- if convert.plugins.has_key(format):
+ if format in convert.plugins :
# Le convertisseur existe on l'utilise
p=convert.plugins[format]()
p.text=text
@@ -150,6 +154,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
self.jdc.jdcDict=self.jdc_aux
except:
+ #else :
traceback.print_exc()
# On retablit l'etape courante step
CONTEXT.unset_current_step()
@@ -164,7 +169,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
#print j.isvalid()
CONTEXT.unset_current_step()
CONTEXT.set_current_step(step)
- raise exceptions.Exception(tr("Impossible de relire le fichier %s \n ")+ unicode(j.cr))
+ raise EficasException(tr("Impossible de relire le fichier %s \n ")+ six.text_type(j.cr))
if not j.isvalid():
@@ -200,7 +205,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
# le nommage est possible
self.g_context.clear()
for k,v in j_context.items():
- if not context_ini.has_key(k) or context_ini[k] != v:
+ if (not k in context_ini) or (context_ini[k] != v):
self.g_context[k]=v
self.parent.sds_dict[k]=v
@@ -219,6 +224,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
if callable(v):continue
self.g_context[k]=param2.Variable(k,v)
+ print ('kljkljkljlkjklj')
# On recupere le contexte courant
self.current_context=j.current_context
self.index_etape_courante=j.index_etape_courante
@@ -228,6 +234,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
CONTEXT.unset_current_step()
CONTEXT.set_current_step(step)
+ print ('kljkljkljlkjklj')
return j_context
def reevalue_sd_jdc(self):
@@ -252,8 +259,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
if not hasattr(self,'old_contexte_fichier_init'):return [],[]
l_sd_suppressed = []
l_sd_replaced = []
- for old_key in self.old_contexte_fichier_init.keys():
- if not self.contexte_fichier_init.has_key(old_key):
+ for old_key in self.old_contexte_fichier_init:
+ if not old_key in self.contexte_fichier_init:
if isinstance(self.old_contexte_fichier_init[old_key],ASSD):
l_sd_suppressed.append(self.old_contexte_fichier_init[old_key])
else:
@@ -277,7 +284,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
"""
#print "I_MACRO_ETAPE.control_sdprods",d.keys(),self.nom,self.sd and self.sd.nom
if self.sd:
- if d.has_key(self.sd.nom):
+ if self.sd.nom in d:
# Le concept est deja defini
if self.reuse and self.reuse is d[self.sd.nom]:
# Le concept est reutilise : situation normale
@@ -297,7 +304,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
sdprods=self.sdprods[:]
self.sdprods=[]
for co in sdprods:
- if d.has_key(co.nom) and co is not d[co.nom] :
+ if co.nom in d and co is not d[co.nom] :
#nettoie les mots cles de l'etape qui ont comme valeur co
self.delete_concept(co)
#supprime les references a co dans les etapes suivantes
@@ -426,7 +433,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
self.make_contexte_include(new_fic,text)
except:
l=traceback.format_exception_only(tr("Fichier invalide %s", sys.exc_info()[1]))
- self.fichier_err=string.join(l)
+ self.fichier_err=''.join(l)
raise EficasException(self.fichier_err)
# L'evaluation de text dans un JDC auxiliaire s'est bien passe
@@ -474,7 +481,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
self.g_context.clear()
context_ini=self.jdc_aux.context_ini
for k,v in j_context.items():
- if not context_ini.has_key(k) or context_ini[k] != v:
+ if not k in context_ini or context_ini[k] != v:
self.g_context[k]=v
self.parent.sds_dict[k]=v
# On recupere le contexte courant
@@ -567,12 +574,12 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
if self.jdc.appli is not None:
self.jdc.appli.affiche_alerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message= tr("Ce fichier ne sera pas pris en compte\n %s",string.join(l)))
+ message= tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l)))
self.g_context={}
self.etapes=[]
self.jdc_aux=None
- self.fichier_err = string.join(l)
+ self.fichier_err = ''.join(l)
self.contexte_fichier_init={}
self.init_modif()
self.fin_modif()
@@ -582,9 +589,10 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
"""
Cette methode sert a craer un contexte en interpratant un texte source Python.
"""
- #print "make_contexte_include",fichier
+ print ("make_contexte_include",fichier)
# on recupere le contexte d'un nouveau jdc dans lequel on interprete text
contexte = self.get_contexte_jdc(fichier,text)
+ print ("make_contexte_include",fichier)
if contexte == None :
raise EficasException("Impossible de construire le jeu de commandes correspondant au fichier")
else:
@@ -596,7 +604,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
# g_context est utilise pour avoir les concepts produits par la macro
# contexte_fichier_init est utilise pour avoir les concepts supprimes par la macro
self.contexte_fichier_init = contexte
- #print "fin make_contexte_include",fichier
+ print ("fin make_contexte_include",fichier)
def reevalue_fichier_init_OBSOLETE(self):
"""Recalcule les concepts produits par le fichier enregistre"""
@@ -606,7 +614,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
self.make_contexte_include(self.fichier_ini ,self.fichier_text)
except:
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
- self.fichier_err = string.join(l)
+ self.fichier_err = ''.join(l)
self.g_context={}
self.etapes=[]
self.jdc_aux=None
@@ -678,8 +686,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
# On conserve la memoire du nouveau fichier
# mais on n'utilise pas les concepts crees par ce fichier
- # on met l'etape en erreur : fichier_err=string.join(l)
- self.fichier_err=string.join(l)
+ # on met l'etape en erreur : fichier_err=''.join(l)
+ self.fichier_err=''.join(l)
self.g_context={}
self.etapes=[]
self.jdc_aux=None
@@ -717,14 +725,14 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
# On est dans le cas d'un include. On reutilise toutes les unites de parent
units=self.parent.recorded_units
- if self.parent.recorded_units.has_key(unite):
+ if unite in self.parent.recorded_units:
f,text,units=self.parent.recorded_units[unite]
elif self.jdc :
if fname:
if not osp.exists(fname):
raise AsException(fname + tr(" n'est pas un fichier existant"))
f = fname
- text = open(fname, 'rb').read()
+ text = open(fname, 'r').read()
else:
f,text=self.jdc.get_file(unite=unite, fic_origine=fic_origine)
else:
@@ -761,7 +769,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
return
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init,(self,d))
+ self.definition.op_init(*(self,d))
if self.sd != None:d[self.sd.nom]=self.sd
for co in self.sdprods:
d[co.nom]=co
@@ -801,7 +809,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
def make_includeCND(self,fichier=None):
unite=999
if fichier==None : return
- if hasattr(self,'fichier_ini') : print (self.fichier_ini)
+ if hasattr(self,'fichier_ini') : print((self.fichier_ini))
if hasattr(self,'fichier_ini') : return
self.fichier_ini=fichier
from acquiertGroupes import getGroupes
@@ -939,7 +947,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
raise EficasException(" ")
if nbVariableOut != 1 :
- print (nbVariableOut ,"nbVariableOut")
+ print((nbVariableOut ,"nbVariableOut"))
self.make_incl2_except(mess=tr("le fichier doit contenir une unique variable de sortie"))
raise EficasException(" ")
@@ -952,7 +960,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
raise EficasException(" ")
try:
- print (self.fichier_ini ,self.fichier_text)
+ print((self.fichier_ini ,self.fichier_text))
self.make_contexte_include(self.fichier_ini ,self.fichier_text)
self.old_context_fichier_init=self.contexte_fichier_init
self.parent.record_unit(unite,self)
@@ -991,7 +999,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
if mess == None :
self.jdc.appli.affiche_alerte(tr("Erreur lors de l'evaluation du fichier inclus"),
message= tr("Le contenu de ce fichier ne sera pas pris en compte\n %s",\
- string.join(l)))
+ ''.join(l)))
else :
self.jdc.appli.affiche_alerte(tr("Erreur lors de l'evaluation du fichier inclus"),
@@ -1000,7 +1008,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
self.g_context={}
self.etapes=[]
self.jdc_aux=None
- self.fichier_err = string.join(l)
+ self.fichier_err = ''.join(l)
self.contexte_fichier_init={}
try :
MCFils=self.get_child('FileName')
@@ -1054,12 +1062,12 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
if self.jdc.appli:
self.jdc.appli.affiche_alerte(tr("Erreur lors de l'evaluation du fichier inclus"),
- message=tr("Le contenu de ce fichier ne sera pas pris en compte\n"+string.join(l)))
+ message=tr("Le contenu de ce fichier ne sera pas pris en compte\n"+''.join(l)))
self.parent.record_unit(unite,self)
self.g_context={}
self.etapes=[]
self.jdc_aux=None
- self.fichier_err = string.join(l)
+ self.fichier_err = ''.join(l)
self.contexte_fichier_init={}
raise EficasException(" ")
@@ -1098,13 +1106,13 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
raise EficasException(" ")
try:
self.make_contexte_include(self.fichier_ini ,self.fichier_text)
- if not self.g_context.has_key(self.nom_mater):
+ if not self.nom_mater in self.g_context :
#Pour permettre de lire un jeu de commandes avec des INCLUDE_MATERIAU errones
self.g_context[self.nom_mater]=None
if self.parent: self.parent.g_context[self.nom_mater]=None
except:
l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1]))
- self.fichier_err = string.join(l)
+ self.fichier_err = ''.join(l)
self.g_context={}
#Pour permettre de lire un jeu de commandes avec des INCLUDE_MATERIAU errones
if self.parent:
@@ -1192,12 +1200,12 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
if self.jdc.appli:
self.jdc.appli.affiche_alerte(tr("Erreur lors de l'evaluation du fichier poursuite"),
- message=tr("Ce fichier ne sera pas pris en compte\n %s",string.join(l)))
+ message=tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l)))
self.parent.record_unit(None,self)
self.g_context={}
self.etapes=[]
self.jdc_aux=None
- self.fichier_err = string.join(l)
+ self.fichier_err = ''.join(l)
self.contexte_fichier_init={}
raise EficasException(" ")
diff --git a/Ihm/I_MCBLOC.py b/Ihm/I_MCBLOC.py
index 92a2ef54..1ee8c2fe 100644
--- a/Ihm/I_MCBLOC.py
+++ b/Ihm/I_MCBLOC.py
@@ -17,6 +17,7 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import I_MCCOMPO
+from __future__ import absolute_import
+from . import I_MCCOMPO
class MCBLOC(I_MCCOMPO.MCCOMPO):pass
diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py
index c629886a..f61bf61c 100644
--- a/Ihm/I_MCCOMPO.py
+++ b/Ihm/I_MCCOMPO.py
@@ -19,19 +19,21 @@
#
"""
"""
+from __future__ import absolute_import
+from __future__ import print_function
import string,types,sys
from copy import copy
import traceback
+import Validation
from Extensions.i18n import tr
-from Noyau.N_MCLIST import MCList
from Noyau.N_MCSIMP import MCSIMP
from Noyau.N_MCFACT import MCFACT
from Noyau.N_MCBLOC import MCBLOC
-import I_OBJECT
-import Validation
+from Noyau.N_MCLIST import MCList
+from . import I_OBJECT
-import CONNECTOR
+from . import CONNECTOR
class MCCOMPO(I_OBJECT.OBJECT):
def getlabeltext(self):
@@ -62,7 +64,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
dico=objet_cata.entites
l=[]
specifique=0
- for obj in dico.keys() :
+ for obj in list(dico.keys()) :
if not(hasattr(dico[obj],'cache')) or dico[obj].cache==0 :
l.append(obj)
else :
@@ -112,7 +114,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
pass
else :
#XXX CCAR : les MCNUPLET ne sont pas traites
- if CONTEXT.debug : print ' ',k,' est un objet de type inconnu :',type(objet)
+ if CONTEXT.debug : print(' ',k,' est un objet de type inconnu :',type(objet))
else :
# l'objet est absent : on enleve de la liste les blocs
if self.definition.entites[k].statut=='c' :
@@ -173,7 +175,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
d_mc[mc.nom]=mc
# on construit la liste des objets ordonnes
for nom_mc in liste_noms_mc_ordonnee:
- if d_mc.has_key(nom_mc):
+ if nom_mc in d_mc:
liste.append(d_mc.get(nom_mc))
# on la retourne
return liste
@@ -207,7 +209,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
l'objet MCCOMPOSE
"""
self.init_modif()
- if type(name)==types.StringType :
+ if type(name)==bytes :
# on est en mode creation d'un motcle
if self.ispermis(name) == 0 : return 0
objet=self.definition.entites[name](val=None,nom=name,parent=self)
@@ -265,9 +267,9 @@ class MCCOMPO(I_OBJECT.OBJECT):
est bien permis, cad peut bien etre un fils de self,
Retourne 0 sinon
"""
- if type(fils) == types.StringType :
+ if type(fils) == bytes :
# on veut juste savoir si self peut avoir un fils de nom 'fils'
- if self.definition.entites.has_key(fils):
+ if fils in self.definition.entites:
return 1
else :
return 0
@@ -278,7 +280,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
# la verification du nom de suffit pas (plusieurs commandes
# ont le meme mot-cle facteur AFFE ... et c'est l'utilisateur
# qui choisit le pere d'ou un risque d'erreur)
- if not self.definition.entites.has_key(fils.nom):
+ if not fils.nom in self.definition.entites:
return 0
else:
if fils.parent.nom != self.nom : return 0
@@ -420,7 +422,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
try :
motcle.update_mc_global()
except :
- pass
+ pass
def init_modif_up(self):
Validation.V_MCCOMPO.MCCOMPO.init_modif_up(self)
diff --git a/Ihm/I_MCFACT.py b/Ihm/I_MCFACT.py
index a2aba1ef..fc7d4a9f 100644
--- a/Ihm/I_MCFACT.py
+++ b/Ihm/I_MCFACT.py
@@ -17,17 +17,17 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Extensions.i18n import tr
-import CONNECTOR
-import I_MCCOMPO
+from . import CONNECTOR
+from . import I_MCCOMPO
import Noyau
-import string
class MCFACT(I_MCCOMPO.MCCOMPO):
def isrepetable(self):
"""
- Indique si l'objet est répétable.
- Retourne 1 si le mot-clé facteur self peut être répété
+ Indique si l'objet est repetable.
+ Retourne 1 si le mot-cle facteur self peut etre repete
Retourne 0 dans le cas contraire
"""
if self.definition.max > 1:
@@ -55,8 +55,8 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
try:
if len(objet) > 1 :
- index = objet.get_index(self)+1 # + 1 à cause de la numérotation qui commence à 0
- return self.nom +'_'+`index`+':'
+ index = objet.get_index(self)+1 # + 1 a cause de la numerotation qui commence a 0
+ return self.nom +'_'+repr(index)+':'
else:
return self.nom
except:
@@ -67,15 +67,15 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
if nom[-1]==':' : nom=nom[0:-1]
if self.parent:
l=self.parent.get_genealogie_precise()
- l.append(string.strip(nom))
+ l.append(nom.strip())
return l
else:
- return [string.strip(nom)]
+ return [nom.strip()]
def init_modif(self):
"""
- Met l'état de l'objet à modified et propage au parent
+ Met l'etat de l'objet a modified et propage au parent
qui vaut None s'il n'existe pas
"""
self.state = 'modified'
@@ -85,11 +85,11 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
def fin_modif(self):
"""
- Méthode appelée après qu'une modification a été faite afin de déclencher
- d'éventuels traitements post-modification
+ Methode appelee apres qu'une modification a ete faite afin de declencher
+ d'eventuels traitements post-modification
"""
#print "fin_modif",self
- # pour les objets autres que les commandes, aucun traitement spécifique
+ # pour les objets autres que les commandes, aucun traitement specifique
# on remonte l'info de fin de modif au parent
CONNECTOR.Emit(self,"valid")
parent= hasattr(self,"alt_parent") and self.alt_parent or self.parent
@@ -97,7 +97,7 @@ class MCFACT(I_MCCOMPO.MCCOMPO):
parent.fin_modif()
def normalize(self):
- """ Retourne le MCFACT normalisé. Pour un MCFACT isolé, l'objet normalisé
+ """ Retourne le MCFACT normalise. Pour un MCFACT isole, l'objet normalise
est une MCLIST de longueur 1 qui contient ce MCFACT
"""
new_obj = self.definition.list_instance()
diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py
index 8dc1e87a..cc5bb3c2 100644
--- a/Ihm/I_MCLIST.py
+++ b/Ihm/I_MCLIST.py
@@ -17,16 +17,17 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
import types,traceback
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
from copy import copy
-import CONNECTOR
+from . import CONNECTOR
class MCList:
def isMCList(self):
"""
- Retourne 1 si self est une MCList (liste de mots-clés), 0 sinon (défaut)
+ Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
"""
return 1
@@ -38,11 +39,11 @@ class MCList:
def ajout_possible(self):
"""
- Méthode booléenne qui retourne 1 si on peut encore ajouter une occurrence
- de l'élément que contient self, 0 sinon
+ Methode booleenne qui retourne 1 si on peut encore ajouter une occurrence
+ de l'element que contient self, 0 sinon
"""
max = self.data[0].definition.max
- if max == '**':
+ if max == '**' or max == float('inf'):
return 1
else:
if len(self) < max :
@@ -52,8 +53,8 @@ class MCList:
def isrepetable(self):
"""
- Indique si l'objet est répétable.
- Retourne 1 si le mot-clé facteur self peut être répété
+ Indique si l'objet est repetable.
+ Retourne 1 si le mot-cle facteur self peut etre repete
Retourne 0 dans le cas contraire
"""
if self.data[0].definition.max > 1:
@@ -64,7 +65,7 @@ class MCList:
def isoblig(self):
"""
- Une MCList n'est jamais obligatoire (même si le MCFACT qu'elle représente l'est
+ Une MCList n'est jamais obligatoire (meme si le MCFACT qu'elle represente l'est
"""
return self.data[0].definition.statut=='o'
@@ -89,8 +90,8 @@ class MCList:
Ajoute le mot cle facteur obj a la MCLIST a la position pos
Retourne None si l'ajout est impossible
"""
- if type(obj)==types.StringType :
- # on est en mode création d'un motcle
+ if type(obj)==bytes :
+ # on est en mode creation d'un motcle
raise EficasException(tr("traitement non-prevu"))
if not self.ajout_possible():
@@ -140,7 +141,7 @@ class MCList:
def replace_concept(self,old_sd,sd):
"""
Inputs :
- - old_sd=concept remplacé
+ - old_sd=concept remplace
- sd=nouveau concept
Fonction : Mettre a jour les fils de l objet suite au remplacement
du concept old_sd
@@ -153,7 +154,7 @@ class MCList:
def get_liste_mc_inconnus(self):
"""
- Retourne la liste des mots-clés inconnus dans self
+ Retourne la liste des mots-cles inconnus dans self
"""
l_mc = []
for mcfact in self.data :
@@ -167,10 +168,10 @@ class MCList:
def verif_condition_regles(self,liste_presents):
"""
- Retourne la liste des mots-clés à rajouter pour satisfaire les règles
- en fonction de la liste des mots-clés présents
+ Retourne la liste des mots-cles a rajouter pour satisfaire les regles
+ en fonction de la liste des mots-cles presents
"""
- # Sans objet pour une liste de mots clés facteurs
+ # Sans objet pour une liste de mots cles facteurs
return []
def deep_update_condition_bloc(self):
@@ -192,17 +193,17 @@ class MCList:
def verif_condition_bloc(self):
"""
Evalue les conditions de tous les blocs fils possibles
- (en fonction du catalogue donc de la définition) de self et
+ (en fonction du catalogue donc de la definition) de self et
retourne deux listes :
- - la première contient les noms des blocs à rajouter
- - la seconde contient les noms des blocs à supprimer
+ - la premiere contient les noms des blocs a rajouter
+ - la seconde contient les noms des blocs a supprimer
"""
- # Sans objet pour une liste de mots clés facteurs (a voir !!!)
+ # Sans objet pour une liste de mots cles facteurs (a voir !!!)
return [],[]
def init_modif(self):
"""
- Met l'état de l'objet à modified et propage au parent
+ Met l'etat de l'objet a modified et propage au parent
qui vaut None s'il n'existe pas
"""
self.state = 'modified'
@@ -211,8 +212,8 @@ class MCList:
def fin_modif(self):
"""
- Méthode appelée après qu'une modification a été faite afin de déclencher
- d'éventuels traitements post-modification
+ Methode appelee apres qu'une modification a ete faite afin de declencher
+ d'eventuels traitements post-modification
"""
#print "fin_modif",self
CONNECTOR.Emit(self,"valid")
@@ -228,7 +229,7 @@ class MCList:
def get_genealogie(self):
"""
Retourne la liste des noms des ascendants.
- Un objet MCList n'est pas enregistré dans la genealogie.
+ Un objet MCList n'est pas enregistre dans la genealogie.
XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
"""
if self.parent:
@@ -238,8 +239,8 @@ class MCList:
def get_liste_mc_ordonnee_brute(self,liste,dico):
"""
- Retourne la liste ordonnée (suivant le catalogue) BRUTE des mots-clés
- d'une entité composée dont le chemin complet est donné sous forme
+ Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
+ d'une entite composee dont le chemin complet est donne sous forme
d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
"""
for arg in liste:
@@ -249,8 +250,8 @@ class MCList:
def verif_existence_sd(self):
"""
- Vérifie que les structures de données utilisées dans self existent bien dans le contexte
- avant étape, sinon enlève la référence à ces concepts
+ Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
+ avant etape, sinon enleve la reference a ces concepts
"""
for motcle in self.data :
motcle.verif_existence_sd()
@@ -261,19 +262,19 @@ class MCList:
en tenant compte de la langue
"""
try :
- return self.data[0].get_fr()
+ return self.data[0].get_fr().decode('latin-1')
except:
return ''
def normalize(self):
"""
- Retourne l'objet normalisé. Une liste est déjà normalisée
+ Retourne l'objet normalise. Une liste est deja normalisee
"""
return self
def update_mc_global(self):
"""
- Met a jour les mots cles globaux enregistrés dans l'étape parente
+ Met a jour les mots cles globaux enregistres dans l'etape parente
et dans le jdc parent.
Une liste ne peut pas etre globale. Elle se contente de passer
la requete a ses fils.
diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py
index c27058e8..dd02069d 100644
--- a/Ihm/I_MCSIMP.py
+++ b/Ihm/I_MCSIMP.py
@@ -17,19 +17,21 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import types,string
+from __future__ import absolute_import
+import types
import traceback
from copy import copy
-from repr import Repr
+from six.moves.reprlib import Repr
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
+from six.moves import range
myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100
from Noyau.N_utils import repr_float
import Validation
-import CONNECTOR
+from . import CONNECTOR
# Attention : les classes ASSD,.... peuvent etre surchargees
# dans le package Accas. Il faut donc prendre des precautions si
@@ -48,9 +50,9 @@ import Accas
from Extensions import parametre
from Extensions import param2
-import I_OBJECT
-import CONNECTOR
-from I_VALIDATOR import ValError,listProto
+from . import I_OBJECT
+from . import CONNECTOR
+from .I_VALIDATOR import ValError,listProto
class MCSIMP(I_OBJECT.OBJECT):
@@ -87,37 +89,37 @@ class MCSIMP(I_OBJECT.OBJECT):
if self.valeur == None :
return None
- elif type(self.valeur) == types.FloatType :
+ elif type(self.valeur) == float :
# Traitement d'un flottant isole
txt = str(self.valeur)
clefobj=self.GetNomConcept()
- if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
- if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(self.valeur):
+ if clefobj in self.jdc.appli.appliEficas.dict_reels :
+ if self.valeur in self.jdc.appli.appliEficas.dict_reels[clefobj]:
txt=self.jdc.appli.appliEficas.dict_reels[clefobj][self.valeur]
- elif type(self.valeur) in (types.ListType,types.TupleType) :
+ elif type(self.valeur) in (list,tuple) :
if self.valeur==[] or self.valeur == (): return str(self.valeur)
# Traitement des listes
txt='('
sep=''
for val in self.valeur:
- if type(val) == types.FloatType :
+ if type(val) == float :
clefobj=self.GetNomConcept()
- if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
- if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(val):
+ if clefobj in self.jdc.appli.appliEficas.dict_reels:
+ if val in self.jdc.appli.appliEficas.dict_reels[clefobj]:
txt=txt + sep +self.jdc.appli.appliEficas.dict_reels[clefobj][val]
else :
txt=txt + sep + str(val)
else :
txt=txt + sep + str(val)
else:
- if isinstance(val,types.TupleType):
+ if isinstance(val,tuple):
texteVal='('
for i in val :
- if isinstance(i, types.StringType) : texteVal = texteVal +"'"+str(i)+"',"
+ if isinstance(i, bytes) : texteVal = texteVal +"'"+str(i)+"',"
else : texteVal = texteVal + str(i)+','
texteVal=texteVal[:-1]+')'
else :
- if isinstance(val,types.StringType): texteVal="'"+str(val)+"'"
+ if isinstance(val,bytes): texteVal="'"+str(val)+"'"
else :texteVal=str(val)
txt = txt + sep+ texteVal
@@ -127,7 +129,7 @@ class MCSIMP(I_OBJECT.OBJECT):
## break
sep=','
# cas des listes de tuples de longueur 1
- if isinstance(val,types.TupleType) and len(self.valeur) == 1 : txt=txt+','
+ if isinstance(val,tuple) and len(self.valeur) == 1 : txt=txt+','
txt=txt+')'
else:
# Traitement des autres cas
@@ -145,12 +147,12 @@ class MCSIMP(I_OBJECT.OBJECT):
Retourne une chaine de caractere representant la valeur de self
"""
val=self.valeur
- if type(val) == types.FloatType :
+ if type(val) == float :
clefobj=self.GetNomConcept()
- if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
- if self.jdc.appli.appliEficas.appliEficas.dict_reels[clefobj].has_key(val):
+ if clefobj in self.jdc.appli.appliEficas.dict_reels :
+ if val in self.jdc.appli.appliEficas.appliEficas.dict_reels[clefobj] :
return self.jdc.appli.appliEficas.dict_reels[clefobj][val]
- if type(val) != types.TupleType :
+ if type(val) != tuple :
try:
return val.get_name()
except:
@@ -162,14 +164,14 @@ class MCSIMP(I_OBJECT.OBJECT):
try :
s=s+item.get_name()+','
except:
- s=s+`item`+','
+ s=s+repr(item)+','
s=s+' )'
return s
def wait_bool(self):
for typ in self.definition.type:
try :
- if typ == types.BooleanType: return True
+ if typ == bool: return True
except :
pass
return False
@@ -180,7 +182,7 @@ class MCSIMP(I_OBJECT.OBJECT):
qui n'existe pas encore (type CO()), 0 sinon
"""
for typ in self.definition.type:
- if type(typ) == types.ClassType or isinstance(typ,type):
+ if type(typ) == type or isinstance(typ,type):
if issubclass(typ,CO) :
return 1
return 0
@@ -191,7 +193,7 @@ class MCSIMP(I_OBJECT.OBJECT):
ou derive, 0 sinon
"""
for typ in self.definition.type:
- if type(typ) == types.ClassType or isinstance(typ,type):
+ if type(typ) == type or isinstance(typ,type):
if issubclass(typ,ASSD) and not issubclass(typ,GEOM):
return 1
return 0
@@ -203,7 +205,7 @@ class MCSIMP(I_OBJECT.OBJECT):
Retourne 0 dans le cas contraire
"""
for typ in self.definition.type:
- if type(typ) == types.ClassType or isinstance(typ,type):
+ if type(typ) == type or isinstance(typ,type):
if typ.__name__ in ("GEOM","ASSD","geom","assd") or issubclass(typ,GEOM) :
return 1
return 0
@@ -214,7 +216,7 @@ class MCSIMP(I_OBJECT.OBJECT):
Retourne 0 dans le cas contraire
"""
for typ in self.definition.type:
- if type(typ) == types.ClassType or isinstance(typ,type):
+ if type(typ) == type or isinstance(typ,type):
if issubclass(typ,GEOM) : return 1
return 0
@@ -233,9 +235,9 @@ class MCSIMP(I_OBJECT.OBJECT):
"""
if self.valeur == None:
return []
- elif type(self.valeur) == types.TupleType:
+ elif type(self.valeur) == tuple:
return list(self.valeur)
- elif type(self.valeur) == types.ListType:
+ elif type(self.valeur) == list:
return self.valeur
else:
return [self.valeur]
@@ -361,7 +363,7 @@ class MCSIMP(I_OBJECT.OBJECT):
if new_valeur in ('True','False') and 'TXM' in self.definition.type :
valeur=self.eval_val_item(str(new_valeur))
return new_valeur
- if type(new_valeur) in (types.ListType,types.TupleType):
+ if type(new_valeur) in (list,tuple):
valeurretour=[]
for item in new_valeur :
valeurretour.append(self.eval_val_item(item))
@@ -402,7 +404,7 @@ class MCSIMP(I_OBJECT.OBJECT):
return None
def update_concept(self,sd):
- if type(self.valeur) in (types.ListType,types.TupleType) :
+ if type(self.valeur) in (list,tuple) :
if sd in self.valeur:
self.init_modif()
self.fin_modif()
@@ -420,13 +422,13 @@ class MCSIMP(I_OBJECT.OBJECT):
du concept sd
Attention aux matrices
"""
- if type(self.valeur) == types.TupleType :
+ if type(self.valeur) == tuple :
if sd in self.valeur:
self.init_modif()
self.valeur=list(self.valeur)
self.valeur.remove(sd)
self.fin_modif()
- elif type(self.valeur) == types.ListType:
+ elif type(self.valeur) == list:
if sd in self.valeur:
self.init_modif()
self.valeur.remove(sd)
@@ -456,14 +458,14 @@ class MCSIMP(I_OBJECT.OBJECT):
du concept old_sd
"""
#print "replace_concept",old_sd,sd
- if type(self.valeur) == types.TupleType :
+ if type(self.valeur) == tuple :
if old_sd in self.valeur:
self.init_modif()
self.valeur=list(self.valeur)
i=self.valeur.index(old_sd)
self.valeur[i]=sd
self.fin_modif()
- elif type(self.valeur) == types.ListType:
+ elif type(self.valeur) == list:
if old_sd in self.valeur:
self.init_modif()
i=self.valeur.index(old_sd)
@@ -524,8 +526,8 @@ class MCSIMP(I_OBJECT.OBJECT):
# Attention : possible probleme avec include
# A priori il n'y a pas de raison de retirer les concepts non existants
# avant etape. En fait il s'agit uniquement eventuellement de ceux crees par une macro
- l_sd_avant_etape = self.jdc.get_contexte_avant(self.etape).values()
- if type(self.valeur) in (types.TupleType,types.ListType) :
+ l_sd_avant_etape = list(self.jdc.get_contexte_avant(self.etape).values())
+ if type(self.valeur) in (tuple,list) :
l=[]
for sd in self.valeur:
if isinstance(sd,ASSD) :
@@ -628,7 +630,7 @@ class MCSIMP(I_OBJECT.OBJECT):
if cr == "oui" : self.cr.fatal(tr("La matrice n'a pas le bon entete"))
return 0
if self.monType.methodeCalculTaille != None :
- apply (MCSIMP.__dict__[self.monType.methodeCalculTaille],(self,))
+ MCSIMP.__dict__[self.monType.methodeCalculTaille](*(self,))
try :
#if 1 :
ok=0
diff --git a/Ihm/I_OBJECT.py b/Ihm/I_OBJECT.py
index 36129813..41e68469 100644
--- a/Ihm/I_OBJECT.py
+++ b/Ihm/I_OBJECT.py
@@ -19,10 +19,10 @@
#
"""
"""
-import string
+from __future__ import absolute_import
import Noyau
-import CONNECTOR
+from . import CONNECTOR
class OBJECT:
from Noyau.N_CO import CO
@@ -110,10 +110,10 @@ class OBJECT:
def get_genealogie_precise(self):
if self.parent:
l=self.parent.get_genealogie_precise()
- l.append(string.strip(self.nom))
+ l.append(self.nom.strip())
return l
else:
- return [string.strip(self.nom)]
+ return [self.nom.strip()]
def get_genealogie(self):
"""
@@ -122,10 +122,10 @@ class OBJECT:
"""
if self.parent:
l=self.parent.get_genealogie()
- l.append(string.strip(self.nom))
+ l.append(self.nom.strip())
return l
else:
- return [string.strip(self.nom)]
+ return [self.nom.strip()]
def get_fr(self):
"""
@@ -134,11 +134,13 @@ class OBJECT:
"""
try:
#if 1 :
- return getattr(self.definition,self.jdc.lang)
+ c=getattr(self.definition,self.jdc.lang).decode('latin-1','ignore')
+ return c
except:
#else:
try :
- return getattr(self.definition,"fr")
+ c=getattr(self.definition,"fr").decode('latin-1','ignore')
+ return c
except :
return ''
diff --git a/Ihm/I_PRESENT_ABSENT.py b/Ihm/I_PRESENT_ABSENT.py
index 23bf434b..8c907fe5 100644
--- a/Ihm/I_PRESENT_ABSENT.py
+++ b/Ihm/I_PRESENT_ABSENT.py
@@ -20,7 +20,8 @@
"""
"""
-import I_REGLE
+from __future__ import absolute_import
+from . import I_REGLE
class PRESENT_ABSENT(I_REGLE.REGLE):
def purge_liste(self,liste_a_purger,liste_mc_presents):
diff --git a/Ihm/I_PRESENT_PRESENT.py b/Ihm/I_PRESENT_PRESENT.py
index f8bd1368..6b7dccc1 100644
--- a/Ihm/I_PRESENT_PRESENT.py
+++ b/Ihm/I_PRESENT_PRESENT.py
@@ -20,7 +20,8 @@
"""
"""
-import I_REGLE
+from __future__ import absolute_import
+from . import I_REGLE
class PRESENT_PRESENT(I_REGLE.REGLE):
def verif_condition_regle(self,liste,l_mc_presents):
diff --git a/Ihm/I_PROC_ETAPE.py b/Ihm/I_PROC_ETAPE.py
index 63cb45fc..86c29894 100644
--- a/Ihm/I_PROC_ETAPE.py
+++ b/Ihm/I_PROC_ETAPE.py
@@ -17,12 +17,13 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import I_ETAPE
+from __future__ import absolute_import
+from . import I_ETAPE
-# import rajoutés suite à l'ajout de Build_sd --> à résorber
+# import rajoutes suite a l'ajout de Build_sd --> a resorber
import sys
-import traceback,types,string
+import traceback,types
import Noyau
from Noyau import N_Exception
from Noyau.N_Exception import AsException
@@ -50,7 +51,7 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
def delete_concept(self,sd):
"""
Fonction : Mettre a jour les mots cles de l etape
- suite à la disparition du concept sd
+ suite a la disparition du concept sd
Seuls les mots cles simples MCSIMP font un traitement autre
que de transmettre aux fils
@@ -66,7 +67,7 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
suite au remplacement du concept old_sd
Inputs :
- - old_sd=concept remplacé
+ - old_sd=concept remplace
- sd=nouveau concept
"""
for child in self.mc_liste :
@@ -83,8 +84,8 @@ class PROC_ETAPE(I_ETAPE.ETAPE):
except AsException :
# Une erreur s'est produite lors de la construction du concept
# Comme on est dans EFICAS, on essaie de poursuivre quand meme
- # Si on poursuit, on a le choix entre deux possibilités :
- # 1. on annule la sd associée à self
+ # Si on poursuit, on a le choix entre deux possibilites :
+ # 1. on annule la sd associee a self
# 2. on la conserve mais il faut la retourner
# En plus il faut rendre coherents sdnom et sd.nom
self.sd=None
diff --git a/Ihm/I_REGLE.py b/Ihm/I_REGLE.py
index cbed3bb4..d2fba6ca 100644
--- a/Ihm/I_REGLE.py
+++ b/Ihm/I_REGLE.py
@@ -19,22 +19,22 @@
#
"""
"""
-import string
+from __future__ import absolute_import
class REGLE:
def gettext(self):
text = self.__class__.__name__+ ' :\n'
for mc in self.mcs :
- text = text + '\t' + string.strip(mc) + '\n'
+ text = text + '\t' + mc.strip() + '\n'
return text
def purge_liste(self,liste_a_purger,liste_mc_presents):
"""
- Cette méthode doit retirer de la liste liste_a_purger
- les éléments qui ne doivent plus apparaitre en fonction du contexte
+ Cette methode doit retirer de la liste liste_a_purger
+ les elements qui ne doivent plus apparaitre en fonction du contexte
"""
- # Dans le cas général on ne touche pas à la liste
+ # Dans le cas general on ne touche pas a la liste
return liste_a_purger
def has_operande(self,nom):
diff --git a/Ihm/I_UN_PARMI.py b/Ihm/I_UN_PARMI.py
index f58d6f95..ac65b3a0 100644
--- a/Ihm/I_UN_PARMI.py
+++ b/Ihm/I_UN_PARMI.py
@@ -20,7 +20,8 @@
"""
"""
-import I_REGLE
+from __future__ import absolute_import
+from . import I_REGLE
class UN_PARMI(I_REGLE.REGLE):
@@ -32,7 +33,7 @@ class UN_PARMI(I_REGLE.REGLE):
break
if not regle_active : return liste_a_purger
- # Si un des mots clés est présent, on les enlève tous
+ # Si un des mots cles est present, on les enleve tous
# sauf celui ci
for mc in self.mcs:
if mc in liste_a_purger and mc not in liste_mc_presents:
diff --git a/Ihm/I_VALIDATOR.py b/Ihm/I_VALIDATOR.py
index 40014ead..ec414ba2 100644
--- a/Ihm/I_VALIDATOR.py
+++ b/Ihm/I_VALIDATOR.py
@@ -18,6 +18,7 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Noyau.N_VALIDATOR import *
class Compulsory(Compulsory):
@@ -29,7 +30,7 @@ class Compulsory(Compulsory):
class OrdList(OrdList):
def valide_liste_partielle(self,liste_courante=None):
"""
- Méthode de validation de liste partielle pour le validateur OrdList
+ Methode de validation de liste partielle pour le validateur OrdList
"""
try:
self.convert(liste_courante)
diff --git a/Ihm/__init__.py b/Ihm/__init__.py
index 9f0c2243..4a6dab8d 100644
--- a/Ihm/__init__.py
+++ b/Ihm/__init__.py
@@ -18,6 +18,6 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce package contient les fonctionnalités supplémentaires nécessaires
- pour l'éditeur graphique EFICAS
+ Ce package contient les fonctionnalites supplementaires necessaires
+ pour l'editeur graphique EFICAS
"""
diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py
index 6b658514..b149fb8c 100644
--- a/InterfaceQT4/browser.py
+++ b/InterfaceQT4/browser.py
@@ -18,23 +18,26 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import string,re
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+import re
import types,sys,os
import traceback
-import typeNode
+from . import typeNode
#import pdb
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QTreeWidget , QTreeWidgetItem,QApplication
- from PyQt5.QtGui import QIcon
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import six
+from six.moves import range
+from PyQt5.QtWidgets import QTreeWidget , QTreeWidgetItem, QApplication, QMessageBox
+from PyQt5.QtGui import QIcon
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
-from gereRegles import GereRegles
-from monChoixCommande import MonChoixCommande
+from .gereRegles import GereRegles
+from .monChoixCommande import MonChoixCommande
class JDCTree( QTreeWidget,GereRegles ):
def __init__( self, jdc_item, QWParent):
@@ -62,14 +65,9 @@ class JDCTree( QTreeWidget,GereRegles ):
self.itemCourrant=None
- if monEnvQT5 :
- self.itemClicked.connect(self.handleOnItem)
- self.itemCollapsed.connect(self.handleCollapsedItem)
- self.itemExpanded.connect(self.handleExpandedItem)
- else :
- self.connect(self, SIGNAL("itemClicked ( QTreeWidgetItem * ,int) "), self.handleOnItem)
- self.connect(self, SIGNAL("itemCollapsed ( QTreeWidgetItem *) "), self.handleCollapsedItem)
- self.connect(self, SIGNAL("itemExpanded ( QTreeWidgetItem *) "), self.handleExpandedItem)
+ self.itemClicked.connect(self.handleOnItem)
+ self.itemCollapsed.connect(self.handleCollapsedItem)
+ self.itemExpanded.connect(self.handleExpandedItem)
#PNPNPN verifier dans quel cas on se trouve : affiche l arbre ou la commande
self.node_selected=self.racine
@@ -78,12 +76,12 @@ class JDCTree( QTreeWidget,GereRegles ):
self.inhibeExpand=False
#print "self.editor.afficheCommandesPliees", self.editor.afficheCommandesPliees
if self.racine.children !=[] :
- self.editor.initSplitterSizes(3)
+ #self.editor.initSplitterSizes(3)
if self.editor.afficheCommandesPliees : self.racine.children[0].plieToutEtReaffiche()
else : self.racine.children[0].deplieToutEtReaffiche()
self.racine.children[0].fenetre.donnePremier()
else :
- self.editor.initSplitterSizes(2)
+ #self.editor.initSplitterSizes(2)
self.racine.affichePanneau()
#print self.editor.splitter.sizes()
#PNPNPN
@@ -180,7 +178,7 @@ class JDCTree( QTreeWidget,GereRegles ):
try :
fr = item.item.get_fr()
- if self.editor: self.editor.affiche_commentaire(unicode(fr))
+ if self.editor: self.editor.affiche_commentaire(six.text_type(fr))
except:
pass
item.select()
@@ -220,13 +218,8 @@ class JDCNode(QTreeWidgetItem,GereRegles):
value = tr(str( item.GetText() ) )
- if monEnvQT5:
- if self.editor.enteteQTree=='complet':mesColonnes=(name,value)
- else : mesColonnes=(name,)
- else :
- mesColonnes=QStringList()
- if self.editor.enteteQTree=='complet': mesColonnes << name << value
- else : mesColonnes << name
+ if self.editor.enteteQTree=='complet':mesColonnes=(name,value)
+ else : mesColonnes=(name,)
if self.treeParent.plie==True :
self.plie = True
@@ -259,14 +252,9 @@ class JDCNode(QTreeWidgetItem,GereRegles):
else :
QTreeWidgetItem.__init__(self,self.treeParent,mesColonnes)
- if monEnvQT5 :
- self.setToolTip(0,self.item.get_fr())
- self.setToolTip(1,self.item.get_fr())
- repIcon=self.appliEficas.repIcon
- else :
- self.setToolTip(0,QString(self.item.get_fr()))
- self.setToolTip(1,QString(self.item.get_fr()))
- repIcon=QString(self.appliEficas.repIcon)
+ self.setToolTip(0,self.item.get_fr())
+ self.setToolTip(1,self.item.get_fr())
+ repIcon=self.appliEficas.repIcon
monIcone = QIcon(repIcon+"/" +self.item.GetIconName() + ".png")
self.setIcon(0,monIcone)
@@ -337,7 +325,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
# on resoudera a ce moment la
# pour l instant pas de poussiere sous le tapis
if not(self.item.isactif()) :
- from monWidgetInactif import MonWidgetInactif
+ from .monWidgetInactif import MonWidgetInactif
self.fenetre = MonWidgetInactif(self,self.editor)
else:
itemParent=self
@@ -346,7 +334,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
itemParent.affichePanneau()
return
self.fenetre=self.getPanel()
- self.editor.restoreSplitterSizes()
+ #self.editor.restoreSplitterSizes()
for indiceWidget in range(self.editor.widgetCentraleLayout.count()):
widget=self.editor.widgetCentraleLayout.itemAt(indiceWidget)
@@ -360,7 +348,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
self.editor.fenetreCentraleAffichee.deleteLater()
self.editor.widgetCentraleLayout.addWidget(self.fenetre)
- #print "j ajoute ", self.fenetre, self.fenetre.node.item.nom
+ #print ("j ajoute ", self.fenetre, self.fenetre.node.item.nom)
self.editor.fenetreCentraleAffichee=self.fenetre
self.tree.node_selected= self
@@ -381,7 +369,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
"""
Cette methode a pour but de commentariser la commande pointee par self
"""
- # On traite par une exception le cas ou l'utilisateur final cherche a désactiver
+ # On traite par une exception le cas ou l'utilisateur final cherche a desactiver
# (commentariser) un commentaire.
try :
pos=self.treeParent.children.index(self)
@@ -466,7 +454,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
if pos == 'before': index = index
elif pos == 'after': index = index +1
else:
- print unicode(pos), tr(" n'est pas un index valide pour append_brother")
+ print(six.text_type(pos), tr(" n'est pas un index valide pour append_brother"))
return 0
return self.treeParent.append_child(name,pos=index,plier=plier)
@@ -514,7 +502,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
index = 0
elif pos == 'last':
index = len(self.children)
- elif type(pos) == types.IntType :
+ elif type(pos) == int :
# position fixee
index = pos
elif type(pos) == types.InstanceType:
@@ -603,7 +591,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
if noeud.treeParent.children.index(noeud) < index : index=noeud.treeParent.children.index(noeud)
if index < 0 : index =0
- # Cas ou on détruit dans une ETape
+ # Cas ou on detruit dans une ETape
if index == 9999 :
parentPosition=self.treeParent
while not(isinstance(parentPosition, compojdc.Node)):
@@ -664,8 +652,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
"""Cette methode remet a jour la validite du noeud (icone)
Elle appelle isvalid
"""
- if monEnvQT5 : repIcon=self.appliEficas.repIcon
- else : repIcon=QString(self.appliEficas.repIcon)
+ repIcon=self.appliEficas.repIcon
monIcone = QIcon(repIcon+"/" +self.item.GetIconName() + ".png")
self.setIcon(0,monIcone)
@@ -679,16 +666,8 @@ class JDCNode(QTreeWidgetItem,GereRegles):
def update_node_label_in_blue(self):
- if hasattr(self.appliEficas,'noeudColore'):
- if monEnvQT5 :
- self.appliEficas.noeudColore.setForeground(0,Qt.black)
- else :
- self.appliEficas.noeudColore.setTextColor( 0,Qt.black)
- self.appliEficas.noeudColore.update_node_label()
- if monEnvQT5 :
- self.setForeground(0,Qt.blue)
- else :
- self.setTextColor( 0,Qt.blue )
+ if hasattr(self.appliEficas,'noeudColore'): self.appliEficas.noeudColore.setForeground(0,Qt.black)
+ self.setForeground(0,Qt.blue)
labeltext,fonte,couleur = self.item.GetLabelText()
self.setText(0, labeltext)
self.appliEficas.noeudColore=self
@@ -760,8 +739,8 @@ class JDCNode(QTreeWidgetItem,GereRegles):
def doPaste(self,node_selected,pos='after'):
"""
- Déclenche la copie de l'objet item avec pour cible
- l'objet passé en argument : node_selected
+ Declenche la copie de l'objet item avec pour cible
+ l'objet passe en argument : node_selected
"""
#print 'je passe dans doPaste'
objet_a_copier = self.item.get_copie_objet()
@@ -770,7 +749,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
def doPasteCommande(self,objet_a_copier,pos='after'):
"""
- Réalise la copie de l'objet passé en argument qui est nécessairement
+ Realise la copie de l'objet passe en argument qui est necessairement
une commande
"""
child=None
@@ -783,7 +762,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
def doPastePremier(self,objet_a_copier):
"""
- Réalise la copie de l'objet passé en argument (objet_a_copier)
+ Realise la copie de l'objet passe en argument (objet_a_copier)
"""
objet = objet_a_copier.item.get_copie_objet()
child = self.append_child(objet,pos='first')
@@ -829,7 +808,7 @@ class JDCNode(QTreeWidgetItem,GereRegles):
def setPlie(self):
#print "je mets inhibeExpand a true dans setPlie"
#print "je suis dans plieTout", self.item.get_nom()
- import compojdc
+ from . import compojdc
if self.fenetre == self.editor.fenetreCentraleAffichee and isinstance(self.treeParent,compojdc.Node):
return
self.tree.inhibeExpand=True
diff --git a/InterfaceQT4/compobloc.py b/InterfaceQT4/compobloc.py
index bed58457..a4ad9627 100644
--- a/InterfaceQT4/compobloc.py
+++ b/InterfaceQT4/compobloc.py
@@ -19,11 +19,12 @@
#
+from __future__ import absolute_import
from Editeur import Objecttreeitem
-import compofact
-import browser
-import typeNode
+from . import compofact
+from . import browser
+from . import typeNode
class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
@@ -40,7 +41,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
maCommande=commande
if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
else : self.niveau=1
- from monWidgetBloc import MonWidgetBloc
+ from .monWidgetBloc import MonWidgetBloc
widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
diff --git a/InterfaceQT4/compocomm.py b/InterfaceQT4/compocomm.py
index 118d13c6..6b0fd5b2 100644
--- a/InterfaceQT4/compocomm.py
+++ b/InterfaceQT4/compocomm.py
@@ -18,18 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import string
+from __future__ import absolute_import
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QAction
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QAction
from Editeur import Objecttreeitem
-import browser
-import typeNode
+from . import browser
+from . import typeNode
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
@@ -38,14 +33,13 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
def getPanel( self ):
"""
"""
- from monWidgetCommentaire import MonWidgetCommentaire
+ from .monWidgetCommentaire import MonWidgetCommentaire
return MonWidgetCommentaire(self,self.editor,self.item.object)
def createPopUpMenu(self):
typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
self.Decommente = QAction(tr("Decommenter"),self.tree)
- if monEnvQT5 : self.Decommente.triggered(self.Decommenter)
- else : self.tree.connect(self.Decommente,SIGNAL("triggered()"),self.Decommenter)
+ self.Decommente.triggered(self.Decommenter)
self.Decommente.setStatusTip(tr("Decommente la commande "))
if hasattr(self.item,'uncomment'):
@@ -71,15 +65,15 @@ class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetIconName(self):
"""
- Retourne le nom de l'icône associée au noeud qui porte self,
- dépendant de la validité de l'objet
+ Retourne le nom de l'icone associee au noeud qui porte self,
+ dependant de la validite de l'objet
NB : un commentaire est toujours valide ...
"""
return "ast-white-percent"
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte à afficher dans le noeud représentant l'item
+ - le texte a afficher dans le noeud representant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
@@ -93,7 +87,7 @@ class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetText(self):
texte = self.object.valeur
- texte = string.split(texte,'\n')[0]
+ texte = texte.split('\n')[0]
if len(texte) < 25 :
return texte
else :
@@ -101,7 +95,7 @@ class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def set_valeur(self,valeur):
"""
- Afecte valeur à l'objet COMMENTAIRE
+ Affecte valeur a l'objet COMMENTAIRE
"""
self.object.set_valeur(valeur)
@@ -114,8 +108,8 @@ class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def get_objet_commentarise(self):
"""
- La méthode get_objet_commentarise() de la classe compocomm.COMMTreeItem
- surcharge la méthode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
+ La methode get_objet_commentarise() de la classe compocomm.COMMTreeItem
+ surcharge la methode get_objet_commentarise de la classe Objecttreeitem.ObjectTreeItem
elle a pour but d'empecher l'utilisateur final de commentariser un commentaire.
"""
raise EficasException( 'Impossible de commentariser un commentaire' )
diff --git a/InterfaceQT4/compocommandecomm.py b/InterfaceQT4/compocommandecomm.py
index 1ea6a0a1..29a737f9 100644
--- a/InterfaceQT4/compocommandecomm.py
+++ b/InterfaceQT4/compocommandecomm.py
@@ -17,12 +17,12 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
import traceback
-import string
from Editeur import Objecttreeitem
from Extensions.eficas_exception import EficasException
-import compocomm
+from . import compocomm
class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
itemNode=compocomm.Node
@@ -32,9 +32,9 @@ class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetIconName(self):
"""
- Retourne le nom de l'icône associée au noeud qui porte self,
- dépendant de la validité de l'objet
- NB : une commande commentarisée est toujours valide ...
+ Retourne le nom de l'icone associee au noeud qui porte self,
+ dependant de la validite de l'objet
+ NB : une commande commentarisee est toujours valide ...
"""
if self.isvalid():
return "ast-green-percent"
@@ -43,7 +43,7 @@ class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte à afficher dans le noeud représentant l'item
+ - le texte a afficher dans le noeud representant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
@@ -51,13 +51,13 @@ class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def get_valeur(self):
"""
- Retourne la valeur de la commande commentarisée cad son texte
+ Retourne la valeur de la commande commentarisee cad son texte
"""
return self.object.get_valeur() or ''
def GetText(self):
texte = self.object.valeur
- texte = string.split(texte,'\n')[0]
+ texte = texte.split('\n')[0]
if len(texte) < 25 :
return texte
else :
@@ -65,7 +65,7 @@ class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def set_valeur(self,valeur):
"""
- Afefcte valeur à l'objet commande commentarisée
+ Afefcte valeur a l'objet commande commentarisee
"""
self.object.set_valeur(valeur)
@@ -77,9 +77,9 @@ class COMMANDE_COMMTreeItem(Objecttreeitem.ObjectTreeItem):
def uncomment(self):
"""
- Demande à l'objet commande commentarisée de se décommentariser.
- Si l'opération s'effectue correctement, retourne l'objet commande
- et éventuellement le nom de la sd produite, sinon lève une exception
+ Demande a l'objet commande commentarisee de se decommentariser.
+ Si l'operation s'effectue correctement, retourne l'objet commande
+ et eventuellement le nom de la sd produite, sinon leve une exception
"""
try:
commande,nom = self.object.uncomment()
diff --git a/InterfaceQT4/compofact.py b/InterfaceQT4/compofact.py
index e869d738..1a367f60 100644
--- a/InterfaceQT4/compofact.py
+++ b/InterfaceQT4/compofact.py
@@ -18,12 +18,14 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import browser
-import typeNode
+from __future__ import absolute_import
+from . import browser
+from . import typeNode
from Extensions.i18n import tr
from Editeur import Objecttreeitem
+import six
class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
@@ -37,10 +39,10 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
else : self.niveau=1
#if hasattr(self,'plie') :print self.item.nom, self.plie
if hasattr(self,'plie') and self.plie==True :
- from monWidgetFactPlie import MonWidgetFactPlie
+ from .monWidgetFactPlie import MonWidgetFactPlie
widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
else:
- from monWidgetFact import MonWidgetFact
+ from .monWidgetFact import MonWidgetFact
widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
return widget
@@ -81,9 +83,10 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
else:
return "ast-yel-los"
- def keys(self):
- keys=self.object.mc_dict.keys()
- return keys
+ #PNPN ????
+ #def keys(self):
+ # keys=self.object.mc_dict
+ # return keys
def GetSubList(self):
"""
@@ -130,7 +133,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
return (0, tr('Impossible de supprimer un mot-cle obligatoire '))
if self.object.suppentite(itemobject):
- message = tr("Mot-cle %s supprime")+ unicode(itemobject.nom)
+ message = tr("Mot-cle %s supprime")+ six.text_type(itemobject.nom)
#self.editor.affiche_commentaire(message)
return (1, message)
else:
diff --git a/InterfaceQT4/compoformule.py b/InterfaceQT4/compoformule.py
index 22e36d55..8f5ff2af 100644
--- a/InterfaceQT4/compoformule.py
+++ b/InterfaceQT4/compoformule.py
@@ -19,21 +19,21 @@
#
"""
-Ce module contient les classes permettant de définir les objets graphiques
-représentant un objet de type FORMULE, cad le panneau et l'item de l'arbre
+Ce module contient les classes permettant de definir les objets graphiques
+representant un objet de type FORMULE, cad le panneau et l'item de l'arbre
d'EFICAS
"""
-import string
-import compooper
-import browser
-import typeNode
+from __future__ import absolute_import
+from . import compooper
+from . import browser
+from . import typeNode
class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode):
def getPanel(self):
- from monWidgetFormule import MonWidgetFormule
+ from .monWidgetFormule import MonWidgetFormule
return MonWidgetFormule(self,self.editor,self.item.object)
@@ -43,8 +43,8 @@ class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode):
class FORMULETreeItem(compooper.EtapeTreeItem):
"""
- Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS
- qui représente la FORMULE
+ Classe servant a definir l'item porte par le noeud de l'arbre d'EFICAS
+ qui represente la FORMULE
"""
itemNode=FormuleNode
@@ -57,17 +57,17 @@ class FORMULETreeItem(compooper.EtapeTreeItem):
def GetSubList(self):
"""
Retourne la liste des fils de self
- On considére que FORMULE n'a pas de fils
+ On considere que FORMULE n'a pas de fils
--> modification par rapport a MACRO classique
"""
- # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
- # de façon traditionnelle
+ # dans EFICAS on ne souhaite pas afficher les mots-cles fils de FORMULE
+ # de facon traditionnelle
return []
def GetIconName(self):
"""
- Retourne le nom de l'icone à afficher dans l'arbre
- Ce nom dépend de la validité de l'objet
+ Retourne le nom de l'icone a afficher dans l'arbre
+ Ce nom depend de la validite de l'objet
"""
if self.object.isactif():
if self.object.isvalid():
@@ -79,21 +79,21 @@ class FORMULETreeItem(compooper.EtapeTreeItem):
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte a afficher dans le noeud représentant l'item
+ - le texte a afficher dans le noeud representant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
return self.labeltext,None,None
#if self.object.isactif():
- # None --> fonte et couleur par défaut
+ # None --> fonte et couleur par defaut
# return tr(self.labeltext),None,None
#else:
# return tr(self.labeltext),None,None
#return self.labeltext,fontes.standard_italique,None
# ---------------------------------------------------------------------------
-# Méthodes permettant la modification et la lecture des attributs
-# du paramètre = API graphique de la FORMULE pour Panel et EFICAS
+# Methodes permettant la modification et la lecture des attributs
+# du parametre = API graphique de la FORMULE pour Panel et EFICAS
# ---------------------------------------------------------------------------
def get_nom(self):
@@ -104,7 +104,7 @@ class FORMULETreeItem(compooper.EtapeTreeItem):
def get_type(self):
"""
- Retourne le type de la valeur retournée par la FORMULE
+ Retourne le type de la valeur retournee par la FORMULE
"""
return self.object.type_retourne
@@ -120,9 +120,9 @@ class FORMULETreeItem(compooper.EtapeTreeItem):
if args :
if args[0] == "(" and args[-1] ==")":
args=args[1:-1]
- # transforme en tuple si ce n est pas déja le casa
+ # transforme en tuple si ce n est pas deja le casa
try :
- args=string.split(args,',')
+ args=args.split(',')
except :
pass
return args
@@ -148,46 +148,46 @@ class FORMULETreeItem(compooper.EtapeTreeItem):
def save_formule(self,new_nom,new_typ,new_arg,new_exp):
"""
- Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE
+ Verifie si (new_nom,new_typ,new_arg,new_exp) definit bien une FORMULE
licite :
- - si oui, stocke ces paramètres comme nouveaux paramètres de la
+ - si oui, stocke ces parametres comme nouveaux parametres de la
FORMULE courante et retourne 1
- - si non, laisse les paramètres anciens de la FORMULE inchangés et
+ - si non, laisse les parametres anciens de la FORMULE inchanges et
retourne 0
"""
test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
new_exp))
if test :
- # la formule est bien correcte : on sauve les nouveaux paramètres
+ # la formule est bien correcte : on sauve les nouveaux parametres
test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
return test,erreur
# ---------------------------------------------------------------------------
-# Accès aux méthodes de vérification de l'objet FORM_ETAPE
+# Acces aux methodes de verification de l'objet FORM_ETAPE
# ---------------------------------------------------------------------------
def verif_nom(self,nom):
"""
- Lance la vérification du nom passé en argument
+ Lance la verification du nom passe en argument
"""
return self.object.verif_nom(nom)
def verif_arguments(self,arguments):
"""
- Lance la vérification des arguments passés en argument
+ Lance la verification des arguments passes en argument
"""
return self.object.verif_arguments('('+arguments+')')
def verif_formule(self,formule):
"""
- Lance la vérification de FORMULE passée en argument
+ Lance la verification de FORMULE passee en argument
"""
return self.object.verif_formule(formule=formule)
def verif_formule_python(self,formule):
"""
- Lance la vérification de FORMULE passée en argument
+ Lance la verification de FORMULE passee en argument
"""
return self.object.verif_formule_python(formule=formule)
diff --git a/InterfaceQT4/compojdc.py b/InterfaceQT4/compojdc.py
index e49949a0..43d862d4 100644
--- a/InterfaceQT4/compojdc.py
+++ b/InterfaceQT4/compojdc.py
@@ -18,16 +18,17 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Editeur import Objecttreeitem
-import browser
-import typeNode
+from . import browser
+from . import typeNode
from Extensions.i18n import tr
class Node(browser.JDCNode,typeNode.PopUpMenuRacine):
def getPanel(self):
- from monChoixCommande import MonChoixCommande
+ from .monChoixCommande import MonChoixCommande
return MonChoixCommande(self,self.item, self.editor)
@@ -65,11 +66,11 @@ 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 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)
diff --git a/InterfaceQT4/compomacro.py b/InterfaceQT4/compomacro.py
index 72de1289..8324df20 100644
--- a/InterfaceQT4/compomacro.py
+++ b/InterfaceQT4/compomacro.py
@@ -19,30 +19,26 @@
#
# Modules Python
-import os,sys,string
+from __future__ import absolute_import
+import os,sys
import types
import traceback
# Modules Eficas
from Editeur import Objecttreeitem
from Extensions.i18n import tr
-import compooper
-import browser
-import typeNode
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QAction
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from . import compooper
+from . import browser
+from . import typeNode
+from PyQt5.QtWidgets import QAction
+from PyQt5.QtCore import Qt
class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
def getPanel(self):
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
return MonWidgetCommande (self,self.editor ,self.item.object)
@@ -50,10 +46,7 @@ class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
typeNode.PopUpMenuNode.createPopUpMenu(self)
if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome:
self.ViewElt = QAction(tr('View3D'),self.tree)
- if monEnvQT5:
- self.ViewElt.triggered.connect(self.view3D)
- else :
- self.tree.connect(self.ViewElt,SIGNAL("triggered()"),self.view3D)
+ self.ViewElt.triggered.connect(self.view3D)
self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure"))
self.menu.addAction(self.ViewElt)
if self.item.isvalid() :
@@ -69,7 +62,7 @@ class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):
class MACROTreeItem(compooper.EtapeTreeItem):
-# """ Cette classe hérite d'une grande partie des comportements
+# """ Cette classe herite d'une grande partie des comportements
# de la classe compooper.EtapeTreeItem
# """
itemNode=MACRONode
@@ -90,7 +83,7 @@ class INCLUDETreeItemBase(MACROTreeItem):
class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):
def getPanel(self):
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
@@ -116,13 +109,13 @@ class INCLUDETreeItem(INCLUDETreeItemBase):
# ------------------------------------
-# Classes necessaires à POURSUITE
+# Classes necessaires a POURSUITE
# ------------------------------------
class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):
def getPanel(self):
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
@@ -154,7 +147,7 @@ class POURSUITETreeItem(INCLUDETreeItemBase):
class MATERIAUNode(MACRONode):
def getPanel(self):
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
return MonWidgetCommande (self,self.editor ,self.item.object)
def createPopUpMenu(self):
diff --git a/InterfaceQT4/compomclist.py b/InterfaceQT4/compomclist.py
index 23e232a9..cc02fe71 100644
--- a/InterfaceQT4/compomclist.py
+++ b/InterfaceQT4/compomclist.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
import types
import traceback
-import compofact
-import browser
-import typeNode
+from . import compofact
+from . import browser
+from . import typeNode
from Extensions.i18n import tr
from Editeur import Objecttreeitem
@@ -48,13 +49,13 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
else : self.niveau=1
if not (monObjet.isMCList()) :
if hasattr(self,'plie') and self.plie==True :
- from monWidgetFactPlie import MonWidgetFactPlie
+ from .monWidgetFactPlie import MonWidgetFactPlie
widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
else:
- from monWidgetFact import MonWidgetFact
+ from .monWidgetFact import MonWidgetFact
widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
else :
- from monWidgetBloc import MonWidgetBloc
+ from .monWidgetBloc import MonWidgetBloc
widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
return widget
@@ -83,18 +84,18 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
# else:
# QMessageBox.information( self, "Copie impossible",
- # "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
- # self.editor.affiche_infos("Copie refusée")
+ # "Vous ne pouvez coller le mot-cle facteur copie a ce niveau de l'arborescence !")
+ # self.editor.affiche_infos("Copie refusee")
# return child
class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
""" La classe MCListTreeItem joue le role d'un adaptateur pour les objets
du noyau Accas instances de la classe MCLIST.
- Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
+ Elle adapte ces objets pour leur permettre d'etre integres en tant que
noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
- Cette classe délègue les appels de méthode et les accès
- aux attributs à l'objet du noyau soit manuellement soit
+ Cette classe delegue les appels de methode et les acces
+ aux attributs a l'objet du noyau soit manuellement soit
automatiquement (voir classe Delegate et attribut object).
"""
itemNode=Node
@@ -112,7 +113,7 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
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 clé facteur, on utilise le panneau
+ Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
FACTPanel.
Si la liste est plus longue on utilise le panneau MCLISTPanel.
"""
@@ -173,7 +174,7 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
return "ast-yel-los"
def get_docu(self):
- """ Retourne la clef de doc de l'objet pointé par self """
+ """ Retourne la clef de doc de l'objet pointe par self """
return self.object.get_docu()
def iscopiable(self):
@@ -184,13 +185,13 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
def isMCFact(self):
"""
- Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
+ Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
"""
return len(self._object) <= 1
def isMCList(self):
"""
- Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
+ Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
"""
return len(self._object) > 1
diff --git a/InterfaceQT4/compooper.py b/InterfaceQT4/compooper.py
index 9fd38042..35b1e2f0 100644
--- a/InterfaceQT4/compooper.py
+++ b/InterfaceQT4/compooper.py
@@ -17,23 +17,23 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
import os
import tempfile
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QMessageBox, QAction, QApplication
- from PyQt5.QtGui import QCursor
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QMessageBox, QAction, QApplication
+from PyQt5.QtGui import QCursor
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
from Editeur import Objecttreeitem
-import browser
-import typeNode
+from . import browser
+from . import typeNode
class Node(browser.JDCNode, typeNode.PopUpMenuNode):
@@ -58,13 +58,13 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode):
self.editor.affiche_commentaire(tr("Nommage du concept effectue"))
self.onValid()
try :
- self.fenetre.LENom.setText(nom)
+ self.fenetre.LENom.setText(nom)
except :
- pass
+ pass
def getPanel(self):
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
return MonWidgetCommande(self,self.editor,self.item.object)
def createPopUpMenu(self):
@@ -75,19 +75,18 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode):
self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure"))
self.menu.addAction(self.ViewElt)
if self.item.isvalid() :
- self.ViewElt.setEnabled(1)
+ self.ViewElt.setEnabled(1)
else:
- self.ViewElt.setEnabled(0)
+ self.ViewElt.setEnabled(0)
if self.item.get_nom() == "DISTRIBUTION" :
self.Graphe = QAction(tr('Graphique'),self.tree)
- if monEnvQT5 : self.Graphe.triggered.connect(self.viewPng)
- else : self.tree.connect(self.Graphe,SIGNAL("triggered()"),self.viewPng)
+ self.Graphe.triggered.connect(self.viewPng)
self.Graphe.setStatusTip(tr("affiche la distribution "))
self.menu.addAction(self.Graphe)
if self.item.isvalid() :
- self.Graphe.setEnabled(1)
+ self.Graphe.setEnabled(1)
else:
- self.Graphe.setEnabled(0)
+ self.Graphe.setEnabled(0)
def view3D(self) :
from Editeur import TroisDPal
@@ -102,7 +101,7 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode):
g = generator.plugins[self.appliEficas.format_fichier]()
g.gener(self.item.object, format='beautifie')
stdGener = g.getGenerateur()
- loi = g.dictMCLois.keys()[0]
+ loi = list(g.dictMCLois.keys())[0]
nomLoi = loi.get_name()
(fd, fichier) = tempfile.mkstemp(prefix = "openturns_graph_", suffix = ".png")
os.close(fd)
@@ -111,7 +110,7 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode):
script = stdGener.GraphiquePDF(loi, chemin, base)
#print script
d = {}
- exec script in d
+ exec(script, d)
widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi)
os.remove(fichier)
QApplication.restoreOverrideCursor()
@@ -220,9 +219,10 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
except:
return ''
- def keys(self):
- keys=self.object.mc_dict.keys()
- return keys
+ # PNPN ????
+ #def keys(self):
+ # keys=self.object.mc_dict
+ # return keys
def GetSubList(self):
"""
@@ -282,7 +282,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
oldnom=self.object.sd.nom
test,mess= self.object.nomme_sd(nom)
if test:self.object.parent.reset_context()
- if (test and self.appli.dict_reels.has_key(oldnom) ):
+ if (test and oldnom in self.appli.dict_reels ):
self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
return test,mess
@@ -306,14 +306,14 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
Cette méthode retourne un objet commentarisé
représentatif de self.object
"""
- import generator,string,Accas
+ import generator,Accas
# Format de fichier utilisé
format=self.appli.appliEficas.format_fichier
g=generator.plugins[format]()
texte_commande = g.gener(self.object,format='beautifie')
# Il faut enlever la premiere ligne vide de texte_commande que
# rajoute le generator
- rebut,texte_commande = string.split(texte_commande,'\n',1)
+ rebut,texte_commande = texte_commande.split('\n',1)
# on construit l'objet COMMANDE_COMM repésentatif de self mais non
# enregistré dans le jdc
commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
diff --git a/InterfaceQT4/compoparam.py b/InterfaceQT4/compoparam.py
index 5efea5d5..0dd7f810 100644
--- a/InterfaceQT4/compoparam.py
+++ b/InterfaceQT4/compoparam.py
@@ -18,26 +18,31 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce module contient les classes permettant de définir les objets graphiques
- représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
+ Ce module contient les classes permettant de definir les objets graphiques
+ representant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
d'EFICAS
"""
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
# import modules Python
-import string, types
+import types
from Extensions.i18n import tr
# import modules EFICAS
from Editeur import Objecttreeitem
-import browser
-import typeNode
+from . import browser
+from . import typeNode
class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
def getPanel(self):
"""
"""
- from monWidgetParam import MonWidgetParam
+ from .monWidgetParam import MonWidgetParam
return MonWidgetParam(self, self.editor,self.item.object)
def createPopUpMenu(self):
@@ -51,8 +56,8 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
"""
- Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
- qui représente le PARAMETRE
+ Classe servant a definir l'item porte par le noeud de l'arbre d'EFICAS
+ qui represente le PARAMETRE
"""
itemNode=Node
@@ -65,8 +70,8 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetIconName(self):
"""
- Retourne le nom de l'icone associée au noeud qui porte self,
- dépendant de la validité de l'objet
+ Retourne le nom de l'icone associee au noeud qui porte self,
+ dependant de la validite de l'objet
NB : un PARAMETRE est toujours valide ...
"""
if self.isactif():
@@ -79,7 +84,7 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetLabelText(self):
""" Retourne 3 valeurs :
- - le texte à afficher dans le noeud représentant l'item
+ - le texte a afficher dans le noeud representant l'item
- la fonte dans laquelle afficher ce texte
- la couleur du texte
"""
@@ -87,16 +92,16 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
def GetText(self):
"""
- Retourne le texte à afficher aprês le nom de la commande (ici apres 'parametre')
- Ce texte est tronqué à 25 caractêres
+ Retourne le texte a afficher apres le nom de la commande (ici apres 'parametre')
+ Ce texte est tronque a 25 caracteres
"""
texte=self.object.nom+"="+str(self.object.valeur)
- if type(self.object.valeur) == types.ListType :
+ if type(self.object.valeur) == list :
texte=self.nom+' = ['
for l in self.object.valeur :
texte=texte+str(l) +","
texte=texte[0:-1]+']'
- texte = string.split(texte,'\n')[0]
+ texte = texte.split('\n')[0]
if len(texte) < 25 :
return texte
else :
@@ -109,7 +114,7 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
return []
# ---------------------------------------------------------------------------
-# Méthodes permettant la modification et la lecture des attributs
+# Methodes permettant la modification et la lecture des attributs
# du parametre = API graphique du PARAMETRE pour Panel et EFICAS
# ---------------------------------------------------------------------------
@@ -128,7 +133,7 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
def set_valeur(self,new_valeur):
"""
- Affecte valeur à l'objet PARAMETRE
+ Affecte valeur a l'objet PARAMETRE
"""
self.object.set_valeur(new_valeur)
@@ -141,7 +146,7 @@ class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
def get_fr(self):
"""
- Retourne le fr associé au parametre, cad la bulle d'aide pour EFICAS
+ Retourne le fr associe au parametre, cad la bulle d'aide pour EFICAS
"""
return tr("Definition d'un parametre")
diff --git a/InterfaceQT4/compoproc.py b/InterfaceQT4/compoproc.py
index 95e9bdfd..2b730552 100644
--- a/InterfaceQT4/compoproc.py
+++ b/InterfaceQT4/compoproc.py
@@ -17,17 +17,18 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
from Editeur import Objecttreeitem
-import compooper
-import browser
-import typeNode
+from . import compooper
+from . import browser
+from . import typeNode
class Node(browser.JDCNode,typeNode.PopUpMenuNode):
def getPanel(self):
#print "getPanel de compoproc"
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
return MonWidgetCommande(self,self.editor,self.item.object)
def createPopUpMenu(self):
diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py
index 16183763..84f44332 100644
--- a/InterfaceQT4/composimp.py
+++ b/InterfaceQT4/composimp.py
@@ -18,15 +18,21 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+
+import types,os
from copy import copy,deepcopy
import traceback
-import typeNode
+from . import typeNode
# Modules Eficas
from Editeur import Objecttreeitem
-import browser
+from . import browser
from Noyau.N_CR import justify_text
from Accas import SalomeEntry
@@ -43,7 +49,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
# label informatif
if monObjet.isInformation():
- from monWidgetInfo import MonWidgetInfo
+ from .monWidgetInfo import MonWidgetInfo
widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande)
self.widget=widget
return widget
@@ -54,7 +60,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
# a gerer comme dans composimp
# Gestion des matrices
if self.item.wait_matrice ():
- from monWidgetMatrice import MonWidgetMatrice
+ from .monWidgetMatrice import MonWidgetMatrice
widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
self.widget=widget
return widget
@@ -67,76 +73,75 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
# A verifier
if maDefinition.into != [] and maDefinition.into != None:
if len(maDefinition.into) < 4 :
- from monWidgetRadioButton import MonWidgetRadioButton
+ from .monWidgetRadioButton import MonWidgetRadioButton
widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif len(maDefinition.into) < 7 :
- from monWidget4a6RadioButton import MonWidget4a6RadioButton
+ from .monWidget4a6RadioButton import MonWidget4a6RadioButton
widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetCB import MonWidgetCB
+ from .monWidgetCB import MonWidgetCB
widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_bool() :
- from monWidgetSimpBool import MonWidgetSimpBool
+ from .monWidgetSimpBool import MonWidgetSimpBool
widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_fichier():
- from monWidgetSimpFichier import MonWidgetSimpFichier
+ from .monWidgetSimpFichier import MonWidgetSimpFichier
widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
# PNPNPN - a faire
elif self.item.wait_date():
- from monWidgetDate import MonWidgetDate
+ from .monWidgetDate import MonWidgetDate
widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_heure():
- from monWidgetHeure import MonWidgetHeure
+ from .monWidgetHeure import MonWidgetHeure
widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_tuple() :
if self.item.object.definition.type[0].ntuple == 2:
- from monWidgetSimpTuple2 import MonWidgetSimpTuple2
+ from .monWidgetSimpTuple2 import MonWidgetSimpTuple2
widget=MonWidgetSimpTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.object.definition.type[0].ntuple == 3 :
- from monWidgetSimpTuple3 import MonWidgetSimpTuple3
+ from .monWidgetSimpTuple3 import MonWidgetSimpTuple3
widget=MonWidgetSimpTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
print ("Pas de Tuple de longueur > 3")
print ("Prevenir la maintenance ")
elif self.item.wait_complex():
- from monWidgetSimpComplexe import MonWidgetSimpComplexe
+ from .monWidgetSimpComplexe import MonWidgetSimpComplexe
widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_co():
if len(self.item.get_sd_avant_du_bon_type()) == 0 :
- from monWidgetUniqueSDCO import MonWidgetUniqueSDCO
+ from .monWidgetUniqueSDCO import MonWidgetUniqueSDCO
widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetSDCOInto import MonWidgetSDCOInto
+ from .monWidgetSDCOInto import MonWidgetSDCOInto
widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_assd():
if len(self.item.get_sd_avant_du_bon_type()) == 0 :
- from monWidgetVide import MonWidgetVide
+ from .monWidgetVide import MonWidgetVide
widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
if len(self.item.get_sd_avant_du_bon_type()) < 4 :
- from monWidgetRadioButton import MonWidgetRadioButtonSD
+ from .monWidgetRadioButton import MonWidgetRadioButtonSD
widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif len(self.item.get_sd_avant_du_bon_type()) < 7 :
- from monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
+ from .monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetCB import MonWidgetCBSD
+ from .monWidgetCB import MonWidgetCBSD
widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_Salome() and self.editor.salome:
- # Pas fait
- from monWidgetSimpSalome import MonWidgetSimpSalome
+ from .monWidgetSimpSalome import MonWidgetSimpSalome
widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_TXM():
- from monWidgetSimpTxt import MonWidgetSimpTxt
+ from .monWidgetSimpTxt import MonWidgetSimpTxt
widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetSimpBase import MonWidgetSimpBase
+ from .monWidgetSimpBase import MonWidgetSimpBase
widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
# Gestion des listes
@@ -149,17 +154,17 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
#widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
# pass
#else :
- from monWidgetPlusieursInto import MonWidgetPlusieursInto
+ from .monWidgetPlusieursInto import MonWidgetPlusieursInto
widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_assd() :
- from monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
+ from .monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.wait_tuple() :
if self.item.object.definition.type[0].ntuple == 2:
- from monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2
+ from .monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2
widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
elif self.item.object.definition.type[0].ntuple == 3 :
- from monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3
+ from .monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3
widget=MonWidgetPlusieursTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
print ("Pas de Tuple de longueur > 3")
@@ -168,26 +173,26 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
if self.item.is_list_SansOrdreNiDoublon():
if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from monWidgetPlusieursInto import MonWidgetPlusieursInto
+ from .monWidgetPlusieursInto import MonWidgetPlusieursInto
widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
# tres vite pour le tag mais devra etre gere dans configuration
if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
+ from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
#print 8
if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
- from monWidgetPlusieursBase import MonWidgetPlusieursBase
+ from .monWidgetPlusieursBase import MonWidgetPlusieursBase
widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
else :
- from monWidgetPlusieursPlie import MonWidgetPlusieursPlie
+ from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
self.widget=widget
@@ -295,16 +300,16 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
try :
if "R" in self.object.definition.type:
clef=self.object.GetNomConcept()
- if self.appli.dict_reels.has_key(clef):
- if type(valeurs) == types.TupleType:
+ if clef in self.appli.dict_reels:
+ if type(valeurs) == tuple:
valeurs_reelles=[]
for val in valeurs :
- if self.appli.dict_reels[clef].has_key(val) :
+ if val in self.appli.dict_reels[clef]:
valeurs_reelles.append(self.appli.dict_reels[clef][val])
else :
valeurs_reelles.append(val)
else :
- if self.appli.dict_reels[clef].has_key(valeurs):
+ if valeurs in self.appli.dict_reels[clef]:
valeurs_reelles=self.appli.dict_reels[clef][valeurs]
valeurs=valeurs_reelles
except :
@@ -321,7 +326,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
#On ne garde que les items valides
listevalideitem=[]
- if type(valeurspossibles) in (types.ListType,types.TupleType) :
+ if type(valeurspossibles) in (list,tuple) :
pass
else :
valeurspossibles=(valeurspossibles,)
@@ -586,10 +591,13 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
return boo
def wait_Salome(self):
- type = self.object.definition.type[0]
- if 'grma' in repr(type) : return True
- if 'grno' in repr(type) : return True
- if (isinstance(type, types.ClassType) and issubclass(type, SalomeEntry)) : return True
+ monType = self.object.definition.type[0]
+ if 'grma' in repr(monType) : return True
+ if 'grno' in repr(monType) : return True
+ try :
+ if issubclass(monType, SalomeEntry) : return True
+ except :
+ pass
return False
def GetType(self):
@@ -609,15 +617,15 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
# traite_reel
def eval_valeur(self,valeur):
- """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur de self :
- - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
- - retourne 'valeur' (chaine de caractéres) sinon
+ """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
+ - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
+ - retourne 'valeur' (chaine de caracteres) sinon
"""
newvaleur=self.eval_val(valeur)
return newvaleur,1
def eval_valeur_BAK(self,valeur):
- """ Lance l'interprétation de 'valeur' (chaine de caractéres) comme valeur
+ """ Lance l'interpretation de 'valeur' (chaine de caractéres) comme valeur
de l'objet pointé par self :
- retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
- retourne 'valeur' (chaine de caractéres) sinon
@@ -625,7 +633,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
- retourne invalide si 1 des objets du tuple l est
"""
validite=1
- if type(valeur) in (types.ListType,types.TupleType) :
+ if type(valeur) in (list,tuple) :
valeurretour=[]
for item in valeur :
newvaleur,validiteitem=self.eval_valeur_item(item)
@@ -661,7 +669,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
#print "eval_valeur_item",valeurretour,validite
if validite == 0:
- if type(valeur) == types.StringType and self.object.wait_TXM():
+ if type(valeur) == bytes and self.object.wait_TXM():
essai_valeur="'" + valeur + "'"
valeurretour,validite= self.object.eval_valeur(essai_valeur)
@@ -680,7 +688,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
#validite=0
# on est dans le cas ou on a évalué et ou on n'aurait pas du
if self.object.wait_TXM() :
- if type(valeurretour) != types.StringType:
+ if type(valeurretour) != bytes:
valeurretour=str(valeur)
validite=1
return valeurretour,validite
@@ -715,7 +723,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
ou un EVAL ...
"""
- valeur = string.strip(valeur)
+ valeur = valeur.strip()
liste_reels = self.get_sd_avant_du_bon_type()
if valeur in liste_reels:
return valeur
@@ -723,12 +731,12 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
if valeur[0:4] == 'EVAL' :
# on a trouvé un EVAL --> on retourne directement la valeur
return valeur
- if string.find(valeur,'.') == -1 :
+ if valeur.find('.') == -1 :
# aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
if (self.is_param(valeur)):
return valeur
else:
- if string.find(valeur,'e') != -1:
+ if valeur.find('e') != -1:
# Notation scientifique ?
try :
r=eval(valeur)
diff --git a/InterfaceQT4/configuration.py b/InterfaceQT4/configuration.py
index bd55230f..9c6da0df 100644
--- a/InterfaceQT4/configuration.py
+++ b/InterfaceQT4/configuration.py
@@ -1,200 +1,205 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-"""
- Ce module sert pour charger les parametres de configuration d'EFICAS
-"""
-# Modules Python
-import os, sys, string, types, re
-import traceback
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QMessageBox
-else :
- from PyQt4.QtGui import QMessageBox
-from Editeur.utils import read_file
-from Extensions.i18n import tr
-
-class CONFIG_BASE:
-
- #-------------------------------
- def __init__(self,appli,repIni):
- #-------------------------------
-
- # Classe de base permettant de lire, afficher
- # et sauvegarder les fichiers utilisateurs
- # On a deux directories : la directory generale (Repertoire d install + Nom du code
- # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
- # et la directorie de l utilisateur
- # HOME/.Eficas_Openturns
- # Le fichier prefs.py va etre lu dans la directory generale
- # puis surcharge eventuellement par celui contenu dans ${PREFS_CATA_$CODE}
- # par celui de l utilisateur
- # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
- # dans le fichier general sinon
- self.appli = appli
- self.code = appli.code
- self.salome = appli.salome
- if self.salome : self.name="editeur_salome.ini"
- else : self.name="editeur.ini"
- self.rep_mat = None
- self.repIni = repIni
- if sys.platform[0:5]=="linux" :
- self.rep_user = os.path.join(os.environ['HOME'],'.config/Eficas',appli.code)
- else :
- self.rep_user = os.path.join('C:/','.config/Eficas',appli.code)
-
-
-
- self.setValeursParDefaut()
-
- self.lecture_fichier_ini_standard()
- self.lecture_fichier_ini_integrateur()
- self.lecture_fichier_ini_utilisateur()
-
- #Particularite des schemas MAP
- if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
-
- if self.appli: self.parent=appli.top
- else: self.parent=None
-
- if not os.path.isdir(self.savedir) :
- if sys.platform[0:5]=="linux" :
- self.savedir=os.environ['HOME']
- else:
- self.savedir='C:/'
-
-
-
- def setValeursParDefaut(self):
- #-----------------------------
-
- # Valeurs par defaut
- if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
- self.path_doc = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
- self.exec_acrobat = 'acroread'
- nomDir="Eficas_"+self.code
- if sys.platform[0:5]=="linux" :
- self.savedir = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
- else:
- self.savedir = os.path.abspath('C:/')
- self.mode_nouv_commande='initial'
- self.affiche="alpha"
- self.closeAutreCommande = False
- self.closeFrameRechercheCommande = False
- self.closeEntete = False
- self.closeArbre = False
- self.force_langue=False
- self.suiteTelemac=False
-
-
- #--------------------------------------
- def lecture_fichier_ini_standard(self):
- #--------------------------------------
-
- name='prefs_'+self.appli.code
- prefsCode=__import__(name)
- for k in dir(prefsCode):
- if (k[0:1] != "__" and k[-1:-2] !='__'):
- valeur=getattr(prefsCode,k)
- setattr(self,k,valeur)
-
-
-
- #--------------------------------------
- def lecture_fichier_ini_integrateur(self):
- #--------------------------------------
- # Verifie l'existence du fichier "standard"
- # appelle la lecture de ce fichier
- clef="PREFS_CATA_"+self.code
- try :
- repIntegrateur=os.path.abspath(os.environ[clef])
- except :
- return
-
- fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
- if not os.path.isfile(fic_ini_integrateur): return
- txt = read_file(fic_ini_integrateur)
- d=locals()
- try:
- exec txt in d
- except :
- QMessageBox.critical( None, tr("Import du fichier de Configuration"),
- tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
- return
- self.labels_eficas.append('rep_aide')
- for k in self.labels_eficas :
- try :
- setattr(self,k,d[k])
- except :
- pass
- #Glut pour les repertoires materiaux
- #et pour la doc
- for k in d.keys() :
- if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
- setattr(self,k,d[k])
-
-
- #--------------------------------------
- def lecture_fichier_ini_utilisateur(self):
- #--------------------------------------
- # Surcharge les parametres standards par les parametres utilisateur s'ils existent
- self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
- if not os.path.isfile(self.fic_ini_utilisateur): return
-
- txt = read_file(self.fic_ini_utilisateur)
- d=locals()
- try:
- exec txt in d
- except :
- l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
- QMessageBox.critical( None, tr("Import du fichier de Configuration"),
- tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
- for k in self.labels_user :
- try :
- setattr(self,k,d[k])
- except :
- pass
- for k in d.keys() :
- if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
- setattr(self,k,d[k])
-
- #--------------------------------------
- def save_params(self):
- #--------------------------------------
- # sauvegarde
- # les nouveaux parametres dans le fichier de configuration utilisateur
- #
- texte=""
- for clef in self.labels_user :
- if hasattr(self,clef):
- valeur=getattr(self,clef)
- texte= texte + clef+" = " + repr(valeur) +"\n"
- #Glut pour les repertoires materiaux
- #et pour la doc
- for k in dir(self):
- if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
- valeur=getattr(self,k)
- texte= texte + k+" = " + repr(valeur) +"\n"
-
- f=open(self.fic_ini_utilisateur,'w+')
- f.write(texte)
- f.close()
-#
-
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2013 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+ Ce module sert pour charger les parametres de configuration d'EFICAS
+"""
+# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except : pass
+
+import os, sys, types, re
+import traceback
+from PyQt5.QtWidgets import QMessageBox
+from Editeur.utils import read_file
+from Extensions.i18n import tr
+
+class CONFIG_BASE(object):
+
+ #-------------------------------
+ def __init__(self,appli,repIni):
+ #-------------------------------
+
+ # Classe de base permettant de lire, afficher
+ # et sauvegarder les fichiers utilisateurs
+ # On a deux directories : la directory generale (Repertoire d install + Nom du code
+ # Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
+ # et la directorie de l utilisateur
+ # HOME/.Eficas_Openturns
+ # Le fichier prefs.py va etre lu dans la directory generale
+ # puis surcharge eventuellement par celui contenu dans ${PREFS_CATA_$CODE}
+ # par celui de l utilisateur
+ # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+ # dans le fichier general sinon
+ self.appli = appli
+ self.code = appli.code
+ self.salome = appli.salome
+ if self.salome : self.name="editeur_salome.ini"
+ else : self.name="editeur.ini"
+ self.rep_mat = None
+ self.repIni = repIni
+ if sys.platform[0:5]=="linux" :
+ self.rep_user = os.path.join(os.environ['HOME'],'.config/Eficas',appli.code)
+ else :
+ self.rep_user = os.path.join('C:/','.config/Eficas',appli.code)
+
+
+
+ self.setValeursParDefaut()
+
+ self.lecture_fichier_ini_standard()
+ self.lecture_fichier_ini_integrateur()
+ self.lecture_fichier_ini_utilisateur()
+
+ #Particularite des schemas MAP
+ if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode)
+
+ if self.appli: self.parent=appli.top
+ else: self.parent=None
+
+ if not os.path.isdir(self.savedir) :
+ if sys.platform[0:5]=="linux" :
+ self.savedir=os.environ['HOME']
+ else:
+ self.savedir='C:/'
+
+
+
+ def setValeursParDefaut(self):
+ #-----------------------------
+
+ # Valeurs par defaut
+ if not os.path.isdir(self.rep_user) : os.makedirs(self.rep_user)
+ self.path_doc = os.path.abspath(os.path.join(self.repIni,'..','Doc'))
+ self.exec_acrobat = 'acroread'
+ nomDir="Eficas_"+self.code
+ if sys.platform[0:5]=="linux" :
+ self.savedir = os.path.abspath(os.path.join(os.environ['HOME'],nomDir))
+ else:
+ self.savedir = os.path.abspath('C:/')
+ self.mode_nouv_commande='initial'
+ self.affiche="alpha"
+ self.closeAutreCommande = False
+ self.closeFrameRechercheCommande = False
+ self.closeEntete = False
+ self.closeArbre = False
+ self.force_langue=False
+ self.suiteTelemac=False
+ self.nombreDeBoutonParLigne=0
+ self.translatorFichier=None
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_standard(self):
+ #--------------------------------------
+
+ name='prefs_'+self.appli.code
+ prefsCode=__import__(name)
+ for k in dir(prefsCode):
+ if (k[0:1] != "__" and k[-1:-2] !='__'):
+ valeur=getattr(prefsCode,k)
+ setattr(self,k,valeur)
+
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_integrateur(self):
+ #--------------------------------------
+ # Verifie l'existence du fichier "standard"
+ # appelle la lecture de ce fichier
+ clef="PREFS_CATA_"+self.code
+ try :
+ repIntegrateur=os.path.abspath(os.environ[clef])
+ except :
+ return
+
+ fic_ini_integrateur=os.path.join(repIntegrateur,self.name)
+ if not os.path.isfile(fic_ini_integrateur): return
+ txt = read_file(fic_ini_integrateur)
+ d=locals()
+ try:
+ exec(txt, d)
+ except :
+ QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
+ return
+ self.labels_eficas.append('rep_aide')
+ for k in self.labels_eficas :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+ #Glut pour les repertoires materiaux
+ #et pour la doc
+ for k in d :
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ setattr(self,k,d[k])
+
+
+ #--------------------------------------
+ def lecture_fichier_ini_utilisateur(self):
+ #--------------------------------------
+ # Surcharge les parametres standards par les parametres utilisateur s'ils existent
+ self.fic_ini_utilisateur = os.path.join(self.rep_user,self.name)
+ if not os.path.isfile(self.fic_ini_utilisateur): return
+
+ txt = read_file(self.fic_ini_utilisateur)
+ d=locals()
+ try:
+ exec(txt, d)
+ except :
+ l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+ QMessageBox.critical( None, tr("Import du fichier de Configuration"),
+ tr("Erreur a la lecture du fichier de configuration %s " , str(fic_ini_integrateur)))
+ for k in self.labels_user :
+ try :
+ setattr(self,k,d[k])
+ except :
+ pass
+ for k in d :
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ setattr(self,k,d[k])
+
+ #--------------------------------------
+ def save_params(self):
+ #--------------------------------------
+ # sauvegarde
+ # les nouveaux parametres dans le fichier de configuration utilisateur
+ #
+ texte=""
+ for clef in self.labels_user :
+ if hasattr(self,clef):
+ valeur=getattr(self,clef)
+ texte= texte + clef+" = " + repr(valeur) +"\n"
+ #Glut pour les repertoires materiaux
+ #et pour la doc
+ for k in dir(self):
+ if (k[0:8]=="rep_mat_") or (k[0:8]=="rep_doc_"):
+ valeur=getattr(self,k)
+ texte= texte + k+" = " + repr(valeur) +"\n"
+
+ f=open(self.fic_ini_utilisateur,'w+')
+ f.write(texte)
+ f.close()
+#
+
diff --git a/InterfaceQT4/determine.py b/InterfaceQT4/determine.py
index e0cf7e94..6f5616ea 100644
--- a/InterfaceQT4/determine.py
+++ b/InterfaceQT4/determine.py
@@ -1,3 +1,9 @@
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import object
+except : pass
+
import os
class envQT(object):
@@ -11,7 +17,7 @@ class envQT(object):
def __init__(self):
if hasattr(self,'inQt5') : return
- if 'PYQT_ROOT_DIR' in os.environ.keys(): qt=os.environ['PYQT_ROOT_DIR']
+ if 'PYQT_ROOT_DIR' in os.environ: qt=os.environ['PYQT_ROOT_DIR']
else : qt="Pyqt4"
if 'Pyqt-5' in qt : self.inQt5=True
else : self.inQt5=False
diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py
index 6755841c..9b79350f 100755
--- a/InterfaceQT4/editor.py
+++ b/InterfaceQT4/editor.py
@@ -17,23 +17,28 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+
import types,sys,os, re
import subprocess
import traceback
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter
- from PyQt5.QtGui import QPalette
- from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import six
+from six.moves import range
+from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter
+from PyQt5.QtGui import QPalette
+from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
import time
import pdb
from datetime import date
from Extensions.i18n import tr
+import traceback
# Modules Eficas
@@ -42,10 +47,10 @@ from Editeur import session
from Editeur import comploader
from Editeur import Objecttreeitem
from desBaseWidget import Ui_baseWidget
-from monViewTexte import ViewText
+from InterfaceQT4.monViewTexte import ViewText
from monWidgetCreeParam import MonWidgetCreeParam
-import browser
-import readercata
+from . import browser
+from . import readercata
DictExtensions= {"MAP" : ".map", "TELEMAC" : '.comm'}
@@ -78,6 +83,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
self.first = True
self.QWParent = QWParent
self.couleur = Qt.black
+ self.nodeEnCours=None
if appli != None :
self.salome = self.appliEficas.salome
@@ -87,6 +93,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
# ces attributs sont mis a jour par definitCode appelee par newEditor
self.code = self.appliEficas.CONFIGURATION.code
+ self.initSplitterSizes()
#self.afficheListesPliees=False
self.afficheListesPliees=True
@@ -98,6 +105,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
self.closeFrameRechercheCommande=self.appliEficas.CONFIGURATION.closeFrameRechercheCommande
self.closeArbre=self.appliEficas.CONFIGURATION.closeArbre
self.affiche=self.appliEficas.CONFIGURATION.affiche
+ self.nombreDeBoutonParLigne = self.appliEficas.CONFIGURATION.nombreDeBoutonParLigne
#self.taille = self.appliEficas.taille
#if self.code in ['MAP','CARMELCND','PSEN'] : self.afficheCommandesPliees=False
@@ -105,14 +113,11 @@ class JDCEditor(Ui_baseWidget,QWidget):
if self.code in ['MAP',]:
self.widgetTree.close()
self.widgetTree=None
- if self.closeArbre:
- self.widgetTree.close()
- self.widgetTree=None
-
-
+ if self.closeArbre: self.fermeArbre()
self.version_code = session.d_env.cata
+
if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.multi==True:
self.readercata = readercata.READERCATA( self, self.appliEficas )
self.appliEficas.readercata=self.readercata
@@ -183,10 +188,10 @@ class JDCEditor(Ui_baseWidget,QWidget):
self.fileInfo = QFileInfo(self.fichier)
self.fileInfo.setCaching(0)
if jdc==None :
- try :
+ #try :
self.jdc = self.readFile(self.fichier)
- except :
- print ("mauvaise lecture")
+ #except :
+ # print ("mauvaise lecture")
else :
self.jdc=jdc
if self.jdc is not None and units is not None:
@@ -234,6 +239,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-------------------# Pour execution avec output et error dans le bash
def runPSEN(self):
#-------------------#
+
#if self.modified or self.fichier==None : self.saveFile()
self.saveFile()
@@ -257,7 +263,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
if not(self.jdc.isvalid()):
QMessageBox.information( self, tr( "Unvalid JDC"),tr("incorrect keywords will be ignored"))
- if generator.plugins.has_key('dicoImbrique'):
+ if 'dicoImbrique' in generator.plugins:
self.generator=generator.plugins['dicoImbrique']()
jdc_formate=self.generator.gener(self.jdc)
dico=self.generator.Dico
@@ -265,7 +271,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
###to delete
#fileDico = r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
fileDico = os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
- f = open( str(fileDico), 'wb')
+ f = open( str(fileDico), 'w')
f.write("Dico =" + str(dico) )
f.close()
###
@@ -286,13 +292,13 @@ class JDCEditor(Ui_baseWidget,QWidget):
sys.path.append(path1)
- if generator.plugins.has_key('dicoImbrique'):
+ if 'dicoImbrique' in generator.plugins:
self.generator=generator.plugins['dicoImbrique']()
jdc_formate=self.generator.gener(self.jdc)
dico=self.get_Dico() #generator.Dico
- for k in dico['CONTINGENCY_PROCESSING'].keys():
+ for k in dico['CONTINGENCY_PROCESSING']:
#print (k)
if k[0:19] == 'Component_List_For_' or k[0:21] =='Contingency_List_For_' :
newK=k.replace('___',' ')
@@ -302,7 +308,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
###to delete
fileDico = os.path.join(path1, 'dicoN1_process.py')
- f = open( str(fileDico), 'wb')
+ f = open( str(fileDico), 'w')
f.write("Dico =" + str(dico) )
f.close()
###
@@ -386,7 +392,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
Public slot to read the text from a file.
@param fn filename to read from (string or QString)
"""
- fn = unicode(fn)
+ fn = six.text_type(fn)
# ------------------------------------------------------------------------------------
# charge le JDC
@@ -394,7 +400,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
jdcName=os.path.basename(fn)
# Il faut convertir le contenu du fichier en fonction du format
- if convert.plugins.has_key( self.appliEficas.format_fichier_in ):
+ if self.appliEficas.format_fichier_in in convert.plugins:
# Le convertisseur existe on l'utilise
#appli = self
p=convert.plugins[self.appliEficas.format_fichier_in]()
@@ -446,7 +452,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-----------------------#
# Il faut convertir le contenu du fichier en fonction du format
- if convert.plugins.has_key(self.format):
+ if self.format in convert.plugins :
# Le convertisseur existe on l'utilise
p=convert.plugins[self.format]()
p.readfile(file)
@@ -488,12 +494,8 @@ class JDCEditor(Ui_baseWidget,QWidget):
f=open(nomFichier,'w')
f.write(txt)
f.close()
- if monEnvQT5 :
- self.monExe.readyReadStandardOutput.connect( self.readFromStdOut)
- self.monExe.readyReadStandardError.connect( self.readFromStdErr)
- else :
- self.connect(self.monExe, SIGNAL("readyReadStandardOutput()"), self.readFromStdOutQT4 )
- self.connect(self.monExe, SIGNAL("readyReadStandardError()"), self.readFromStdErrQT4 )
+ self.monExe.readyReadStandardOutput.connect( self.readFromStdOut)
+ self.monExe.readyReadStandardError.connect( self.readFromStdErr)
exe='sh ' + nomFichier
self.monExe.start(exe)
self.monExe.closeWriteChannel()
@@ -531,6 +533,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-----------------------#
def viewJdcSource(self):
#-----------------------#
+ if self.fichier == None : return
f=open(self.fichier,'r')
texteSource=f.read()
f.close()
@@ -545,7 +548,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-----------------------#
def viewJdcRapport(self):
#-----------------------#
- strRapport = unicode( self.jdc.report() )
+ strRapport = six.text_type( self.jdc.report() )
# on ajoute les regles
self._viewText(strRapport, "JDC_RAPPORT")
@@ -626,7 +629,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#---------------------#
def handleRechercher(self):
#---------------------#
- from monRecherche import DRecherche
+ from .monRecherche import DRecherche
monRechercheDialg=DRecherche(parent=self,fl=0)
monRechercheDialg.show()
@@ -634,7 +637,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#--------------------------------#
def handleRechercherDsCatalogue(self):
#-----------------------------#
- from monRechercheCatalogue import DRechercheCatalogue
+ from .monRechercheCatalogue import DRechercheCatalogue
monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
monRechercheDialg.show()
@@ -872,7 +875,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
@return flag indicating success
"""
- fn = unicode(fn)
+ fn = six.text_type(fn)
if txt == None :
txt = self.get_text_JDC(self.format,formatLigne=formatLigne)
@@ -887,7 +890,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
txt=txt+checksum
if self.code=="TELEMAC" : return 1
try:
- f = open(fn, 'wb')
+ f = open(fn, 'w')
f.write(txt)
f.close()
return 1
@@ -902,8 +905,8 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-----------------------------------------------------------#
def get_text_JDC(self,format,pourRun=0,formatLigne="beautifie"):
#-----------------------------------------------------------#
- if self.code == "MAP" and not(generator.plugins.has_key(format)): format = "MAP"
- if generator.plugins.has_key(format):
+ if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+ if format in generator.plugins:
# Le generateur existe on l'utilise
self.generator=generator.plugins[format]()
@@ -912,6 +915,8 @@ class JDCEditor(Ui_baseWidget,QWidget):
if pourRun : jdc_formate=self.generator.textePourRun
except ValueError as e:
QMessageBox.critical(self, tr("Erreur a la generation"),str(e))
+ return
+
if not self.generator.cr.estvide():
self.affiche_infos(tr("Erreur a la generation"),Qt.red)
QMessageBox.critical( self, tr("Erreur a la generation"),tr("EFICAS ne sait pas convertir ce JDC"))
@@ -927,7 +932,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#----------------------#
def get_Dico(self):
#---------------------#
- if generator.plugins.has_key('dicoImbrique'):
+ if 'dicoImbrique' in generator.plugins:
self.generator=generator.plugins['dicoImbrique']()
jdc_formate=self.generator.gener(self.jdc)
dico=self.generator.Dico
@@ -943,13 +948,13 @@ class JDCEditor(Ui_baseWidget,QWidget):
#------------#
fonction="run"+self.code
#print fonction
- if fonction in JDCEditor.__dict__.keys(): apply(JDCEditor.__dict__[fonction],(self,))
+ if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction],(self,)
#------------#
def saveRun(self):
#------------#
fonction="saveRun"+self.code
- if fonction in JDCEditor.__dict__.keys(): apply(JDCEditor.__dict__[fonction],(self,))
+ if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction],(self,)
#---------------#
def runMAP(self):
@@ -989,7 +994,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#except :
# pass
except Exception as e:
- print (traceback.print_exc())
+ print((traceback.print_exc()))
#-------------------#
def runZCRACKS(self):
@@ -1010,7 +1015,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
textePython=(commande + self.fichierZcracksInput)
self._viewTextExecute( textePython,"run_zcracks",".sh")
except Exception as e:
- print (traceback.print_exc())
+ print((traceback.print_exc()))
#-------------------#
def runCARMELCND(self):
@@ -1041,12 +1046,12 @@ class JDCEditor(Ui_baseWidget,QWidget):
commande="runSession pilotyacsCS.py"
os.system(commande)
except Exception as e:
- print (traceback.print_exc())
+ print((traceback.print_exc()))
#-----------------------------------------------------#
def determineNomFichier(self,path,extension):
#-----------------------------------------------------#
- if DictExtensions.has_key(self.appli.code) :
+ if self.appli.code in DictExtensions:
chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
extensions= tr(chaine1+ "All Files (*)")
else :
@@ -1060,26 +1065,19 @@ class JDCEditor(Ui_baseWidget,QWidget):
extensions,None,
QFileDialog.DontConfirmOverwrite)
if fn == None : return (0, None)
- if monEnvQT5 : fn=fn[0]
+ fn=fn[0]
if fn=='': return (0, None)
ext = QFileInfo(fn).suffix()
if ext == '': fn+=extension
if QFileInfo(fn).exists():
- if monEnvQT5 :
- msgBox = QMessageBox(self)
- msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
- msgBox.setText(tr("Le fichier %s existe deja.", unicode(fn)))
- msgBox.addButton(tr("&Ecraser"),0)
- msgBox.addButton(tr("&Abandonner"),1)
- abort=msgBox.exec_()
- else :
- abort = QMessageBox.warning(self,
- tr("Sauvegarde du Fichier"),
- tr("Le fichier %s existe deja.",str(fn)),
- tr("&Ecraser"),
- tr("&Abandonner"))
+ msgBox = QMessageBox(self)
+ msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
+ msgBox.setText(tr("Le fichier %s existe deja.", six.text_type(fn)))
+ msgBox.addButton(tr("&Ecraser"),0)
+ msgBox.addButton(tr("&Abandonner"),1)
+ abort=msgBox.exec_()
if abort == 1 : return (0, "")
return (1,fn)
@@ -1120,19 +1118,13 @@ class JDCEditor(Ui_baseWidget,QWidget):
for b in c.children():
if isinstance(b,QPushButton):
avant=b.text()
- if (not monEnvQT5) and avant.toLatin1()=="&Open": b.setText("Save")
- if monEnvQT5 and avant=="&Open": b.setText("Save")
- if monEnvQT5 :
- mesFiltres= "input Map (*.input);;All Files (*)"
- else :
- mesFiltres=QStringList()
- mesFiltres << "input Map (*.input)" << "All Files (*)"
+ if avant=="&Open": b.setText("Save")
+ mesFiltres= "input Map (*.input);;All Files (*)"
monDialog.setNameFilters(mesFiltres)
if monNomFichier!="" : monDialog.selectFile(monNomFichier)
BOk=monDialog.exec_()
if BOk==0: return
- if monEnvQT5 : fn=str(monDialog.selectedFiles()[0])
- else : fn=str(monDialog.selectedFiles()[0].toLatin1())
+ fn=str(monDialog.selectedFiles()[0])
if fn == "" or fn == None : return
if not fn.endswith(".input"):
fn += ".input"
@@ -1166,7 +1158,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-----------------------------------------#
dicoCourant={}
format = self.appliEficas.format_fichier
- if generator.plugins.has_key(format):
+ if format in generator.plugins:
# Le generateur existe on l'utilise
self.generator=generator.plugins[format]()
jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
@@ -1202,9 +1194,9 @@ class JDCEditor(Ui_baseWidget,QWidget):
if fn == None : return (0, None)
if fn== '' : return (0, None)
- ulfile = os.path.abspath(unicode(fn))
+ ulfile = os.path.abspath(six.text_type(fn))
self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
- fn = unicode(QDir.toNativeSeparators(fn))
+ fn = six.text_type(QDir.toNativeSeparators(fn))
self.fichier = os.path.splitext(fn)[0]+extension
@@ -1233,7 +1225,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
if not self.modified and not saveas:
return (0, None) # do nothing if text wasn't changed
- if DictExtensions.has_key(self.appli.code) :
+ if self.appli.code in DictExtensions :
extension=DictExtensions[self.appli.code]
else :
extension='.comm'
@@ -1247,9 +1239,9 @@ class JDCEditor(Ui_baseWidget,QWidget):
if fn == None : return (0, None)
if fn== '' : return (0, None)
- ulfile = os.path.abspath(unicode(fn))
+ ulfile = os.path.abspath(six.text_type(fn))
self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
- fn = unicode(QDir.toNativeSeparators(fn))
+ fn = six.text_type(QDir.toNativeSeparators(fn))
newName = fn
@@ -1330,9 +1322,9 @@ class JDCEditor(Ui_baseWidget,QWidget):
# ce retour est impose par le get_file d'I_JDC
if fn== '' : return None," "
if not fn : return (0, " ")
- if monEnvQT5 : fn=fn[0]
+ fn=fn[0]
- ulfile = os.path.abspath(unicode(fn))
+ ulfile = os.path.abspath(six.text_type(fn))
self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
# On utilise le convertisseur defini par format_fichier
@@ -1567,7 +1559,7 @@ class JDCEditor(Ui_baseWidget,QWidget):
QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
caption='Fichier Med',
filter=extensions)
- if monEnvQT5 : QSfichier=QSfichier[0]
+ QSfichier=QSfichier[0]
self.fichierMED=QSfichier
from acquiertGroupes import getGroupes
erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
@@ -1614,37 +1606,40 @@ class JDCEditor(Ui_baseWidget,QWidget):
#-----------------------------------------
def initSplitterSizes(self, nbWidget=3):
#-----------------------------------------
- #print "je passe ds initSplitterSizes"
- if nbWidget==3 :
- if self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes=[1,1550,150]
- elif self.code in [ 'MAP'] : self.splitterSizes=[700,300]
- else : self.splitterSizes=[150,800,500]
- self.oldSizeWidgetOptionnel = 30
- if nbWidget==2 :
- if self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes=[5,1500]
- else : self.splitterSizes=[300,1000]
- self.oldSizeWidgetOptionnel = 30
- self.splitter.setSizes(self.splitterSizes)
+ #print ("je passe ds initSplitterSizes", nbWidget)
+
+ if self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes3=[1,1550,150]
+ elif self.code in [ 'MAP'] : self.splitterSizes3=[700,300]
+ else : self.splitterSizes3=[150,1000,300]
+
+ if self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes2=[5,1500]
+ else : self.splitterSizes2=[300,1000]
+
#-----------------------------------------
def restoreSplitterSizes(self,nbWidget=3):
#----------------------------------------
- #self.inhibeSplitter = 1
- #print 'ds restoreSplitterSizes'
- #print self.splitterSizes
+ #traceback.print_stack()
+ #print ("je passe ds restoreSplitterSizes")
if not(hasattr(self,'splitter')) : return
- if nbWidget==2 and len(self.splitterSizes) == 3 :
- self.splitterSizes[1]+=self.splitterSizes[2]
- newSizes=self.splitterSizes[:nbWidget]
+ if nbWidget==2 : newSizes=self.splitterSizes2
+ if nbWidget==3 : newSizes=self.splitterSizes3
+ #self.inhibeSplitter = 1
self.splitter.setSizes(newSizes)
+ #self.inhibeSplitter = 0
QApplication.processEvents()
# seule la fentetre du milieu est necessaire
self.splitter.widget(1).resizeEvent=self.saveSplitterSizes
+ #-----------------------------------------
def saveSplitterSizes(self,event):
- self.splitterSizes= self.splitter.sizes()
+ #-----------------------------------------
+ #print ("je passe ds saveSplitterSizes")
+ if self.inhibeSplitter : return
+ if self.widgetOptionnel == None : self.splitterSizes2 = self.splitter.sizes()[0:2]
+ else : self.splitterSizes3 = self.splitter.sizes()[0:3]
#------------------------
def fermeOptionnel(self):
@@ -1652,27 +1647,40 @@ class JDCEditor(Ui_baseWidget,QWidget):
if self.widgetOptionnel == None : return
self.inhibeSplitter=1
- self.splitterSizes[1] = self.splitterSizes[1] + self.splitterSizes[2]
- if self.splitterSizes[2]!=0 : self.oldSizeWidgetOptionnel = self.splitterSizes[2]
- self.splitterSizes[2]=0
-
self.widgetOptionnel.setParent(None)
self.widgetOptionnel.close()
self.widgetOptionnel.deleteLater()
self.widgetOptionnel=None
self.inhibeSplitter=0
self.restoreSplitterSizes(2)
-
+
#------------------------
def ajoutOptionnel(self):
#------------------------
- if len(self.splitterSizes) == 2 : self.splitterSizes.append(self.oldSizeWidgetOptionnel)
- else : self.splitterSizes[2] = self.oldSizeWidgetOptionnel # ceinture pour les close bizarres
+ #if len(self.splitterSizes) == 2 : self.splitterSizes.append(self.oldSizeWidgetOptionnel)
+ #else : self.splitterSizes[2] = self.oldSizeWidgetOptionnel # ceinture pour les close bizarres
#self.splitterSizes[1] = self.splitterSizes[1] - self.splitterSizes[2]
self.restoreSplitterSizes(3)
+ #------------------------
+ def fermeArbre(self):
+ #------------------------
+ #print (self.widgetTree)
+ self.oldWidgetTree=self.widgetTree
+ self.widgetTree.hide()
+ #self.widgetTree=None
+
+ #------------------------
+ def ouvreArbre(self):
+ #------------------------
+ #print ('je passe la')
+ #print (self.widgetTree)
+ #self.widgetTree=self.oldWidgetTree
+ self.widgetTree.show()
+ #self.restoreSplitterSizes(3)
+
#-----------------------------
def getTreeIndex(self,noeud):
#----------------------------
diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py
index a1d218d2..5ab31e0b 100755
--- a/InterfaceQT4/eficas_go.py
+++ b/InterfaceQT4/eficas_go.py
@@ -20,17 +20,20 @@
#
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+
+from PyQt5.QtWidgets import QApplication
+
import sys,os
repIni=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),".."))
-from determine import monEnvQT5
-if monEnvQT5 :
- ihmQTDir=os.path.join(repIni,"UiQT5")
- from PyQt5.QtWidgets import QApplication
-else :
- ihmQTDir=os.path.join(repIni,"UiQT4")
- from PyQt4.QtGui import QApplication
+ihmQTDir=os.path.join(repIni,"UiQT5")
editeurDir=os.path.join(repIni,"Editeur")
ihmDir=os.path.join(repIni,"InterfaceQT4")
+
if ihmDir not in sys.path : sys.path.append(ihmDir)
if ihmQTDir not in sys.path : sys.path.append(ihmQTDir)
if editeurDir not in sys.path :sys.path.append(editeurDir)
@@ -46,7 +49,7 @@ def lance_eficas(code=None,fichier=None,ssCode=None,multi=False,langue='en'):
if options.code!= None : code=options.code
if options.ssCode!= None : ssCode=options.ssCode
- from qtEficas import Appli
+ from .qtEficas import Appli
app = QApplication(sys.argv)
Eficas=Appli(code=code,ssCode=ssCode,multi=multi,langue=langue)
Eficas.show()
@@ -66,28 +69,28 @@ def lance_eficas_ssIhm(code=None,fichier=None,ssCode=None,version=None):
if fichier==None : fichier=options.comm[0]
if code == None : code=options.code
- from qtEficas import Appli
+ from .qtEficas import Appli
Eficas=Appli(code=code,ssCode=ssCode,ssIhm=True)
- from ssIhm import QWParentSSIhm
+ from .ssIhm import QWParentSSIhm
parent=QWParentSSIhm(code,Eficas,version)
- import readercata
+ from . import readercata
if not hasattr ( Eficas, 'readercata'):
monreadercata = readercata.READERCATA( parent, Eficas )
Eficas.readercata=monreadercata
- from editor import JDCEditor
+ from .editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
return monEditeur
def lance_eficas_ssIhm_cherche_Groupes(code=None,fichier=None,ssCode=None,version=None):
monEditeur=lance_eficas_ssIhm(code,fichier,ssCode,version)
- print (monEditeur.cherche_Groupes())
+ print((monEditeur.cherche_Groupes()))
def lance_eficas_ssIhm_cherche_cr(code=None,fichier=None,ssCode=None,version=None):
monEditeur=lance_eficas_ssIhm(code,fichier,ssCode,version)
- print (monEditeur.jdc.cr)
+ print((monEditeur.jdc.cr))
def lance_eficas_ssIhm_reecrit(code=None,fichier=None,ssCode=None,version=None,ou=None,cr=False):
#print 'lance_eficas_ssIhm_reecrit', fichier
@@ -104,7 +107,7 @@ def lance_eficas_ssIhm_reecrit(code=None,fichier=None,ssCode=None,version=None,o
fileCr=os.path.join(ou,f2)
monEditeur.saveFileAs(fileName=fileName)
if cr:
- f = open(fileCr, 'wb')
+ f = open(fileCr, 'w')
f.write(str(monEditeur.jdc.report()))
f.close()
@@ -116,19 +119,19 @@ def lance_eficas_param(code='Adao',fichier=None,version='V0',macro='ASSIMILATION
from Editeur import session
options=session.parse(sys.argv)
- from qtEficas import Appli
+ from .qtEficas import Appli
app = QApplication(sys.argv)
Eficas=Appli(code=code,ssCode=None)
- from ssIhm import QWParentSSIhm
+ from .ssIhm import QWParentSSIhm
parent=QWParentSSIhm(code,Eficas,version)
- import readercata
+ from . import readercata
if not hasattr ( Eficas, 'readercata'):
monreadercata = readercata.READERCATA( parent, Eficas )
Eficas.readercata=monreadercata
- from editor import JDCEditor
+ from .editor import JDCEditor
monEditeur=JDCEditor(Eficas,fichier)
texte=loadJDC(fichier)
parameters=getJdcParameters(texte,macro)
diff --git a/InterfaceQT4/feuille.py b/InterfaceQT4/feuille.py
index e8dfbe65..33f160e2 100644
--- a/InterfaceQT4/feuille.py
+++ b/InterfaceQT4/feuille.py
@@ -18,23 +18,23 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except :
+ pass
+import types,os
import traceback
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QToolButton ,QWidget
- from PyQt5.QtGui import QFont, QFontMetrics
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
-from Extensions.i18n import tr
+from PyQt5.QtWidgets import QToolButton ,QWidget
+from PyQt5.QtGui import QFont, QFontMetrics
+from PyQt5.QtCore import Qt
+from Extensions.i18n import tr
-from gereIcones import ContientIcones
-from gereIcones import FacultatifOuOptionnel
-from qtSaisie import SaisieValeur
+from .gereIcones import ContientIcones
+from .gereIcones import FacultatifOuOptionnel
+from .qtSaisie import SaisieValeur
nomMax=250
# ---------------------------------------------------------------------- #
@@ -78,7 +78,7 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
self.setIconesGenerales()
self.setCommentaire()
self.setZoneInfo()
-
+
def setNom(self):
self.debutToolTip=""
@@ -96,6 +96,13 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
self.setMinimumHeight(50)
self.resize(self.width(),200)
+ #def mousePressEvent(self, event):
+ #print 'mousePressEvent'
+ #import inspect
+ #print (inspect.getmro(self.__class__))
+ #self.__class__.mousePressEvent(self, event)
+
+
def setValeurs(self):
# print "passe dans setValeurs pour ", self.objSimp.nom
@@ -114,7 +121,7 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
'I' : 'entiers',
'C' : 'complexes'}
type = mc.type[0]
- if not d_aides.has_key(type) :
+ if not type in d_aides :
if mc.min == mc.max:
commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")+'\n'
else :
@@ -143,9 +150,9 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
#if self.node.item.definition.validators : c+=self.node.item.definition.validators.aide()
self.aide=c
if self.objSimp.get_fr() != None and self.objSimp.get_fr() != "":
- c2 = '
'+c+unicode(self.objSimp.get_fr())+"
"
+ c2 = ''+c+self.objSimp.get_fr().decode('latin-1','replace')+"
"
self.label.setToolTip(c2)
- self.aide=unicode(self.objSimp.get_fr())+" "+c
+ self.aide=self.objSimp.get_fr().decode('latin-1','ignore')+" "+c
else :
c+=self.finCommentaire()
if c != "" and c != None :
@@ -178,8 +185,11 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
if mc.min == mc.max: commentaire=tr("Entrez ")+" "+str(mc.min)+" "
else : commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)
- if type(mctype) == types.ClassType: ctype = getattr(mctype, 'help_message', tr("Type de base inconnu"))
- else: ctype = d_aides.get(mctype, tr("Type de base inconnu"))
+ try :
+ if issubclass(mctype,object) : ctype = getattr(mctype, 'help_message', tr("Type de base inconnu"))
+ else : ctype = d_aides.get(mctype, tr("Type de base inconnu"))
+ except:
+ ctype = d_aides.get(mctype, tr("Type de base inconnu"))
if ctype == tr("Type de base inconnu") and "Tuple" in str(mctype): ctype=str(mctype)
commentaire+=ctype
@@ -193,7 +203,7 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
pass
def reaffiche(self):
- #print "dans reaffiche de feuille", self.nom
+
if self.editor.jdc.aReafficher==True :
self.parentQt.reaffiche()
@@ -224,7 +234,8 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
try :
self.setValeursApresBouton()
except :
- self.editor.fenetreCentraleAffichee.afficheSuivant(self.AAfficher)
+ pass
+ self.editor.fenetreCentraleAffichee.afficheSuivant(self.AAfficher)
else :
if hasattr(self, 'AAfficher'): self.AAfficher.setFocus(7)
@@ -232,7 +243,6 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
self.parentQt.reaffiche()
def rendVisible(self):
- #print "jjjjjjjjjjjjjjjjjjjjj"
pass
#def enterEvent(self,event):
@@ -240,8 +250,7 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel):
# QWidget.enterEvent(self,event)
def traiteClicSurLabel(self,texte):
- #print self.aide
- aide=self.aide+"\n"+self.aideALaSaisie()
+ aide=self.aide.encode('latin-1', 'ignore').decode('latin-1')+"\n"+self.aideALaSaisie().encode('latin-1', 'ignore').decode('latin-1')
self.editor.affiche_commentaire(aide)
def formate(self,t):
diff --git a/InterfaceQT4/gereIcones.py b/InterfaceQT4/gereIcones.py
index 20f37668..e5f2bf2f 100644
--- a/InterfaceQT4/gereIcones.py
+++ b/InterfaceQT4/gereIcones.py
@@ -18,24 +18,27 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os,re,sys
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
+import types,os,re,sys
import traceback
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QMessageBox, QFileDialog , QMenu, QPushButton
- from PyQt5.QtGui import QIcon
- from PyQt5.QtCore import QFileInfo, Qt, QSize, QVariant
+import six
-else:
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QMessageBox, QFileDialog , QMenu, QPushButton
+from PyQt5.QtGui import QIcon
+from PyQt5.QtCore import QFileInfo, Qt, QSize, QVariant
from Extensions.i18n import tr
listeSuffixe=('bmp','png','jpg' ,'txt','med')
-class FacultatifOuOptionnel:
+class FacultatifOuOptionnel(object):
def setReglesEtAide(self):
listeRegles=()
@@ -48,22 +51,20 @@ class FacultatifOuOptionnel:
else :
icon3=QIcon(self.repIcon+"/lettreRblanc30.png")
self.RBRegle.setIcon(icon3)
- if monEnvQT5 :self.RBRegle.clicked.connect(self.viewRegles)
- else : self.connect( self.RBRegle,SIGNAL("clicked()"),self.viewRegles)
+ self.RBRegle.clicked.connect(self.viewRegles)
cle_doc=None
if not hasattr(self,"RBInfo"):return
icon=QIcon(self.repIcon+"/point-interrogation30.png")
self.RBInfo.setIcon(icon)
- from monWidgetCommande import MonWidgetCommande
+ from .monWidgetCommande import MonWidgetCommande
if isinstance(self,MonWidgetCommande) and self.editor.code =="MAP":
self.cle_doc = self.chercheDocMAP()
else :
self.cle_doc = self.node.item.get_docu()
if self.cle_doc == None : self.RBInfo.close()
- elif monEnvQT5 : self.RBInfo.clicked.connect (self.viewDoc)
- else : self.connect (self.RBInfo,SIGNAL("clicked()"),self.viewDoc)
+ else : self.RBInfo.clicked.connect (self.viewDoc)
def chercheDocMAP(self):
@@ -71,7 +72,7 @@ class FacultatifOuOptionnel:
clef=self.editor.CONFIGURATION.adresse+"/"
except :
return None
- for k in self.editor.readercata.cata[0].JdC.dict_groupes.keys():
+ for k in self.editor.readercata.cata[0].JdC.dict_groupes:
if self.obj.nom in self.editor.readercata.cata[0].JdC.dict_groupes[k]:
clef+=k
break
@@ -100,8 +101,7 @@ class FacultatifOuOptionnel:
return
icon=QIcon(self.repIcon+"/deleteRond.png")
self.RBPoubelle.setIcon(icon)
- if monEnvQT5 : self.RBPoubelle.clicked.connect(self.aDetruire)
- else : self.connect(self.RBPoubelle,SIGNAL("clicked()"),self.aDetruire)
+ self.RBPoubelle.clicked.connect(self.aDetruire)
def setIconesSalome(self):
if not (hasattr(self,"RBSalome")): return
@@ -115,8 +115,7 @@ class FacultatifOuOptionnel:
if enable_salome_selection:
icon=QIcon(self.repIcon+"/flecheSalome.png")
self.RBSalome.setIcon(icon)
- if monEnvQT5 : self.RBSalome.pressed.connect(self.BSalomePressed)
- else : self.connect(self.RBSalome,SIGNAL("pressed()"),self.BSalomePressed)
+ self.RBSalome.pressed.connect(self.BSalomePressed)
#PNPN --> Telemac A revoir surement
# cela ou le catalogue grpma ou salomeEntry
@@ -125,8 +124,7 @@ class FacultatifOuOptionnel:
else :
icon1=QIcon(self.repIcon+"/eye.png")
self.RBSalomeVue.setIcon(icon1)
- if monEnvQT5 : self.RBSalomeVue.clicked.connect(self.BView2DPressed)
- else : self.connect(self.RBSalomeVue,SIGNAL("clicked()"),self.BView2DPressed)
+ self.RBSalomeVue.clicked.connect(self.BView2DPressed)
else:
self.RBSalome.close()
self.RBSalomeVue.close()
@@ -138,14 +136,11 @@ class FacultatifOuOptionnel:
mctype = mc.type[0]
if mctype == "Repertoire":
self.BRepertoire=self.BFichier
- if monEnvQT5 : self.BRepertoire.clicked.connect(self.BRepertoirePressed)
- else : self.connect(self.BRepertoire,SIGNAL("clicked()"),self.BRepertoirePressed)
+ self.BRepertoire.clicked.connect(self.BRepertoirePressed)
self.BVisuFichier.close()
else :
- if monEnvQT5 : self.BFichier.clicked.connect(self.BFichierPressed)
- else : self.connect(self.BFichier,SIGNAL("clicked()"),self.BFichierPressed)
- if monEnvQT5 : self.BVisuFichier.clicked.connect(self.BFichierVisu)
- else : self.connect(self.BVisuFichier,SIGNAL("clicked()"),self.BFichierVisu)
+ self.BFichier.clicked.connect(self.BFichierPressed)
+ self.BVisuFichier.clicked.connect(self.BFichierVisu)
@@ -172,9 +167,9 @@ class FacultatifOuOptionnel:
def setRun(self):
if hasattr(self.editor.appliEficas, 'mesScripts') :
- if self.editor.code in self.editor.appliEficas.mesScripts.keys() :
+ if self.editor.code in self.editor.appliEficas.mesScripts :
self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
- if self.obj.nom in self.dict_commandes_mesScripts.keys() :
+ if self.obj.nom in self.dict_commandes_mesScripts :
self.ajoutScript()
icon=QIcon(self.repIcon+"/roue.png")
if hasattr(self,"RBRun"):self.RBRun.setIcon(icon)
@@ -214,7 +209,7 @@ class FacultatifOuOptionnel:
if not hasattr(self,'CBScripts') : return # Cas des Widgets Plies
self.dictCommandes={}
listeCommandes=self.dict_commandes_mesScripts[self.obj.nom]
- if type(listeCommandes) != types.TupleType: listeCommandes=(listeCommandes,)
+ if type(listeCommandes) != tuple: listeCommandes=(listeCommandes,)
i=0
for commande in listeCommandes :
conditionSalome=commande[3]
@@ -222,12 +217,7 @@ class FacultatifOuOptionnel:
self.CBScripts.addItem(commande[1])
self.dictCommandes[commande[1]]=i
i=i+1
- if monEnvQT5:
- #self.CBScripts.currentIndexChanged.connect(self.choixSaisi)
- self.CBScripts.activated.connect(self.choixSaisi)
- else :
- #self.connect(self.CBScripts,SIGNAL("currentIndexChanged(int)"),self.choixSaisi)
- self.connect(self.CBScripts,SIGNAL("activated(int)"),self.choixSaisi)
+ self.CBScripts.activated.connect(self.choixSaisi)
def choixSaisi(self):
fction=str(self.CBScripts.currentText())
@@ -235,12 +225,12 @@ class FacultatifOuOptionnel:
self.node.AppelleFonction(numero,nodeTraite=self.node)
#self.reaffiche()
-class ContientIcones:
+class ContientIcones(object):
def BFichierVisu(self):
fichier=self.lineEditVal.text()
if fichier == None or str(fichier)=="" : return
- from monViewTexte import ViewText
+ from .monViewTexte import ViewText
try :
if sys.platform[0:5]=="linux" :
cmd="xdg-open "+ str(fichier)
@@ -275,15 +265,15 @@ class ContientIcones:
self.appliEficas.CONFIGURATION.savedir,
filters)
else:
- print filters
+ print(filters)
fichier = QFileDialog.getOpenFileName(self.appliEficas,
tr('Ouvrir Fichier'),
self.appliEficas.CONFIGURATION.savedir,
filters)
- if monEnvQT5 : fichier=fichier[0]
+ fichier=fichier[0]
if not(fichier == ""):
- ulfile = os.path.abspath(unicode(fichier))
+ ulfile = os.path.abspath(six.text_type(fichier))
self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
self.lineEditVal.setText(fichier)
self.editor.affiche_commentaire(tr("Fichier selectionne"))
@@ -297,8 +287,7 @@ class ContientIcones:
self.BSelectInFile.setObjectName("BSelectInFile")
self.gridLayout.addWidget(self.BSelectInFile,1,1,1,1)
self.BSelectInFile.setText(tr("Selection"))
- if monEnvQT5 : self.BSelectInFile.clicked.connect(self.BSelectInFilePressed)
- else : self.connect(self.BSelectInFile,SIGNAL("clicked()"),self.BSelectInFilePressed)
+ self.BSelectInFile.clicked.connect(self.BSelectInFilePressed)
except :
pass
else :
@@ -312,9 +301,8 @@ class ContientIcones:
directory = self.appliEficas.CONFIGURATION.savedir,
options = QFileDialog.ShowDirsOnly)
- #if monEnvQT5 : directory=directory[0]
if not (directory == "") :
- absdir = os.path.abspath(unicode(directory))
+ absdir = os.path.abspath(six.text_type(directory))
self.appliEficas.CONFIGURATION.savedir = os.path.dirname(absdir)
self.lineEditVal.setText(directory)
self.LEValeurPressed()
@@ -343,7 +331,7 @@ class ContientIcones:
mc = self.node.item.get_definition()
- if (isinstance(mc.type,types.TupleType) and len(mc.type) > 1 and "(*.med)" in mc.type[1] ):
+ if (isinstance(mc.type,tuple) and len(mc.type) > 1 and "(*.med)" in mc.type[1] ):
selection, commentaire = self.appliEficas.selectMeshFile(editor=self.editor)
#print selection, commentaire
if commentaire != "" :
@@ -356,7 +344,7 @@ class ContientIcones:
return
from Accas import SalomeEntry
- if isinstance(kwType, types.ClassType) and issubclass(kwType, SalomeEntry):
+ if isinstance(kwType, type) and issubclass(kwType, SalomeEntry):
selection, commentaire = self.appliEficas.selectEntryFromSalome(kwType,editor=self.editor)
if commentaire !="" :
diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py
index 6dd0ae1e..418fa27d 100644
--- a/InterfaceQT4/gereListe.py
+++ b/InterfaceQT4/gereListe.py
@@ -18,20 +18,26 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except : pass
+
+import types,os
import traceback
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QLineEdit, QLabel, QFileDialog
- from PyQt5.QtCore import QEvent, Qt
- from PyQt5.QtGui import QIcon, QPalette
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+
+import six
+from six.moves import range
+from PyQt5.QtWidgets import QLineEdit, QLabel, QFileDialog
+from PyQt5.QtCore import QEvent, Qt
+from PyQt5.QtGui import QIcon, QPalette
from Extensions.i18n import tr
-from monViewTexte import ViewText
+from InterfaceQT4.monViewTexte import ViewText
# ---------------------- #
@@ -98,12 +104,11 @@ class MonLabelListeClic(QLabel):
# ------------- #
-class GereListe:
+class GereListe(object):
# ------------- #
def __init__(self):
- if monEnvQT5 :self.connecterSignaux()
- else : self.connecterSignauxQT4()
+ self.connecterSignaux()
def connecterSignauxQT4(self):
if hasattr(self,'RBHaut'):
@@ -259,13 +264,13 @@ class GereListe:
tr("Fichier de donnees"),
init,
tr('Tous les Fichiers (*)',))
- if monEnvQT5 : fn=fn[0]
+ fn=fn[0]
if fn == None : return
if fn == "" : return
- ulfile = os.path.abspath(unicode(fn))
+ ulfile = os.path.abspath(six.text_type(fn))
self.editor.CONFIGURATION.savedir=os.path.split(ulfile)[0]
- from monSelectVal import MonSelectVal
+ from .monSelectVal import MonSelectVal
MonSelectVal(file=fn,parent=self).show()
def noircirResultatFiltre(self):
@@ -281,7 +286,7 @@ class GereListe:
# ----------- #
-class GerePlie:
+class GerePlie(object):
# ----------- #
def gereIconePlier(self):
@@ -296,8 +301,7 @@ class GerePlie:
fichier=os.path.join(repIcon, 'minusnode.png')
icon = QIcon(fichier)
self.BFermeListe.setIcon(icon)
- if monEnvQT5 : self.BFermeListe.clicked.connect( self.selectWidgetPlie)
- else : self.connect(self.BFermeListe,SIGNAL("clicked()"), self.selectWidgetPlie)
+ self.BFermeListe.clicked.connect( self.selectWidgetPlie)
def selectWidgetPlie(self):
self.editor.listeDesListesOuvertes.remove(self.node.item)
diff --git a/InterfaceQT4/gereRegles.py b/InterfaceQT4/gereRegles.py
index 0ef22692..0e303918 100644
--- a/InterfaceQT4/gereRegles.py
+++ b/InterfaceQT4/gereRegles.py
@@ -18,17 +18,18 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtCore import Qt
-else:
- from PyQt4.QtCore import *
-from monViewRegles import ViewRegles
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
-class GereRegles :
+from PyQt5.QtCore import Qt
+from .monViewRegles import ViewRegles
+
+class GereRegles(object) :
def AppelleBuildLBRegles(self):
- from browser import JDCTree
+ from .browser import JDCTree
if isinstance(self,JDCTree):
self.AppelleBuildLBReglesForJdC()
else :
diff --git a/InterfaceQT4/gereTraduction.py b/InterfaceQT4/gereTraduction.py
index 34011519..bb6a481d 100644
--- a/InterfaceQT4/gereTraduction.py
+++ b/InterfaceQT4/gereTraduction.py
@@ -16,12 +16,12 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QFileDialog, QApplication
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
+from PyQt5.QtWidgets import QFileDialog, QApplication
import os
from Extensions.i18n import tr
@@ -45,7 +45,7 @@ def traduction(directPath,editor,version):
tr('Fichiers JDC (*.comm);;''Tous les Fichiers (*)'))
- if monEnvQT5 : fn=fn[0]
+ fn=fn[0]
FichieraTraduire=str(fn)
if (FichieraTraduire == "" or FichieraTraduire == () ) : return
i=FichieraTraduire.rfind(".")
@@ -65,7 +65,7 @@ def traduction(directPath,editor,version):
QApplication.setOverrideCursor(QCursor(Qt.ArrowCursor))
Entete=tr("Fichier Traduit : %s\n\n",str(FichierTraduit))
- if os.stat(log)[6] != 0L :
+ if os.stat(log)[6] != 0 :
f=open(log)
texte= f.read()
f.close()
@@ -78,7 +78,7 @@ def traduction(directPath,editor,version):
except :
pass
- from monVisu import DVisu
+ from .monVisu import DVisu
titre = "conversion de "+ FichieraTraduire
monVisuDialg=DVisu(parent=editor.appliEficas,fl=0)
monVisuDialg.setWindowTitle(titre)
diff --git a/InterfaceQT4/groupe.py b/InterfaceQT4/groupe.py
index d70b5943..b1d0950a 100644
--- a/InterfaceQT4/groupe.py
+++ b/InterfaceQT4/groupe.py
@@ -19,17 +19,14 @@
# Modules Python
# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QWidget
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
-from Extensions.i18n import tr
+from __future__ import absolute_import
+from __future__ import print_function
+from PyQt5.QtWidgets import QWidget
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
-from gereIcones import FacultatifOuOptionnel
+
+from .gereIcones import FacultatifOuOptionnel
import Accas
@@ -62,12 +59,9 @@ class Groupe(QWidget,FacultatifOuOptionnel):
self.afficheMots()
self.listeMCAAjouter=[]
self.dictMCVenantDesBlocs={}
- if hasattr(self,'RBDeplie') and not monEnvQT5 : self.connect(self.RBDeplie,SIGNAL("clicked()"), self.Deplie)
- if hasattr(self,'RBPlie') and not monEnvQT5: self.connect(self.RBPlie,SIGNAL("clicked()"), self.Plie)
- if hasattr(self,'RBDeplie') and monEnvQT5: self.RBDeplie.clicked.connect(self.Deplie)
- if hasattr(self,'RBPlie') and monEnvQT5: self.RBPlie.clicked.connect( self.Plie)
+ if hasattr(self,'RBDeplie') : self.RBDeplie.clicked.connect(self.Deplie)
+ if hasattr(self,'RBPlie') : self.RBPlie.clicked.connect( self.Plie)
self.setAcceptDrops(True)
- #self.donneFocus()
def donneFocus(self):
for fenetre in self.listeFocus:
@@ -117,14 +111,14 @@ class Groupe(QWidget,FacultatifOuOptionnel):
liste=self.liste_mc
for MC in self.liste_mc : self.dictMCVenantDesBlocs[MC]=self
while i < self.commandesLayout.count():
- from monWidgetBloc import MonWidgetBloc
+ from .monWidgetBloc import MonWidgetBloc
widget=self.commandesLayout.itemAt(i).widget()
i=i+1
if not(isinstance(widget,MonWidgetBloc)) : continue
widget.calculOptionnel()
listeW=widget.ajouteMCOptionnelDesBlocs()
- for MC in widget.dictMCVenantDesBlocs.keys():
- if MC in self.dictMCVenantDesBlocs.keys(): print "Pb Sur les MC"
+ for MC in widget.dictMCVenantDesBlocs:
+ if MC in self.dictMCVenantDesBlocs: print ("Pb Sur les MC" )
else : self.dictMCVenantDesBlocs[MC]=widget.dictMCVenantDesBlocs[MC]
liste=liste+listeW
return liste
@@ -159,7 +153,7 @@ class Groupe(QWidget,FacultatifOuOptionnel):
listeNom=texteListeNom.split("+")[1:]
firstNode=None
for nom in listeNom:
- if nom not in self.dictMCVenantDesBlocs.keys():
+ if nom not in self.dictMCVenantDesBlocs:
#print "bizarre, bizarre"
self.editor.init_modif()
nouveau=self.node.append_child(nom)
diff --git a/InterfaceQT4/monBoutonValide.py b/InterfaceQT4/monBoutonValide.py
index 50418434..146b2dfd 100644
--- a/InterfaceQT4/monBoutonValide.py
+++ b/InterfaceQT4/monBoutonValide.py
@@ -19,13 +19,14 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
import re
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QToolButton, QToolTip
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import six
+
+import os
+
+
+from PyQt5.QtWidgets import QToolButton, QToolTip
from Extensions.i18n import tr
class MonBoutonValide(QToolButton) :
@@ -38,7 +39,7 @@ class MonBoutonValide(QToolButton) :
def mouseDoubleClickEvent(self, event):
#print "dans mouseDoubleClickEvent"
- strRapport=unicode(self.parent.node.item.object.report())
+ strRapport=six.text_type(self.parent.node.item.object.report())
self.parent.editor._viewText(strRapport, "JDC_RAPPORT")
def mousePressEvent(self, event):
@@ -48,7 +49,7 @@ class MonBoutonValide(QToolButton) :
QToolTip.showText(event.globalPos(),myToolTip )
else :
t=""
- texte=unicode(self.parent.node.item.object.report())
+ texte=six.text_type(self.parent.node.item.object.report())
deb=1
for l in texte.split('\n')[2:-2]:
if re.match('^[\t !]*$',l) : continue
diff --git a/InterfaceQT4/monChoixCata.py b/InterfaceQT4/monChoixCata.py
index c0c89e44..76b7149a 100644
--- a/InterfaceQT4/monChoixCata.py
+++ b/InterfaceQT4/monChoixCata.py
@@ -20,12 +20,9 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
from desChoixCata import Ui_DChoixCata
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QDialog
-else:
- from PyQt4.QtGui import *
+from PyQt5.QtWidgets import QDialog
from Extensions.i18n import tr
# Import des panels
diff --git a/InterfaceQT4/monChoixCode.py b/InterfaceQT4/monChoixCode.py
index e5313d62..c78a9d53 100644
--- a/InterfaceQT4/monChoixCode.py
+++ b/InterfaceQT4/monChoixCode.py
@@ -20,25 +20,25 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
import os,sys,re
from desChoixCode import Ui_ChoixCode
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QDialog, QRadioButton, QGroupBox, QButtonGroup
- from PyQt5.QtGui import QPalette
- from PyQt5.QtCore import QProcess, QFileInfo, Qt, QSize
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QDialog, QRadioButton, QGroupBox, QButtonGroup
+from PyQt5.QtGui import QPalette
+from PyQt5.QtCore import QProcess, QFileInfo, Qt, QSize
# Import des panels
class MonChoixCode(Ui_ChoixCode,QDialog):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe definissant le panel associe aux mots-cles qui demandent
+ a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discretes
"""
def __init__(self, parentAppli=None):
QDialog.__init__(self,parentAppli)
@@ -47,19 +47,15 @@ class MonChoixCode(Ui_ChoixCode,QDialog):
self.parentAppli=parentAppli
self.verifieInstall()
self.code=None
- if monEnvQT5:
- self.pB_OK.clicked.connect(self.choisitCode)
- self.pB_cancel.clicked.connect(self.sortie)
- else :
- self.connect(self.pB_OK,SIGNAL("clicked()"),self.choisitCode)
- self.connect(self.pB_cancel,SIGNAL("clicked()"),self.sortie)
+ self.pB_OK.clicked.connect(self.choisitCode)
+ self.pB_cancel.clicked.connect(self.sortie)
def sortie(self):
QDialog.reject(self)
def verifieInstall(self):
self.groupCodes=QButtonGroup(self.groupBox)
- vars=os.environ.items()
+ vars=list(os.environ.items())
listeCode=('Aster','Adao','Carmel3D','CarmelCND','CF','MAP','MT','PSEN','PSEN_N1','Telemac','ZCracks',)
for code in listeCode:
dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
diff --git a/InterfaceQT4/monChoixCommande.py b/InterfaceQT4/monChoixCommande.py
index 6ccd4957..ce11c7d5 100644
--- a/InterfaceQT4/monChoixCommande.py
+++ b/InterfaceQT4/monChoixCommande.py
@@ -19,15 +19,15 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
from desChoixCommandes import Ui_ChoixCommandes
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QWidget, QAction ,QButtonGroup, QRadioButton, QLabel
- from PyQt5.QtGui import QIcon
- from PyQt5.QtCore import QSize
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QWidget, QAction ,QButtonGroup, QRadioButton, QLabel , QPushButton, QSpacerItem, QSizePolicy, QGridLayout
+from PyQt5.QtGui import QIcon, QPixmap
+from PyQt5.QtCore import QSize, QRect
from Extensions.i18n import tr
import os
@@ -62,27 +62,19 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
self.editor.appliEficas.setWindowTitle(nouveauTitre)
- if monEnvQT5 :
- self.RBalpha.clicked.connect(self.afficheAlpha)
- self.RBGroupe.clicked.connect(self.afficheGroupe)
- self.RBOrdre.clicked.connect(self.afficheOrdre)
- self.RBClear.clicked.connect(self.clearFiltre)
- self.RBCasse.toggled.connect(self.ajouteRadioButtons)
- self.LEFiltre.returnPressed.connect(self.ajouteRadioButtons)
- self.LEFiltre.textChanged.connect(self.ajouteRadioButtons)
- else :
- self.connect(self.RBalpha,SIGNAL("clicked()"),self.afficheAlpha)
- self.connect(self.RBGroupe,SIGNAL("clicked()"),self.afficheGroupe)
- self.connect(self.RBOrdre,SIGNAL("clicked()"),self.afficheOrdre)
- self.connect(self.RBClear,SIGNAL("clicked()"),self.clearFiltre)
- self.connect(self.RBCasse,SIGNAL("toggled(bool)"),self.ajouteRadioButtons)
- self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.ajouteRadioButtons)
+ self.RBalpha.clicked.connect(self.afficheAlpha)
+ self.RBGroupe.clicked.connect(self.afficheGroupe)
+ self.RBOrdre.clicked.connect(self.afficheOrdre)
+ self.RBClear.clicked.connect(self.clearFiltre)
+ self.RBCasse.toggled.connect(self.ajouteRadioButtons)
+ self.LEFiltre.returnPressed.connect(self.ajouteRadioButtons)
+ self.LEFiltre.textChanged.connect(self.ajouteRadioButtons)
+
if self.node.tree.item.get_regles() == () :
self.RBRegle.close()
self.labelRegle.close()
else :
- if monEnvQT5 : self.RBRegle.clicked.connect(self.afficheRegle)
- else : self.connect(self.RBRegle,SIGNAL("clicked()"),self.afficheRegle)
+ self.RBRegle.clicked.connect(self.afficheRegle)
if self.editor.Ordre_Des_Commandes == None : self.RBOrdre.close()
@@ -109,7 +101,9 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
self.RBOrdre.setChecked(True);
self.afficheOrdre()
if self.editor.closeFrameRechercheCommande == True : self.frameAffichage.close()
- self.editor.restoreSplitterSizes(2)
+
+ if self.editor.widgetTree != None : self.editor.restoreSplitterSizes(2)
+ else: self.editor.restoreSplitterSizes(3)
def afficheRegle(self):
self.node.tree.AppelleBuildLBRegles()
@@ -132,9 +126,10 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
self.affiche_ordre=1
self.ajouteRadioButtons()
- def mouseDoubleClickEvent(self,event):
+ def insereNoeudApresClick(self,event):
#print self.editor.Classement_Commandes_Ds_Arbre
#if self.editor.Classement_Commandes_Ds_Arbre!= () : self.chercheOu()
+ #print ('dans insereNoeudApresClick')
nodeCourrant=self.node.tree.currentItem()
if nodeCourrant==None: nodeCourrant=self.node.tree.racine
if self.name != None :
@@ -156,14 +151,14 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
self.node.setSelected(False)
nouveau.setSelected(True)
self.node.tree.setCurrentItem(nouveau)
- event.accept()
+ if event != None : event.accept()
def creeListeCommande(self,filtre):
listeGroupes,dictGroupes=self.jdc.get_groups()
sensibleALaCasse=self.RBCasse.isChecked()
- if "CACHE" in dictGroupes.keys():
+ if "CACHE" in dictGroupes:
aExclure=dictGroupes["CACHE"]
else:
aExclure=()
@@ -176,6 +171,9 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
return listeACreer
def ajouteRadioButtons(self):
+ if self.editor.nombreDeBoutonParLigne != 0 :
+ self.ajoutePushButtons()
+ return
#print 'ds ajouteRadioButtons'
filtre=str(self.LEFiltre.text())
if filtre==str("") : filtre=None
@@ -196,21 +194,15 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
self.dicoCmd[tr(cmd)]=cmd
rbcmd=(QRadioButton(tr(cmd)))
self.buttonGroup.addButton(rbcmd)
+ rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
self.commandesLayout.addWidget(rbcmd)
- rbcmd.mouseDoubleClickEvent=self.mouseDoubleClickEvent
- if monEnvQT5:
- self.buttonGroup.buttonClicked.connect(self.rbClique)
- else :
- self.connect(self.buttonGroup, SIGNAL("buttonClicked(QAbstractButton*)"),self.rbClique)
+ self.buttonGroup.buttonClicked.connect(self.rbClique)
elif self.affiche_groupe==1 :
listeGroupes,dictGroupes=self.jdc.get_groups()
for grp in listeGroupes:
if grp == "CACHE" : continue
label=QLabel(self)
- if monEnvQT5 :
- text=tr('Groupe : '+tr(grp)+'
')
- else :
- text=QString.fromUtf8('Groupe : '+tr(grp)+'
')
+ text=tr('Groupe : '+tr(grp)+'
')
label.setText(text)
self.listeWidget.append(label)
aAjouter=1
@@ -225,11 +217,8 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
rbcmd=(QRadioButton(tr(cmd)))
self.buttonGroup.addButton(rbcmd)
self.commandesLayout.addWidget(rbcmd)
- rbcmd.mouseDoubleClickEvent=self.mouseDoubleClickEvent
- if monEnvQT5:
- self.buttonGroup.buttonClicked.connect(self.rbClique)
- else :
- self.connect(self.buttonGroup, SIGNAL("buttonClicked(QAbstractButton*)"),self.rbClique)
+ rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+ self.buttonGroup.buttonClicked.connect(self.rbClique)
label2=QLabel(self)
label2.setText(" ")
self.listeWidget.append(label2)
@@ -247,19 +236,66 @@ class MonChoixCommande(Ui_ChoixCommandes,QWidget):
rbcmd=(QRadioButton(tr(cmd)))
self.buttonGroup.addButton(rbcmd)
self.commandesLayout.addWidget(rbcmd)
- rbcmd.mouseDoubleClickEvent=self.mouseDoubleClickEvent
- if monEnvQT5:
- self.buttonGroup.buttonClicked.connect(self.rbClique)
- else :
- self.connect(self.buttonGroup, SIGNAL("buttonClicked(QAbstractButton*)"),self.rbClique)
+ rbcmd.mouseDoubleClickEvent=self.insereNoeudApresClick
+ self.buttonGroup.buttonClicked.connect(self.rbClique)
+ def ajoutePushButtons(self):
+ if hasattr(self,'buttonGroup') :
+ for b in self.buttonGroup.buttons():
+ self.buttonGroup.removeButton(b)
+ b.setParent(None)
+ b.close()
+ else :
+ self.buttonGroup = QButtonGroup()
+ self.buttonGroup.buttonClicked.connect(self.rbCliqueEtInsere)
+ for w in self.listeWidget :
+ w.setParent(None)
+ w.close()
+ self.listeWidget=[]
+
+ if not hasattr(self,'maGrilleBouton') :
+ #self.commandesLayout.close()
+ self.maGrilleBouton=QGridLayout()
+ self.maGrilleBouton.setSpacing(20)
+ self.verticalLayout.addLayout(self.maGrilleBouton)
+ col=-1
+ ligne = 0
+ if self.affiche_alpha==1 :
+ liste=self.creeListeCommande(None)
+ for cmd in liste :
+ col=col+1
+ if col == self.editor.nombreDeBoutonParLigne :
+ col=0
+ ligne=ligne+1
+ self.dicoCmd[tr(cmd)]=cmd
+ rbcmd=QPushButton(tr(cmd))
+ rbcmd.setGeometry(QRect(40, 20, 211, 71))
+ rbcmd.setMaximumSize(QSize(250, 81))
+ rbcmd.setStyleSheet("background-color : rgb(168, 227, 142);\n"
+"/*border-style : outset;*/\n"
+"border-radius : 20px;\n"
+"border-width : 30 px;\n"
+"border-color : beige;\n"
+"text-align : left")
+ icon = QIcon()
+ icon.addPixmap(QPixmap("../monCode/images/essaiAster.png"), QIcon.Normal, QIcon.Off)
+ rbcmd.setIcon(icon)
+ rbcmd.setIconSize(QSize(48, 48))
+
+ self.buttonGroup.addButton(rbcmd)
+ self.maGrilleBouton.addWidget(rbcmd,ligne,col)
def clearFiltre(self):
self.LEFiltre.setText("")
self.ajouteRadioButtons()
+ def rbCliqueEtInsere(self,id):
+ self.rbClique(id)
+ self.insereNoeudApresClick(None)
+
def rbClique(self,id):
+ #print ('ds rbClique')
self.name=self.dicoCmd[str(id.text())]
definitionEtape=getattr(self.jdc.cata[0],self.name)
commentaire=getattr(definitionEtape,self.jdc.lang)
diff --git a/InterfaceQT4/monChoixLangue.py b/InterfaceQT4/monChoixLangue.py
index 460dd3d2..5715a48b 100644
--- a/InterfaceQT4/monChoixLangue.py
+++ b/InterfaceQT4/monChoixLangue.py
@@ -20,25 +20,22 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
import os,sys,re
from desChoixLangue import Ui_ChoixLangue
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QDialog, QRadioButton, QGroupBox, QButtonGroup
- from PyQt5.QtGui import QPalette
- from PyQt5.QtCore import QProcess, QFileInfo, Qt, QSize
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+
+from PyQt5.QtWidgets import QDialog, QRadioButton, QGroupBox, QButtonGroup
+from PyQt5.QtGui import QPalette
+from PyQt5.QtCore import QProcess, QFileInfo, Qt, QSize
# Import des panels
class MonChoixLangue(Ui_ChoixLangue,QDialog):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
+ Classe definissant le panel associe aux mots-cles qui demandent
+ a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+ discretes
"""
def __init__(self, parentAppli=None):
QDialog.__init__(self,parentAppli)
@@ -47,8 +44,7 @@ class MonChoixLangue(Ui_ChoixLangue,QDialog):
self.parentAppli=parentAppli
self.installLangue()
self.code=None
- if monEnvQT5: self.pB_OK.clicked.connect(self.choisitLangue)
- else : self.connect(self.pB_OK,SIGNAL("clicked()"),self.choisitLangue)
+ self.pB_OK.clicked.connect(self.choisitLangue)
def installLangue(self):
diff --git a/InterfaceQT4/monFonctionPanel.py b/InterfaceQT4/monFonctionPanel.py
index 92364818..628d04a0 100644
--- a/InterfaceQT4/monFonctionPanel.py
+++ b/InterfaceQT4/monFonctionPanel.py
@@ -18,16 +18,19 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
-if monEnvQT5:
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+
+import types,os
+from six.moves import range
+from PyQt5.QtCore import Qt
# Modules Eficas
-from qtSaisie import SaisieValeur
+from .qtSaisie import SaisieValeur
from monPlusieursBasePanel import MonPlusieursBasePanel
from Extensions.i18n import tr
@@ -35,7 +38,7 @@ from Extensions.i18n import tr
# Import des panels
class MonFonctionPanel(MonPlusieursBasePanel):
-# Classe definissant le panel associe© aux mots-cles qui demandent
+# Classe definissant le panel associee aux mots-cles qui demandent
# a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
# discretes
def __init__(self,node, parent = None,name = None,fl = 0):
@@ -86,7 +89,7 @@ class MonFonctionPanel(MonPlusieursBasePanel):
self.LBValeurs.addItem(str_valeur)
else :
for valeur in self.DecoupeListeValeurs(listeValeurs):
- if type(valeur) == types.TupleType:
+ if type(valeur) == tuple:
TupleEnTexte="("
for val in valeur :
TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
@@ -149,7 +152,7 @@ class MonFonctionPanel(MonPlusieursBasePanel):
else :
listeATraiter=self.DecoupeListeValeurs(listeRetour)
for valeur in listeATraiter :
- if type(valeur) == types.TupleType:
+ if type(valeur) == tuple:
TupleEnTexte="("
for val in valeur :
TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
diff --git a/InterfaceQT4/monGroupeOptionnel.py b/InterfaceQT4/monGroupeOptionnel.py
index f07e9ba7..9cc037e4 100644
--- a/InterfaceQT4/monGroupeOptionnel.py
+++ b/InterfaceQT4/monGroupeOptionnel.py
@@ -19,13 +19,9 @@
# Modules Python
# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QCheckBox, QWidget, QLabel
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from __future__ import absolute_import
+from PyQt5.QtWidgets import QCheckBox, QWidget, QLabel
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
from desGroupeOptionnel import Ui_groupeOptionnel
@@ -44,7 +40,7 @@ class monButtonCustom(QCheckBox):
def mouseDoubleClickEvent(self, event):
#print "dans mouseDoubleClickEvent", self
- if self not in self.monOptionnel.dicoCb.keys() :
+ if self not in self.monOptionnel.dicoCb:
event.accept()
return
listeCheckedMC="+"+self.monOptionnel.dicoCb[self]
@@ -99,6 +95,7 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
def afficheTitre(self):
labeltext,fonte,couleur = self.parentMC.node.item.GetLabelText()
+ print (labeltext)
l=tr(labeltext)
li=[]
while len(l) > 25:
@@ -107,7 +104,7 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
li.append(l)
texte=""
for l in li : texte+=l+"\n"
- texte=texte[0:-2]
+ texte=texte[0:-1]
self.MCLabel.setText(texte)
def affiche(self,liste):
@@ -116,10 +113,7 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel):
liste.reverse()
for mot in liste :
cb = monButtonCustom(mot,self)
- if monEnvQT5:
- cb.clicked.connect(cb.ajoutAideMC)
- else :
- self.connect(cb,SIGNAL("clicked()"), cb.ajoutAideMC)
+ cb.clicked.connect(cb.ajoutAideMC)
self.MCOptionnelLayout.insertWidget(0,cb)
self.dicoCb[cb]=mot
self.scrollAreaCommandesOptionnelles.horizontalScrollBar().setSliderPosition(0)
diff --git a/InterfaceQT4/monLabelClic.py b/InterfaceQT4/monLabelClic.py
index 642520ac..d7fffab1 100644
--- a/InterfaceQT4/monLabelClic.py
+++ b/InterfaceQT4/monLabelClic.py
@@ -19,13 +19,14 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QLabel, QFrame
- from PyQt5.QtCore import QEvent
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from __future__ import print_function
+from __future__ import absolute_import
+
+import os
+
+
+from PyQt5.QtWidgets import QLabel, QFrame
+from PyQt5.QtCore import QEvent
from Extensions.i18n import tr
#from Extensions.i18n import tr
diff --git a/InterfaceQT4/monRecherche.py b/InterfaceQT4/monRecherche.py
index 6f30fd41..758e844f 100644
--- a/InterfaceQT4/monRecherche.py
+++ b/InterfaceQT4/monRecherche.py
@@ -20,23 +20,16 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
from desRecherche import Ui_desRecherche
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QDialog
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QDialog
+from PyQt5.QtCore import Qt
# Import des panels
class DRecherche(Ui_desRecherche ,QDialog):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
"""
def __init__(self,parent = None , name = None,fl = 0):
QDialog.__init__(self,parent)
@@ -45,12 +38,8 @@ class DRecherche(Ui_desRecherche ,QDialog):
self.setupUi(self)
self.PBSuivant.setDefault(True)
self.PBSuivant.setAutoDefault(False)
- if monEnvQT5 :
- self.PBSuivant.clicked.connect( self.suivantClicked)
- self.LERecherche.returnPressed.connect(self.recherche)
- else :
- self.connect(self.PBSuivant,SIGNAL("clicked()"), self.suivantClicked)
- self.connect(self.LERecherche,SIGNAL("returnPressed()"),self.recherche)
+ self.PBSuivant.clicked.connect( self.suivantClicked)
+ self.LERecherche.returnPressed.connect(self.recherche)
self.surLigne=0
self.listeTrouvee=()
self.nodeSurligne=None
diff --git a/InterfaceQT4/monRechercheCatalogue.py b/InterfaceQT4/monRechercheCatalogue.py
index 73f4ae16..58081f24 100644
--- a/InterfaceQT4/monRechercheCatalogue.py
+++ b/InterfaceQT4/monRechercheCatalogue.py
@@ -20,14 +20,14 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
from desRechercheCatalogue import Ui_desRechercheCatalogue
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QDialog, QCompleter
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QDialog, QCompleter
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
@@ -35,9 +35,6 @@ from Extensions.i18n import tr
class DRechercheCatalogue (Ui_desRechercheCatalogue ,QDialog):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
"""
def __init__(self,parent,editor ):
QDialog.__init__(self,parent)
@@ -45,17 +42,13 @@ class DRechercheCatalogue (Ui_desRechercheCatalogue ,QDialog):
self.setupUi(self)
self.editor=editor
self.CBRecherche.setEditable(True)
- if monEnvQT5 :
- self.CBRecherche.lineEdit().returnPressed.connect(self.rechercheCB)
- self.CBRecherche.currentIndexChanged.connect(self.rechercheCB)
- else :
- self.connect(self.CBRecherche.lineEdit(),SIGNAL("returnPressed()"),self.rechercheCB)
- self.connect(self.CBRecherche,SIGNAL("currentIndexChanged(int)"),self.rechercheCB)
+ self.CBRecherche.lineEdit().returnPressed.connect(self.rechercheCB)
+ self.CBRecherche.currentIndexChanged.connect(self.rechercheCB)
self.initRecherche()
def initRecherche(self):
- listeChoix=self.editor.readercata.dicoInverse.keys()
+ listeChoix=list(self.editor.readercata.dicoInverse.keys())
self.CBRecherche.addItem("")
for choix in listeChoix:
self.CBRecherche.addItem(choix)
@@ -71,7 +64,7 @@ class DRechercheCatalogue (Ui_desRechercheCatalogue ,QDialog):
def recherche(self,motAChercher):
if str(motAChercher)=="" or str(motAChercher) == None : return
- if str(motAChercher) not in self.editor.readercata.dicoInverse.keys():return
+ if str(motAChercher) not in self.editor.readercata.dicoInverse:return
try :
#if 1 :
genea= self.editor.readercata.dicoInverse[str(motAChercher)]
diff --git a/InterfaceQT4/monSelectVal.py b/InterfaceQT4/monSelectVal.py
index 8a6a2fbe..c0df61d8 100644
--- a/InterfaceQT4/monSelectVal.py
+++ b/InterfaceQT4/monSelectVal.py
@@ -20,18 +20,17 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
from desSelectVal import Ui_DSelVal
from Extensions.i18n import tr
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QDialog, QFileDialog
- from PyQt5.QtCore import QTimer, Qt
- from PyQt5.QtGui import QPalette
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
- from PyQt4.QtGui import QPalette
+from PyQt5.QtWidgets import QDialog, QFileDialog
+from PyQt5.QtCore import QTimer, Qt
+from PyQt5.QtGui import QPalette
class DSelVal(Ui_DSelVal,QDialog):
def __init__(self,parent ,modal ) :
@@ -54,8 +53,7 @@ class MonSelectVal(DSelVal):
self.file=str(file)
self.readVal()
self.initVal()
- if monEnvQT5: self.connecterSignaux()
- else : self.connecterSignauxQT4()
+ self.connecterSignaux()
def connecterSignaux(self) :
self.Bespace.clicked.connect(self.SelectEsp)
@@ -86,7 +84,7 @@ class MonSelectVal(DSelVal):
def readVal(self):
if self.file == "" : return
- f = open(self.file, "rb")
+ f = open(self.file, "r")
self.texte = f.read()
f.close()
@@ -115,10 +113,9 @@ class MonSelectVal(DSelVal):
self.Traitement()
def Traitement(self):
- import string
if self.textTraite == "" : return
if self.textTraite[-1]=="\n" : self.textTraite=self.textTraite[0:-1]
- self.textTraite=string.replace(self.textTraite,"\n",self.separateur)
+ self.textTraite=self.textTraite.replace("\n",self.separateur)
liste1=self.textTraite.split(self.separateur)
liste=[]
for val in liste1 :
diff --git a/InterfaceQT4/monViewRegles.py b/InterfaceQT4/monViewRegles.py
index b2a74597..8546d4b4 100644
--- a/InterfaceQT4/monViewRegles.py
+++ b/InterfaceQT4/monViewRegles.py
@@ -18,17 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
import traceback
from Extensions.i18n import tr
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtCore import Qt
- from PyQt5.QtWidgets import QDialog, QListWidgetItem
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QDialog, QListWidgetItem
from desViewRegles import Ui_viewRegles
# ------------------------------------ #
@@ -41,8 +37,7 @@ class ViewRegles(Ui_viewRegles,QDialog):
QDialog.__init__(self,parent)
self.setupUi(self)
self.setModal(False)
- if monEnvQT5 : self.bclose.clicked.connect(self.close)
- else : self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") )
+ self.bclose.clicked.connect(self.close)
if entete != None : self.setWindowTitle (entete)
for ligne in liste :
diff --git a/InterfaceQT4/monViewTexte.py b/InterfaceQT4/monViewTexte.py
index 357f2299..2dfcece6 100644
--- a/InterfaceQT4/monViewTexte.py
+++ b/InterfaceQT4/monViewTexte.py
@@ -18,18 +18,19 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
+import types,os
import traceback
from Extensions.i18n import tr
+import six
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QDialog, QMessageBox, QFileDialog
- from PyQt5.QtCore import QSize
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QDialog, QMessageBox, QFileDialog
+from PyQt5.QtCore import QSize
from desViewTexte import Ui_dView
# ------------------------------- #
@@ -44,12 +45,9 @@ class ViewText(Ui_dView,QDialog):
self.setupUi(self)
self.resize( QSize(largeur,hauteur).expandedTo(self.minimumSizeHint()) )
- if monEnvQT5 :
- self.bclose.clicked.connect(self.close)
- self.bsave.clicked.connect(self.saveFile )
- else :
- self.connect( self.bclose,SIGNAL("clicked()"), self, SLOT("close()") )
- self.connect( self.bsave,SIGNAL("clicked()"), self.saveFile )
+ self.bclose.clicked.connect(self.close)
+ self.bsave.clicked.connect(self.saveFile )
+
if entete != None : self.setWindowTitle (entete)
if entete != None : self.setText (texte)
@@ -66,15 +64,15 @@ class ViewText(Ui_dView,QDialog):
fn = QFileDialog.getSaveFileName(None,
tr("Sauvegarder le fichier"),
dir)
- if monEnvQT5 : fn=fn[0]
+ fn=fn[0]
if fn == "" : return
if fn == None : return (0, None)
- ulfile = os.path.abspath(unicode(fn))
+ ulfile = os.path.abspath(six.text_type(fn))
if self.editor != None :
self.editor.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
try:
- f = open(fn, 'wb')
+ f = open(fn, 'w')
f.write(str(self.view.toPlainText()))
f.close()
return 1
@@ -84,4 +82,3 @@ class ViewText(Ui_dView,QDialog):
return
-
diff --git a/InterfaceQT4/monVisu.py b/InterfaceQT4/monVisu.py
index 7d5a4945..fd8461e9 100644
--- a/InterfaceQT4/monVisu.py
+++ b/InterfaceQT4/monVisu.py
@@ -20,22 +20,15 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
from desVisu import Ui_DVisu
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QDialog
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QDialog
# Import des panels
class DVisu(Ui_DVisu ,QtGui.QDialog):
"""
- Classe définissant le panel associé aux mots-clés qui demandent
- à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
- discrètes
"""
def __init__(self,parent = None , name = None,fl = 0):
QtGui.QDialog.__init__(self,parent)
diff --git a/InterfaceQT4/monWidget4a6RadioButton.py b/InterfaceQT4/monWidget4a6RadioButton.py
index e7e28c3d..0e3b97f9 100644
--- a/InterfaceQT4/monWidget4a6RadioButton.py
+++ b/InterfaceQT4/monWidget4a6RadioButton.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
from Extensions.i18n import tr
-from monWidgetRadioButton import MonWidgetRadioButtonCommun
+from .monWidgetRadioButton import MonWidgetRadioButtonCommun
from desWidget4a6RadioButton import Ui_Widget4a6RadioButton
diff --git a/InterfaceQT4/monWidget4a6RadioButtonSD.py b/InterfaceQT4/monWidget4a6RadioButtonSD.py
index 6b74f109..d3dd5bf7 100644
--- a/InterfaceQT4/monWidget4a6RadioButtonSD.py
+++ b/InterfaceQT4/monWidget4a6RadioButtonSD.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
from Extensions.i18n import tr
-from monWidgetRadioButton import MonWidgetRadioButtonCommun
+from .monWidgetRadioButton import MonWidgetRadioButtonCommun
from desWidget4a6RadioButton import Ui_Widget4a6RadioButton
diff --git a/InterfaceQT4/monWidgetBloc.py b/InterfaceQT4/monWidgetBloc.py
index 56ff6703..648505cf 100644
--- a/InterfaceQT4/monWidgetBloc.py
+++ b/InterfaceQT4/monWidgetBloc.py
@@ -19,8 +19,9 @@
# Modules Python
# Modules Eficas
+from __future__ import absolute_import
from desWidgetBloc import Ui_WidgetBloc
-from groupe import Groupe
+from .groupe import Groupe
from Extensions.i18n import tr
# Import des panels
diff --git a/InterfaceQT4/monWidgetCB.py b/InterfaceQT4/monWidgetCB.py
index 2d5e385e..5cdaca20 100644
--- a/InterfaceQT4/monWidgetCB.py
+++ b/InterfaceQT4/monWidgetCB.py
@@ -18,23 +18,23 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
+import types,os
# Modules Eficas
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetCB import Ui_WidgetCB
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QComboBox, QCompleter
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QComboBox, QCompleter
+from PyQt5.QtCore import Qt
class MonWidgetCBCommun (Ui_WidgetCB,Feuille):
@@ -44,13 +44,11 @@ class MonWidgetCBCommun (Ui_WidgetCB,Feuille):
self.politique=PolitiqueUnique(self.node,self.editor)
self.determineChoix()
self.setValeursApresBouton()
- if monEnvQT5:
- self.CBChoix.currentIndexChanged.connect(self.ChoixSaisi)
- else :
- self.connect(self.CBChoix,SIGNAL("currentIndexChanged(int)"),self.ChoixSaisi)
+ self.CBChoix.currentIndexChanged.connect(self.ChoixSaisi)
#self.CBChoix.lineEdit().setText(tr("Select"))
self.parentQt.commandesLayout.insertWidget(-1,self)
self.maCommande.listeAffichageWidget.append(self.CBChoix)
+ self.AAfficher=self.CBChoix
def setValeursApresBouton(self):
@@ -60,16 +58,14 @@ class MonWidgetCBCommun (Ui_WidgetCB,Feuille):
self.CBChoix.lineEdit().setText(tr("Select"))
return
valeur=self.objSimp.get_valeur()
- if not(type(valeur) in types.StringTypes) : valeur=str(valeur)
+ if not(type(valeur) == str) : valeur=str(valeur)
self.CBChoix.setCurrentIndex(self.CBChoix.findText(valeur))
def determineChoix(self):
- if monEnvQT5: listeChoix=[]
- else : listeChoix=QStringList()
+ listeChoix=[]
for choix in self.maListeDeValeur:
- if not(type(choix) in types.StringTypes) : choix=str(choix)
- if monEnvQT5: listeChoix.append(choix)
- else : listeChoix< aConstruire : aConstruire=len(self.listeValeursCourantes)
for i in range(1,aConstruire+1): self.ajoutLEResultat(i)
diff --git a/InterfaceQT4/monWidgetPlusieursPlie.py b/InterfaceQT4/monWidgetPlusieursPlie.py
index 493ed2b4..bb5b066f 100644
--- a/InterfaceQT4/monWidgetPlusieursPlie.py
+++ b/InterfaceQT4/monWidgetPlusieursPlie.py
@@ -18,21 +18,20 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os,sys
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
-# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QFrame
- from PyQt5.QtCore import QTimer, QSize, Qt
- from PyQt5.QtGui import QIcon
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import types,os,sys
+
+from PyQt5.QtWidgets import QFrame
+from PyQt5.QtCore import QTimer, QSize, Qt
+from PyQt5.QtGui import QIcon
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetPlusieursPlie import Ui_WidgetPlusieursPlie
@@ -45,10 +44,7 @@ class MonWidgetPlusieursPlie (Ui_WidgetPlusieursPlie,Feuille):
self.AAfficher=self.lineEditVal
self.maCommande.listeAffichageWidget.append(self.lineEditVal)
- if monEnvQT5 :
- self.BVisuListe.clicked.connect(self.selectWidgetDeplie)
- else :
- self.connect(self.BVisuListe,SIGNAL("clicked()"), self.selectWidgetDeplie)
+ self.BVisuListe.clicked.connect(self.selectWidgetDeplie)
def setValeurs(self):
diff --git a/InterfaceQT4/monWidgetPlusieursTuple.py b/InterfaceQT4/monWidgetPlusieursTuple.py
index 7d4a8ce1..b70a3d73 100644
--- a/InterfaceQT4/monWidgetPlusieursTuple.py
+++ b/InterfaceQT4/monWidgetPlusieursTuple.py
@@ -18,31 +18,33 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os,sys
-
-# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget
- from PyQt5.QtGui import QIcon
- from PyQt5.QtCore import QSize, Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except : pass
+
+import types,os,sys
+
+from six.moves import range
+from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget
+from PyQt5.QtGui import QIcon
+from PyQt5.QtCore import QSize, Qt
from Extensions.i18n import tr
-from feuille import Feuille
-from politiquesValidation import PolitiquePlusieurs
-from qtSaisie import SaisieValeur
-from gereListe import GereListe
-from gereListe import LECustom
+from .feuille import Feuille
+from .politiquesValidation import PolitiquePlusieurs
+from .qtSaisie import SaisieValeur
+from .gereListe import GereListe
+from .gereListe import LECustom
from Tuple2 import Ui_Tuple2
from Tuple3 import Ui_Tuple3
-class TupleCustom :
+class TupleCustom(object) :
def __init__(self,tailleTuple,parent,parentQt,index):
QWidget.__init__(self,parent)
self.setupUi(self)
@@ -58,8 +60,7 @@ class TupleCustom :
courant=getattr(self,nomLE)
courant.num=index
courant.dansUnTuple=True
- if monEnvQT5 : courant.returnPressed.connect(self.valueChange)
- else : self.connect(courant,SIGNAL("returnPressed()"),self.valueChange)
+ courant.returnPressed.connect(self.valueChange)
def valueChange(self):
@@ -168,10 +169,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
icon3 = QIcon(fichier3)
self.BSelectFichier.setIcon(icon3)
self.BSelectFichier.setIconSize(QSize(32, 32))
- if monEnvQT5 :
- self.BSelectFichier.clicked.connect(self.selectInFile)
- else :
- self.connect(self.BSelectFichier,SIGNAL("clicked()"), self.selectInFile)
+ self.BSelectFichier.clicked.connect(self.selectInFile)
@@ -310,7 +308,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne :
val=[]
if hasattr(self.objSimp.jdc,'LineDico'):
- for k in self.objSimp.jdc.LineDico.keys() :
+ for k in self.objSimp.jdc.LineDico :
try :
valeur=self.objSimp.jdc.get_concept(k)
val.append((valeur,0))
@@ -320,7 +318,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_generateur :
val=[]
if hasattr(self.objSimp.jdc,'MachineDico'):
- for k in self.objSimp.jdc.MachineDico.keys() :
+ for k in self.objSimp.jdc.MachineDico :
try :
valeur=self.objSimp.jdc.get_concept(k)
val.append((valeur,0))
@@ -330,7 +328,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_transfo :
val=[]
if hasattr(self.objSimp.jdc,'TransfoDico'):
- for k in self.objSimp.jdc.TransfoDico.keys() :
+ for k in self.objSimp.jdc.TransfoDico :
try :
valeur=self.objSimp.jdc.get_concept(k)
val.append((valeur,0))
@@ -340,7 +338,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_charge :
val=[]
if hasattr(self.objSimp.jdc,'LoadDico'):
- for k in self.objSimp.jdc.LoadDico.keys() :
+ for k in self.objSimp.jdc.LoadDico :
try :
valeur=self.objSimp.jdc.get_concept(k)
val.append((valeur,0))
@@ -350,7 +348,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe):
if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_moteur :
val=[]
if hasattr(self.objSimp.jdc,'MotorDico'):
- for k in self.objSimp.jdc.MotorDico.keys() :
+ for k in self.objSimp.jdc.MotorDico :
try :
valeur=self.objSimp.jdc.get_concept(k)
val.append((valeur,0))
diff --git a/InterfaceQT4/monWidgetPlusieursTuple2.py b/InterfaceQT4/monWidgetPlusieursTuple2.py
index a446a06f..4b7b3d8e 100644
--- a/InterfaceQT4/monWidgetPlusieursTuple2.py
+++ b/InterfaceQT4/monWidgetPlusieursTuple2.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
-from feuille import Feuille
-from monWidgetPlusieursTuple import MonWidgetPlusieursTuple
+from .feuille import Feuille
+from .monWidgetPlusieursTuple import MonWidgetPlusieursTuple
from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
diff --git a/InterfaceQT4/monWidgetPlusieursTuple3.py b/InterfaceQT4/monWidgetPlusieursTuple3.py
index e7239b85..00233e89 100644
--- a/InterfaceQT4/monWidgetPlusieursTuple3.py
+++ b/InterfaceQT4/monWidgetPlusieursTuple3.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
-from feuille import Feuille
-from monWidgetPlusieursTuple import MonWidgetPlusieursTuple
+from .feuille import Feuille
+from .monWidgetPlusieursTuple import MonWidgetPlusieursTuple
from desWidgetPlusieursTuple import Ui_WidgetPlusieursTuple
diff --git a/InterfaceQT4/monWidgetRadioButton.py b/InterfaceQT4/monWidgetRadioButton.py
index fd6c472f..1e40fb75 100644
--- a/InterfaceQT4/monWidgetRadioButton.py
+++ b/InterfaceQT4/monWidgetRadioButton.py
@@ -18,24 +18,25 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtCore import Qt
- from PyQt5.QtWidgets import QWidget
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import types,os
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QWidget
# Modules Eficas
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetRadioButton import Ui_WidgetRadioButton
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
class MonWidgetRadioButtonCommun (Feuille):
@@ -54,7 +55,7 @@ class MonWidgetRadioButtonCommun (Feuille):
def setValeursApresBouton(self):
if self.objSimp.get_valeur()==None : return
valeur=self.objSimp.get_valeur()
- if not(type(valeur) in types.StringTypes) : valeur=str(valeur)
+ if not(type(valeur) == str) : valeur=str(valeur)
try :
self.dict_bouton[valeur].setChecked(True)
self.dict_bouton[valeur].setFocus(True)
@@ -72,11 +73,10 @@ class MonWidgetRadioButtonCommun (Feuille):
nomBouton="radioButton_"+str(i)
bouton=getattr(self,nomBouton)
valeur=self.maListeDeValeur[i-1]
- if not(type(valeur) in types.StringTypes) : valeur=str(valeur)
+ if not(type(valeur) == str) : valeur=str(valeur)
bouton.setText(tr(valeur))
self.dict_bouton[valeur]=bouton
- if monEnvQT5 : bouton.clicked.connect(self.boutonclic)
- else : self.connect(bouton,SIGNAL("clicked()"),self.boutonclic)
+ bouton.clicked.connect(self.boutonclic)
bouton.keyPressEvent=self.keyPressEvent
setattr(self,nomBouton,bouton)
i=i+1
@@ -87,7 +87,7 @@ class MonWidgetRadioButtonCommun (Feuille):
i=i+1
def boutonclic(self):
- for valeur in self.dict_bouton.keys():
+ for valeur in self.dict_bouton:
if self.dict_bouton[valeur].isChecked():
#print "dans boutonclic is checked", valeur, type(valeur)
SaisieValeur.LEValeurPressed(self,valeur)
@@ -103,7 +103,7 @@ class MonWidgetRadioButtonCommun (Feuille):
def selectSuivant(self):
aLeFocus=self.focusWidget()
nom=aLeFocus.objectName()[12:]
- i=nom.toInt()[0]+1
+ i=int(nom)+1
if i == len(self.maListeDeValeur) +1 : i=1
nomBouton="radioButton_"+str(i)
courant=getattr(self,nomBouton)
@@ -112,7 +112,7 @@ class MonWidgetRadioButtonCommun (Feuille):
def selectPrecedent(self):
aLeFocus=self.focusWidget()
nom=aLeFocus.objectName()[12:]
- i=nom.toInt()[0]-1
+ i=int(nom)-1
if i == 0 : i= len(self.maListeDeValeur)
nomBouton="radioButton_"+str(i)
courant=getattr(self,nomBouton)
@@ -121,7 +121,7 @@ class MonWidgetRadioButtonCommun (Feuille):
def checkFocused(self):
aLeFocus=self.focusWidget()
nom=aLeFocus.objectName()[12:]
- i=nom.toInt()[0]
+ i=int(nom)
if i > 0 and i <= len(self.maListeDeValeur):
nomBouton="radioButton_"+str(i)
courant=getattr(self,nomBouton)
diff --git a/InterfaceQT4/monWidgetSDCOInto.py b/InterfaceQT4/monWidgetSDCOInto.py
index 3de91710..4cea507d 100644
--- a/InterfaceQT4/monWidgetSDCOInto.py
+++ b/InterfaceQT4/monWidgetSDCOInto.py
@@ -18,22 +18,22 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
+import types,os
# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QLineEdit
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QLineEdit
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetSDCOInto import Ui_WidgetSDCOInto
-from qtSaisie import SaisieSDCO
-from politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieSDCO
+from .politiquesValidation import PolitiqueUnique
@@ -48,12 +48,8 @@ class MonWidgetSDCOInto (Ui_WidgetSDCOInto,Feuille,SaisieSDCO):
self.AAficher=self.LESDCO
self.initLBSDCO()
- if monEnvQT5 :
- self.LESDCO.returnPressed.connect(self.LESDCOReturnPressed)
- self.LBSDCO.itemDoubleClicked.connect(self.LBSDCODoubleClicked )
- else :
- self.connect(self.LESDCO, SIGNAL("returnPressed()"),self.LESDCOReturnPressed)
- self.connect(self.LBSDCO, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.LBSDCODoubleClicked )
+ self.LESDCO.returnPressed.connect(self.LESDCOReturnPressed)
+ self.LBSDCO.itemDoubleClicked.connect(self.LBSDCODoubleClicked )
def LESDCOReturnPressed(self) :
self.LBSDCO.clearSelection()
diff --git a/InterfaceQT4/monWidgetSimpBase.py b/InterfaceQT4/monWidgetSimpBase.py
index 9022095f..32fde23a 100644
--- a/InterfaceQT4/monWidgetSimpBase.py
+++ b/InterfaceQT4/monWidgetSimpBase.py
@@ -18,34 +18,39 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
+import types,os
# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QLineEdit
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetSimpBase import Ui_WidgetSimpBase
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille):
def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
- #print "MonWidgetSimpBase", nom
self.parentQt.commandesLayout.insertWidget(-1,self,1)
self.setFocusPolicy(Qt.StrongFocus)
- if monEnvQT5 : self.lineEditVal.returnPressed.connect(self.LEValeurPressed)
- else : self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed)
+ self.lineEditVal.returnPressed.connect(self.LEValeurPressed)
self.AAfficher=self.lineEditVal
self.maCommande.listeAffichageWidget.append(self.lineEditVal)
+ self.lineEditVal.focusInEvent=self.monFocusInEvent
+
+
+ def monFocusInEvent(self,event):
+ self.editor.nodeEnCours = self
+ QLineEdit.focusInEvent(self.lineEditVal,event)
#def showEvent(self, event):
@@ -56,6 +61,7 @@ class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille):
# QWidget.showEvent(self,event)
def setValeurs(self):
+ #print ("dans setValeurs")
self.politique=PolitiqueUnique(self.node,self.editor)
valeur=self.node.item.get_valeur()
valeurTexte=self.politique.GetValeurTexte(valeur)
@@ -87,7 +93,7 @@ class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille):
'Repertoire' : tr(u'Un repertoire est attendu. '),
'Heure' : tr(u'Heure sous la forme HH:MM'),
'Date' : tr(u'Date sous la forme JJ/MM/AA')}
- if mc.type[0] != types.ClassType:
+ if mc.type[0] != type:
commentaire = d_aides.get(mc.type[0], tr("Type de base inconnu"))
else : commentaire=""
return commentaire
diff --git a/InterfaceQT4/monWidgetSimpBool.py b/InterfaceQT4/monWidgetSimpBool.py
index bd174677..f26ea659 100644
--- a/InterfaceQT4/monWidgetSimpBool.py
+++ b/InterfaceQT4/monWidgetSimpBool.py
@@ -18,21 +18,17 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QRadioButton
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QRadioButton
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetSimpBool import Ui_WidgetSimpBool
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
class MonWidgetSimpBool (Ui_WidgetSimpBool,Feuille):
@@ -40,14 +36,11 @@ class MonWidgetSimpBool (Ui_WidgetSimpBool,Feuille):
def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.politique=PolitiqueUnique(self.node,self.editor)
- if monEnvQT5 :
- self.RBTrue.clicked.connect(self.boutonTrueClic)
- self.RBFalse.clicked.connect(self.boutonFalseClic)
- else :
- self.connect(self.RBTrue,SIGNAL("clicked()"),self.boutonTrueClic)
- self.connect(self.RBFalse,SIGNAL("clicked()"),self.boutonFalseClic)
+ self.RBTrue.clicked.connect(self.boutonTrueClic)
+ self.RBFalse.clicked.connect(self.boutonFalseClic)
self.parentQt.commandesLayout.insertWidget(-1,self)
self.maCommande.listeAffichageWidget.append(self.RBTrue)
+ self.AAfficher=self.RBTrue
def setValeurs(self):
valeur=self.node.item.get_valeur()
diff --git a/InterfaceQT4/monWidgetSimpComplexe.py b/InterfaceQT4/monWidgetSimpComplexe.py
index 6775a18e..c126fd86 100644
--- a/InterfaceQT4/monWidgetSimpComplexe.py
+++ b/InterfaceQT4/monWidgetSimpComplexe.py
@@ -18,23 +18,24 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
+import types,os, locale
# Modules Eficas
-if monEnvQT5:
- from PyQt5.QtWidgets import QLineEdit, QRadioButton
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtWidgets import QLineEdit, QRadioButton
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetSimpComplexe import Ui_WidgetSimpComplexe
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
@@ -43,18 +44,11 @@ class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
self.parentQt.commandesLayout.insertWidget(-1,self)
self.setFocusPolicy(Qt.StrongFocus)
- if monEnvQT5 :
- self.LEImag.returnPressed.connect(self.LEImagRPressed)
- self.LEReel.returnPressed.connect()"),self.LEReelRPressed)
- self.RBRI.clicked.connect(self.ValeurPressed )
- self.RBMP.clicked.connect(self.ValeurPressed )
- self.LEComp.returnPressed.connect(self.LECompRPressed)
- else :
- self.connect(self.LEImag,SIGNAL("returnPressed()"),self.LEImagRPressed)
- self.connect(self.LEReel,SIGNAL("returnPressed()"),self.LEReelRPressed)
- self.connect(self.RBRI,SIGNAL("clicked()"), self.ValeurPressed )
- self.connect(self.RBMP,SIGNAL("clicked()"), self.ValeurPressed )
- self.connect(self.LEComp,SIGNAL("returnPressed()"),self.LECompRPressed)
+ self.LEImag.returnPressed.connect(self.LEImagRPressed)
+ self.LEReel.returnPressed.connect(self.LEReelRPressed)
+ self.RBRI.clicked.connect(self.ValeurPressed )
+ self.RBMP.clicked.connect(self.ValeurPressed )
+ self.LEComp.returnPressed.connect(self.LECompRPressed)
self.maCommande.listeAffichageWidget.append(self.LEComp)
#self.maCommande.listeAffichageWidget.append(self.RBRI)
#self.maCommande.listeAffichageWidget.append(self.RBMP)
@@ -66,7 +60,7 @@ class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
self.politique=PolitiqueUnique(self.node,self.editor)
valeur=self.node.item.get_valeur()
if valeur == None or valeur == '' : return
- if type(valeur) not in (types.ListType,types.TupleType) :
+ if type(valeur) not in (list,tuple) :
self.LEComp.setText(str(valeur))
else :
typ_cplx,x1,x2=valeur
@@ -102,7 +96,7 @@ class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
commentaire=tr("expression valide")
valeur = str(self.LEReel.text())
try :
- a=string.atof(valeur)
+ a=locale.atof(valeur)
self.editor.affiche_infos(commentaire)
except :
commentaire=tr("expression invalide")
@@ -114,7 +108,7 @@ class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
commentaire=tr("expression valide")
valeur = str(self.LEImag.text())
try :
- a=string.atof(valeur)
+ a=locale.atof(valeur)
self.editor.affiche_infos(commentaire)
except :
commentaire=tr("expression invalide")
@@ -172,10 +166,10 @@ class MonWidgetSimpComplexe (Ui_WidgetSimpComplexe,Feuille):
self.editor.affiche_infos(commentaire,Qt.red)
return None
try :
- l.append(string.atof(str(self.LEReel.text())))
- l.append(string.atof(str(self.LEImag.text())))
+ l.append(locale.atof(str(self.LEReel.text())))
+ l.append(locale.atof(str(self.LEImag.text())))
except :
return None
- return `tuple(l)`
+ return repr(tuple(l))
diff --git a/InterfaceQT4/monWidgetSimpFichier.py b/InterfaceQT4/monWidgetSimpFichier.py
index c116e74a..4b7667e0 100644
--- a/InterfaceQT4/monWidgetSimpFichier.py
+++ b/InterfaceQT4/monWidgetSimpFichier.py
@@ -18,20 +18,16 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os,sys
+from __future__ import absolute_import
+import types,os,sys
# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtGui import QIcon
- from PyQt5.QtCore import QSize
-else:
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtGui import QIcon
+from PyQt5.QtCore import QSize
from Extensions.i18n import tr
from desWidgetSimpFichier import Ui_WidgetSimpFichier
-from monWidgetSimpBase import MonWidgetSimpBase
+from .monWidgetSimpBase import MonWidgetSimpBase
class MonWidgetSimpFichier (Ui_WidgetSimpFichier,MonWidgetSimpBase):
diff --git a/InterfaceQT4/monWidgetSimpSalome.py b/InterfaceQT4/monWidgetSimpSalome.py
index 0553e529..a970c95f 100644
--- a/InterfaceQT4/monWidgetSimpSalome.py
+++ b/InterfaceQT4/monWidgetSimpSalome.py
@@ -18,25 +18,24 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+import types,os
-# Modules Eficas
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QLineEdit
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+
+from PyQt5.QtWidgets import QLineEdit
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetSimpSalome import Ui_WidgetSimpSalome
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
class MonWidgetSimpSalome (Ui_WidgetSimpSalome,Feuille):
@@ -46,8 +45,7 @@ class MonWidgetSimpSalome (Ui_WidgetSimpSalome,Feuille):
self.parentQt.commandesLayout.insertWidget(-1,self,1)
self.setFocusPolicy(Qt.StrongFocus)
self.politique=PolitiqueUnique(self.node,self.editor)
- if monEnvQT5: self.lineEditVal.returnPressed.connect(self.LEValeurPressed)
- else : self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.LEValeurPressed)
+ self.lineEditVal.returnPressed.connect(self.LEValeurPressed)
self.AAfficher=self.lineEditVal
self.maCommande.listeAffichageWidget.append(self.lineEditVal)
diff --git a/InterfaceQT4/monWidgetSimpTuple.py b/InterfaceQT4/monWidgetSimpTuple.py
index df97fa43..2222fe6f 100644
--- a/InterfaceQT4/monWidgetSimpTuple.py
+++ b/InterfaceQT4/monWidgetSimpTuple.py
@@ -18,21 +18,23 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+except : pass
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import types,os
+
+from six.moves import range
+from PyQt5.QtCore import Qt
# Modules Eficas
from Extensions.i18n import tr
-from feuille import Feuille
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieValeur
+from .feuille import Feuille
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieValeur
class MonWidgetSimpTuple(Feuille):
@@ -50,8 +52,7 @@ class MonWidgetSimpTuple(Feuille):
courant=getattr(self,nomLineEdit)
if valeur !=None: courant.setText(str(valeur[i]))
setattr(self,nomLineEdit,courant)
- if monEnvQT5: courant.returnPressed.connect(self.valeursPressed)
- else : self.connect(courant,SIGNAL("returnPressed()"),self.valeursPressed)
+ courant.returnPressed.connect(self.valeursPressed)
def valeursPressed(self):
aLeFocus=self.focusWidget()
@@ -85,7 +86,7 @@ class MonWidgetSimpTuple(Feuille):
# Passage au champ suivant
nom=aLeFocus.objectName()[11:]
try :
- i=str(nom).toInt()[0]+1
+ i=int(nom)+1
except :
try :
i=i+1
diff --git a/InterfaceQT4/monWidgetSimpTuple2.py b/InterfaceQT4/monWidgetSimpTuple2.py
index 1d45ae5c..36d1e2ce 100644
--- a/InterfaceQT4/monWidgetSimpTuple2.py
+++ b/InterfaceQT4/monWidgetSimpTuple2.py
@@ -18,15 +18,16 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
#from PyQt4.QtGui import *
#from PyQt4.QtCore import *
from Extensions.i18n import tr
-from feuille import Feuille
-from monWidgetSimpTuple import MonWidgetSimpTuple
+from .feuille import Feuille
+from .monWidgetSimpTuple import MonWidgetSimpTuple
from desWidgetTuple2 import Ui_WidgetTuple2
diff --git a/InterfaceQT4/monWidgetSimpTuple3.py b/InterfaceQT4/monWidgetSimpTuple3.py
index fe0ffe45..1a76cdb7 100644
--- a/InterfaceQT4/monWidgetSimpTuple3.py
+++ b/InterfaceQT4/monWidgetSimpTuple3.py
@@ -18,15 +18,16 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
#from PyQt4.QtGui import *
#from PyQt4.QtCore import *
from Extensions.i18n import tr
-from feuille import Feuille
-from monWidgetSimpTuple import MonWidgetSimpTuple
+from .feuille import Feuille
+from .monWidgetSimpTuple import MonWidgetSimpTuple
from desWidgetTuple3 import Ui_WidgetTuple3
diff --git a/InterfaceQT4/monWidgetSimpTxt.py b/InterfaceQT4/monWidgetSimpTxt.py
index 41a5226e..4cec618a 100644
--- a/InterfaceQT4/monWidgetSimpTxt.py
+++ b/InterfaceQT4/monWidgetSimpTxt.py
@@ -18,13 +18,14 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
from Extensions.i18n import tr
from desWidgetSimpTxt import Ui_WidgetSimpTxt
-from monWidgetSimpBase import MonWidgetSimpBase
+from .monWidgetSimpBase import MonWidgetSimpBase
class MonWidgetSimpTxt (Ui_WidgetSimpTxt,MonWidgetSimpBase):
diff --git a/InterfaceQT4/monWidgetUniqueSDCO.py b/InterfaceQT4/monWidgetUniqueSDCO.py
index ce954377..aa88a1b9 100644
--- a/InterfaceQT4/monWidgetUniqueSDCO.py
+++ b/InterfaceQT4/monWidgetUniqueSDCO.py
@@ -18,17 +18,18 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetUniqueSDCO import Ui_WidgetUniqueSDCO
-from politiquesValidation import PolitiqueUnique
-from qtSaisie import SaisieSDCO
+from .politiquesValidation import PolitiqueUnique
+from .qtSaisie import SaisieSDCO
diff --git a/InterfaceQT4/monWidgetVide.py b/InterfaceQT4/monWidgetVide.py
index 9f60328a..99f3d46a 100644
--- a/InterfaceQT4/monWidgetVide.py
+++ b/InterfaceQT4/monWidgetVide.py
@@ -18,14 +18,15 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+import types,os
# Modules Eficas
from Extensions.i18n import tr
-from feuille import Feuille
+from .feuille import Feuille
from desWidgetVide import Ui_WidgetVide
-from politiquesValidation import PolitiqueUnique
+from .politiquesValidation import PolitiqueUnique
diff --git a/InterfaceQT4/politiquesValidation.py b/InterfaceQT4/politiquesValidation.py
index 5145f551..1cd9c713 100644
--- a/InterfaceQT4/politiquesValidation.py
+++ b/InterfaceQT4/politiquesValidation.py
@@ -18,13 +18,18 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import types, string
+from __future__ import absolute_import
+try :
+ from builtins import range
+except : pass
+
+import types
from Accas import PARAMETRE
from Extensions.i18n import tr
#------------------
-class Validation :
+class Validation(object) :
#------------------
def __init__(self,node,parent) :
self.node=node
@@ -34,23 +39,23 @@ class Validation :
commentaire = None
valeur,validite=self.node.item.eval_valeur(valeurentree)
if not validite :
- commentaire = "impossible d'evaluer : %s " %`valeurentree`
+ commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
return valeur,validite,commentaire
- if self.node.item.wait_TXM() and type(valeur) not in types.StringTypes : valeur=str(valeur)
+ if self.node.item.wait_TXM() and not( type(valeur) == str) : valeur=str(valeur)
testtype,commentaire = self.node.item.object.verif_type(valeur)
if not testtype :
return valeur,0,commentaire
valide=self.node.item.valide_item(valeur)
- if type(valide) == types.TupleType:
+ if type(valide) == tuple:
validite,commentaire=valide
else :
validite=valide
commentaire=" "
if not validite and commentaire is None:
- commentaire = "impossible d'evaluer : %s " %`valeurentree`
+ commentaire = "impossible d'evaluer : %s " %repr(valeurentree)
return valeur, validite, commentaire
# ----------------------------------------------------------------------------------------
@@ -65,12 +70,12 @@ class Validation :
if str(clef) != str(texteValeur) :
self.node.item.object.init_modif()
clefobj=self.node.item.object.GetNomConcept()
- if not self.parent.appliEficas.dict_reels.has_key(clefobj):
+ if not clefobj in self.parent.appliEficas.dict_reels:
self.parent.appliEficas.dict_reels[clefobj] = {}
self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
self.parent.appliEficas.dict_reels[clefobj]
if clefobj=="" :
- if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
+ if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
self.node.item.object.fin_modif()
@@ -86,16 +91,19 @@ class Validation :
else : return(valeur)
if "R" in self.node.item.object.definition.type:
clefobj=self.node.item.object.GetNomConcept()
- if self.parent.appliEficas.dict_reels.has_key(clefobj):
- if self.parent.appliEficas.dict_reels[clefobj].has_key(valeur):
+ if clefobj in self.parent.appliEficas.dict_reels:
+ if valeur in self.parent.appliEficas.dict_reels[clefobj] :
valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
else :
- if string.find(str(valeur),'.') == -1 and string.find(str(valeur),'e') == -1 and string.find(str(valeur),'E'):
+ if str(valeur).find('.') == -1 and str(valeur).find('e') == -1 and str(valeur).find('E'):
# aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
if (self.is_param(valeur)):
return valeur
else:
- val2=eval(str(valeur)+'.')
+ try :
+ val2=eval(str(valeur)+'.')
+ except :
+ pass
return valeurTexte
def is_param(self,valeur) :
@@ -114,11 +122,11 @@ class Validation :
clef=eval(texteValeur)
if str(clef) != str(texteValeur) :
clefobj=self.node.item.object.GetNomConcept()
- if not self.parent.appliEficas.dict_reels.has_key(clefobj):
+ if not clefobj in self.parent.appliEficas :
self.parent.appliEficas.dict_reels[clefobj] = {}
self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
if clefobj=="" :
- if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
+ if not self.node.item.object.etape in self.parent.appliEficas.dict_reels :
self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
@@ -127,7 +135,7 @@ class Validation :
def AjoutDsDictReelEtape(self):
try:
- if self.parent.appliEficas.dict_reels.has_key(self.node.item.object) :
+ if self.node.item.object in self.parent.appliEficas.dict_reels:
self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
del self.parent.appliEficas.dict_reels[self.node.item.object]
except :
@@ -185,7 +193,7 @@ class PolitiquePlusieurs(Validation):
valide=1
if listevaleur==None: return
if listevaleur=="": return
- if not( type(listevaleur) in (types.ListType,types.TupleType)) :
+ if not( type(listevaleur) in (list,tuple)) :
listevaleur=tuple(listevaleur)
# on verifie que la cardinalite max n a pas ete atteinte
min,max = self.node.item.GetMinMax()
diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py
index f0117c41..601089c2 100755
--- a/InterfaceQT4/qtEficas.py
+++ b/InterfaceQT4/qtEficas.py
@@ -18,15 +18,19 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+
import os, sys
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QApplication, QMainWindow, QBoxLayout, QMenu, QAction, QMessageBox
- from PyQt5.QtGui import QIcon
- from PyQt5.QtCore import Qt
-else:
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import six
+
+
+from PyQt5.QtWidgets import QApplication, QMainWindow, QBoxLayout, QMenu, QAction, QMessageBox
+from PyQt5.QtGui import QIcon
+from PyQt5.QtCore import Qt
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
@@ -34,8 +38,8 @@ from Extensions import param2
from myMain import Ui_Eficas
-from viewManager import MyTabview
-from getVersion import getEficasVersion
+from .viewManager import MyTabview
+from .getVersion import getEficasVersion
from Editeur import session
@@ -53,8 +57,7 @@ class Appli(Ui_Eficas,QMainWindow):
version=getEficasVersion()
- self.VERSION_EFICAS="Eficas QT4 Salome "+version
- if monEnvQT5 : self.VERSION_EFICAS="Eficas QT5 Salome "
+ self.VERSION_EFICAS="Eficas QT5 Salome " + version
self.salome=salome
self.parentMainWindow=parent
self.ihm="QT"
@@ -65,8 +68,7 @@ class Appli(Ui_Eficas,QMainWindow):
self.indice=0
self.first=1
self.dict_reels={}
- if monEnvQT5 : self.recent = []
- else : self.recent = QStringList()
+ self.recent = []
self.ficRecents={}
self.mesScripts={}
self.listeAEnlever=[]
@@ -98,7 +100,7 @@ class Appli(Ui_Eficas,QMainWindow):
self.suiteTelemac=False
if hasattr (self, 'CONFIGURATION') :
if self.CONFIGURATION.force_langue :
- from monChoixLangue import MonChoixLangue
+ from .monChoixLangue import MonChoixLangue
widgetLangue = MonChoixLangue(self)
ret=widgetLangue.exec_()
self.suiteTelemac=self.CONFIGURATION.suiteTelemac
@@ -106,7 +108,9 @@ class Appli(Ui_Eficas,QMainWindow):
from Extensions import localisation
app=QApplication
- localisation.localise(None,self.langue)
+ localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
+
+
self.setupUi(self)
#if parent != None : self.parentCentralWidget = parent.centralWidget()
@@ -140,8 +144,7 @@ class Appli(Ui_Eficas,QMainWindow):
# actionARemplacer ne sert que pour l insert Menu
self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
self.menuFichier.removeAction(self.actionARemplacer)
- if monEnvQT5 : self.connecterSignaux()
- else : self.connecterSignauxQT4()
+ self.connecterSignaux()
self.toolBar.addSeparator()
if self.code != None : self.construitMenu()
@@ -166,7 +169,7 @@ class Appli(Ui_Eficas,QMainWindow):
self.ssCode=ssCode
if self.code==None :
self.cleanPath()
- from monChoixCode import MonChoixCode
+ from .monChoixCode import MonChoixCode
widgetChoix = MonChoixCode(self)
ret=widgetChoix.exec_()
import sys
@@ -208,8 +211,8 @@ class Appli(Ui_Eficas,QMainWindow):
if hasattr(self,intituleAction):
action=getattr(self,intituleAction)
self.toolBar.removeAction(action)
- if self.code.upper() in Appli.__dict__.keys():
- listeTexte=apply(Appli.__dict__[self.code.upper()],(self,))
+ if self.code.upper() in Appli.__dict__:
+ listeTexte=Appli.__dict__[self.code.upper()],(self,)
if self.suiteTelemac : self.lookSuiteTelemac()
def initAides(self):
@@ -260,9 +263,7 @@ class Appli(Ui_Eficas,QMainWindow):
self.actionN1 = QAction(self)
self.actionN1.setText(tr("Process Output"))
self.menuN1.addAction(self.actionN1)
- if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
- else : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
-
+ self.actionN1.triggered.connect(self.newN1)
if hasattr(self,'actionOpenProcess'):return
@@ -270,8 +271,7 @@ class Appli(Ui_Eficas,QMainWindow):
self.actionOpenProcess = QAction(self)
self.actionOpenProcess.setText(tr("Open Process_Output File"))
self.menuN1.addAction(self.actionOpenProcess)
- if monEnvQT5 : self.actionOpenProcess.triggered.connect(self.openProcess)
- else : self.connect(self.actionOpenProcess,SIGNAL("triggered()"),self.openProcess)
+ self.actionOpenProcess.triggered.connect(self.openProcess)
def ajoutExecution(self):
self.menuExecution = self.menubar.addMenu(tr("&Run"))
@@ -286,8 +286,7 @@ class Appli(Ui_Eficas,QMainWindow):
if not(self.actionExecution in self.toolBar.actions()):
self.toolBar.addAction(self.actionExecution)
self.actionExecution.setText(tr("Run"))
- if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
- else : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
+ self.actionExecution.triggered.connect(self.run)
def ajoutSauveExecution(self):
self.actionSaveRun = QAction(self)
@@ -298,8 +297,7 @@ class Appli(Ui_Eficas,QMainWindow):
if not(self.actionSaveRun in self.toolBar.actions()):
self.toolBar.addAction(self.actionSaveRun)
self.actionSaveRun.setText(tr("Save Run"))
- if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
- else : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
+ self.actionSaveRun.triggered.connect(self.saveRun)
def griserActionsStructures(self):
self.actionCouper.setEnabled(False)
@@ -330,20 +328,14 @@ class Appli(Ui_Eficas,QMainWindow):
self.actionRechercherDsCatalogue.setVisible(False)
def connectRechercherDsCatalogue(self):
- if monEnvQT5:
- self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
- else :
- self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
+ self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
def ajoutSortieLegere(self):
if hasattr(self,'actionSortieLegere') : return
self.actionSortieLegere = QAction(self)
self.actionSortieLegere.setText(tr("Sortie Legere"))
self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
- if monEnvQT5:
- self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
- else :
- self.connect(self.actionSortieLegere,SIGNAL("triggered()"),self.handleSortieLegere)
+ self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
def ZCRACKS(self):
@@ -398,15 +390,9 @@ class Appli(Ui_Eficas,QMainWindow):
self.menuOptions.setTitle(tr("Options"))
def PSEN(self):
- if self.first:
- self.first=0
- if monEnvQT5:
- self.action_Nouveau.triggered.disconnect(self.fileNew)
- self.action_Nouveau.triggered.connect(self.newPSEN)
- self
- else :
- self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
- self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
+ if self.first: self.first=0
+ self.action_Nouveau.triggered.disconnect(self.fileNew)
+ self.action_Nouveau.triggered.connect(self.newPSEN)
self.enleverActionsStructures()
self.enleverParametres()
self.enleverRechercherDsCatalogue()
@@ -439,8 +425,7 @@ class Appli(Ui_Eficas,QMainWindow):
def ajoutHelpPSEN(self):
self.actionParametres_Eficas.setText('Help PSEN')
- if monEnvQT5 : self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
- else : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.aidePSEN)
+ self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
@@ -520,6 +505,7 @@ class Appli(Ui_Eficas,QMainWindow):
+
# Pour Aster
self.actionTraduitV9V10 = QAction(self)
self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
@@ -583,6 +569,8 @@ class Appli(Ui_Eficas,QMainWindow):
self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
+ self.actionAfficher_l_Arbre.triggered.connect(self.ouvreArbre)
+ self.actionCacher_l_Arbre.triggered.connect(self.fermeArbre)
# Pour Aster
@@ -643,7 +631,7 @@ class Appli(Ui_Eficas,QMainWindow):
def initPatrons(self) :
# Mise a jour du menu des fichiers recemment ouverts
from Editeur import listePatrons
- if not(self.code in listePatrons.sous_menus.keys()) :
+ if not(self.code in listePatrons.sous_menus) :
if hasattr(self,"menuPatrons"):
self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
self.menuPatrons.close()
@@ -658,19 +646,17 @@ class Appli(Ui_Eficas,QMainWindow):
self.menuPatrons.clear()
self.listePatrons = listePatrons.listePatrons(self.code)
idx = 0
- for nomSsMenu in self.listePatrons.liste.keys():
+ for nomSsMenu in self.listePatrons.liste:
ssmenu=self.menuPatrons.addMenu(nomSsMenu)
for fichier in self.listePatrons.liste[nomSsMenu]:
id = ssmenu.addAction(fichier)
self.ficPatrons[id]=fichier
- if monEnvQT5 : self.id.triggered.connect(self.handleOpenPatrons)
- else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
+ self.id.triggered.connect(self.handleOpenPatrons)
# self.Patrons.setItemParameter(id,idx)
idx=idx+1
def initRecents(self):
- if monEnvQT5 : self.recent = []
- else : self.recent = QStringList()
+ self.recent = []
try :
if sys.platform[0:5]=="linux" :
rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
@@ -692,7 +678,6 @@ class Appli(Ui_Eficas,QMainWindow):
except : pass
def addToRecentList(self, fn):
- if not monEnvQT5 : self.addToRecentListQT4(fn); return
while fn in self.recent: self.recent.remove(fn)
self.recent.insert(0,fn)
if len(self.recent) > 9:
@@ -736,19 +721,19 @@ class Appli(Ui_Eficas,QMainWindow):
def traductionV11V12(self):
- from gereTraduction import traduction
+ from .gereTraduction import traduction
traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
def traductionV10V11(self):
- from gereTraduction import traduction
+ from .gereTraduction import traduction
traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
def traductionV9V10(self):
- from gereTraduction import traduction
+ from .gereTraduction import traduction
traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
def version(self) :
- from monVisu import DVisu
+ from .monVisu import DVisu
titre = tr("version ")
monVisuDialg=DVisu(parent=self,fl=0)
monVisuDialg.setWindowTitle(titre)
@@ -823,8 +808,7 @@ class Appli(Ui_Eficas,QMainWindow):
for rp in self.recent:
id = self.recentMenu.addAction(rp)
self.ficRecents[id]=rp
- if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
- else : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
+ id.triggered.connect(self.handleOpenRecent)
self.recentMenu.addSeparator()
self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
@@ -850,7 +834,7 @@ class Appli(Ui_Eficas,QMainWindow):
try:
self.viewmanager.newEditor()
except EficasException as exc:
- msg = unicode(exc)
+ msg = six.text_type(exc)
if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
def openProcess(self):
@@ -871,7 +855,7 @@ class Appli(Ui_Eficas,QMainWindow):
try:
self.viewmanager.handleOpen()
except EficasException as exc:
- msg = unicode(exc)
+ msg = six.text_type(exc)
if msg != "":
QMessageBox.warning(self, tr(u"Erreur"), msg)
@@ -934,6 +918,11 @@ class Appli(Ui_Eficas,QMainWindow):
def visuJdcPy(self):
self.viewmanager.handleViewJdcPy()
+ def ouvreArbre(self):
+ self.viewmanager.ouvreArbre()
+
+ def fermeArbre(self):
+ self.viewmanager.fermeArbre()
def NewInclude(self):
self.viewmanager.newIncludeEditor()
diff --git a/InterfaceQT4/qtSaisie.py b/InterfaceQT4/qtSaisie.py
index 33a6c1ca..4ea5a099 100644
--- a/InterfaceQT4/qtSaisie.py
+++ b/InterfaceQT4/qtSaisie.py
@@ -18,20 +18,21 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# Modules Python
-import string,types,os
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+
+import types,os
from Extensions.i18n import tr
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtCore import Qt
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from PyQt5.QtCore import Qt
# Import des panels
-class SaisieValeur:
+class SaisieValeur(object):
"""
Classe contenant les methodes communes aux panels
permettant de choisir des valeurs
@@ -44,8 +45,17 @@ class SaisieValeur:
if valeur == None :
nouvelleValeur=str(self.lineEditVal.text())
else :
- if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
+ #PN PN PN ???? la 1 ligne est tres bizarre.
+ try :
+ if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom))
+ except :
+ if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur)
nouvelleValeur=valeur
+ if self.node.item.definition.validators != None :
+ if self.node.item.definition.validators.verif_item(nouvelleValeur) !=1 :
+ commentaire=self.node.item.definition.validators.info_erreur_item()
+ self.editor.affiche_infos(commentaire,Qt.red)
+ return
nouvelleValeurFormat=self.politique.GetValeurTexte(nouvelleValeur)
validite,commentaire=self.politique.RecordValeur(nouvelleValeurFormat)
if commentaire != "" :
@@ -87,7 +97,7 @@ class SaisieValeur:
except :
valeur=valeurBrute
- if type(valeur) in (types.ListType,types.TupleType) :
+ if type(valeur) in (list,tuple) :
if self.node.item.wait_complex() :
indice = 0
while (indice < len(valeur)):
@@ -111,14 +121,14 @@ class SaisieValeur:
else: # on n'attend pas un complexe
listeValeurs=valeurBrute.split(',')
- elif type(valeur) == types.StringType:
+ elif type(valeur) == bytes:
listeValeurs=valeur.split(',')
else:
listeValeurs.append(valeurBrute)
return listeValeurs,1
-class SaisieSDCO :
+class SaisieSDCO(object) :
def LESDCOReturnPressed(self):
"""
diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py
index a0b480af..b3def9c2 100644
--- a/InterfaceQT4/readercata.py
+++ b/InterfaceQT4/readercata.py
@@ -23,10 +23,17 @@
Il s'appuie sur la classe READERCATA
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
import time
import os,sys,py_compile
import traceback
-import cPickle
+import six.moves.cPickle
import re
import types
@@ -38,19 +45,15 @@ import analyse_catalogue
import analyse_catalogue_initial
import autre_analyse_cata
import uiinfo
-from monChoixCata import MonChoixCata
+from .monChoixCata import MonChoixCata
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-from determine import monEnvQT5
-if monEnvQT5 :
- from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog
-else :
- from PyQt4.QtGui import *
+from PyQt5.QtWidgets import QMessageBox, QApplication, QDialog
-class READERCATA:
+class READERCATA(object):
def __init__(self,QWParent, appliEficas):
self.QWParent=QWParent
@@ -67,7 +70,7 @@ class READERCATA:
self.cataitem=None
self.cree_dico_inverse()
if self.code=="TELEMAC": self.cree_dico_CasToCata()
- #for k in self.dicoInverse.keys():
+ #for k in self.dicoInverse:
# genea= self.dicoInverse[k]
# for t in genea :
# print t[0]
@@ -87,10 +90,10 @@ class READERCATA:
for catalogue in self.appliEficas.CONFIGURATION.catalogues:
if isinstance(catalogue, CatalogDescription):
all_cata_list.append(catalogue)
- elif isinstance(catalogue, types.TupleType):
+ elif isinstance(catalogue, tuple):
all_cata_list.append(CatalogDescription.create_from_tuple(catalogue))
else:
- print ("Catalog description cannot be interpreted: ", catalogue)
+ print(("Catalog description cannot be interpreted: ", catalogue))
# This filter is only useful for codes that have subcodes (like MAP).
# Otherwise, the "code" attribute of the catalog description can (should) be None.
@@ -143,7 +146,7 @@ class READERCATA:
if self.fic_cata == None :
if self.appliEficas.salome == 0 :
- print ("Pas de catalogue pour code %s, version %s" %(self.code,self.version_code))
+ print(("Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)))
sys.exit(1)
else :
self.appliEficas.close()
@@ -155,7 +158,7 @@ class READERCATA:
self.cata = self.import_cata(self.fic_cata)
if not self.cata :
QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fic_cata)
- self.appliEficas.close()
+ self.appliEficas.close()
if self.appliEficas.salome == 0 :
sys.exit(1)
#
@@ -218,9 +221,9 @@ class READERCATA:
self.appliEficas.listeAEnlever.append(rep_cata)
- if sys.modules.has_key(nom_cata):
+ if nom_cata in list(sys.modules.keys()) :
del sys.modules[nom_cata]
- for k in sys.modules.keys():
+ for k in sys.modules:
if k[0:len(nom_cata)+1] == nom_cata+'.':
del sys.modules[k]
@@ -315,7 +318,7 @@ class READERCATA:
docu=l[deb:-1]
dict_clef_docu[clef]=docu
for oper in self.cata.JdC.commandes:
- if dict_clef_docu.has_key(oper.nom):
+ if oper.nom in dict_clef_docu :
oper.docu=dict_clef_docu[oper.nom]
def cree_dico_inverse(self):
@@ -327,7 +330,7 @@ class READERCATA:
#self.dicoFrancaisAnglais={}
#self.dicoAnglaisFrancais={}
- #for k in self.dicoInverse.keys():
+ #for k in self.dicoInverse:
# listefr=[]
# for nom, obj in self.dicoInverse[k] :
# listefr.append((tr(nom),obj))
@@ -349,7 +352,7 @@ class READERCATA:
def traite_entite(self,e):
boolIn=0
- for (nomFils, fils) in e.entites.items() :
+ for (nomFils, fils) in list(e.entites.items()) :
self.dicoMC[nomFils]=fils
self.traite_entite(fils)
boolIn=1
@@ -369,8 +372,8 @@ class READERCATA:
#if niveau != 0 :
# if isinstance(e,A_BLOC.BLOC): print decale, e.condition
# else : print decale, e. nom
- for (nom, fils) in e.entites.items() :
- if fils.entites.items() != [] : self.cree_rubrique(fils,dico,niveau+1)
+ for (nom, fils) in list(e.entites.items()) :
+ if list(fils.entites.items()) != [] : self.cree_rubrique(fils,dico,niveau+1)
#else : print (niveau+1)*" ", nom
diff --git a/InterfaceQT4/ssIhm.py b/InterfaceQT4/ssIhm.py
index aa532c62..350cfb73 100644
--- a/InterfaceQT4/ssIhm.py
+++ b/InterfaceQT4/ssIhm.py
@@ -18,8 +18,11 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# permet de lancer EFICAS en n affichant rien
+try :
+ from builtins import object
+except : pass
-class appliEficasSSIhm:
+class appliEficasSSIhm(object):
def __init__ (self,code):
self.VERSION_EFICAS="Sans Ihm"
self.code=code
@@ -47,7 +50,7 @@ class appliEficasSSIhm:
configuration=__import__(nameConf)
self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
-class QWParentSSIhm:
+class QWParentSSIhm(object):
def __init__(self,code,appliEficas,version_code,ssCode=None):
self.ihm="QT"
self.code=code
diff --git a/InterfaceQT4/typeNode.py b/InterfaceQT4/typeNode.py
index 0226a7a3..57992871 100644
--- a/InterfaceQT4/typeNode.py
+++ b/InterfaceQT4/typeNode.py
@@ -17,12 +17,12 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QAction, QMenu, QMessageBox
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+from PyQt5.QtWidgets import QAction, QMenu, QMessageBox
from Extensions.i18n import tr
import types
@@ -30,17 +30,14 @@ import types
#---------------------------#
-class PopUpMenuRacine :
+class PopUpMenuRacine(object) :
#---------------------------#
def createPopUpMenu(self):
#print "createPopUpMenu"
self.ParamApres = QAction(tr('Parametre'),self.tree)
- if monEnvQT5 :
- self.ParamApres.triggered.connect(self.addParametersApres)
- else :
- self.tree.connect(self.ParamApres,SIGNAL("triggered()"),self.addParametersApres)
+ self.ParamApres.triggered.connect(self.addParametersApres)
self.ParamApres.setStatusTip(tr("Insere un parametre"))
self.menu = QMenu(self.tree)
self.menu.addAction(self.ParamApres)
@@ -52,14 +49,13 @@ class PopUpMenuRacine :
item.addParameters(True)
#---------------------------#
-class PopUpMenuNodeMinimal :
+class PopUpMenuNodeMinimal(object) :
#---------------------------#
def createPopUpMenu(self):
#print "createPopUpMenu"
#self.appliEficas.salome=True
- if monEnvQT5 : self.createActions()
- else : self.createActionsQT4()
+ self.createActions()
self.menu = QMenu(self.tree)
#self.menu.setStyleSheet("background:rgb(235,235,235); QMenu::item:selected { background-color: red; }")
#ne fonctionne pas --> la ligne de commentaire devient rouge
@@ -67,20 +63,20 @@ class PopUpMenuNodeMinimal :
#items du menu
self.menu.addAction(self.Supprime)
if hasattr(self.appliEficas, 'mesScripts'):
- if self.editor.code in self.editor.appliEficas.mesScripts.keys() :
+ if self.editor.code in self.editor.appliEficas.mesScripts :
self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
- if self.tree.currentItem().item.get_nom() in self.dict_commandes_mesScripts.keys() :
+ if self.tree.currentItem().item.get_nom() in self.dict_commandes_mesScripts :
self.ajoutScript()
def ajoutScript(self):
# cochon mais je n arrive pas a faire mieux avec le mecanisme de plugin
if hasattr(self.appliEficas, 'mesScripts'):
- if self.editor.code in self.editor.appliEficas.mesScripts.keys() :
+ if self.editor.code in self.editor.appliEficas.mesScripts :
self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
else : return
listeCommandes=self.dict_commandes_mesScripts[self.tree.currentItem().item.get_nom()]
- if type(listeCommandes) != types.TupleType: listeCommandes=(listeCommandes,)
+ if type(listeCommandes) != tuple: listeCommandes=(listeCommandes,)
numero=0
for commande in listeCommandes :
conditionSalome=commande[3]
@@ -89,36 +85,11 @@ class PopUpMenuNodeMinimal :
tip=commande[5]
self.action=QAction(label,self.tree)
self.action.setStatusTip(tip)
- if monEnvQT5 :
- if numero==4:
- self.action.triggered.connect(self.AppelleFonction4)
- if numero==3:
- self.action.triggered.connect(self.AppelleFonction3)
- numero=4
- if numero==2:
- self.action.triggered.connect(self.AppelleFonction2)
- numero=3
- if numero==1:
- self.action.triggered.connect(self.AppelleFonction1)
- numero=2
- if numero==0:
- self.action.triggered.connect(self.AppelleFonction0)
- numero=1
- else:
- if numero==4:
- self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction4)
- if numero==3:
- self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction3)
- numero=4
- if numero==2:
- self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction2)
- numero=3
- if numero==1:
- self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction1)
- numero=2
- if numero==0:
- self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction0)
- numero=1
+ if numero==4: self.action.triggered.connect(self.AppelleFonction4)
+ if numero==3: self.action.triggered.connect(self.AppelleFonction3); numero=4
+ if numero==2: self.action.triggered.connect(self.AppelleFonction2); numero=3
+ if numero==1: self.action.triggered.connect(self.AppelleFonction1); numero=2
+ if numero==0: self.action.triggered.connect(self.AppelleFonction0); numero=1
self.menu.addAction(self.action)
@@ -142,7 +113,7 @@ class PopUpMenuNodeMinimal :
if nodeTraite==None : nodeTraite=self.tree.currentItem()
nomCmd=nodeTraite.item.get_nom()
if hasattr(self.appliEficas, 'mesScripts'):
- if self.editor.code in self.editor.appliEficas.mesScripts.keys() :
+ if self.editor.code in self.editor.appliEficas.mesScripts :
self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes
else : return
listeCommandes=self.dict_commandes_mesScripts[nomCmd]
@@ -152,7 +123,7 @@ class PopUpMenuNodeMinimal :
QMessageBox.warning( None,
tr("item invalide"),
tr("l item doit etre valide"),)
- return
+ return
fonction=commande[0]
listenomparam=commande[2]
listeparam=[]
@@ -167,7 +138,7 @@ class PopUpMenuNodeMinimal :
QMessageBox.warning( None,
tr("echec de la fonction"),
tr(commentaire),)
- return
+ return
except :
pass
diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py
index b939951a..3b83d341 100644
--- a/InterfaceQT4/viewManager.py
+++ b/InterfaceQT4/viewManager.py
@@ -18,18 +18,20 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import os, string
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
+import os
from Extensions.i18n import tr
-from determine import monEnvQT5
-if monEnvQT5:
- from PyQt5.QtWidgets import QFileDialog, QMessageBox
- from PyQt5.QtCore import QFileInfo
-else :
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
+import six
+from PyQt5.QtWidgets import QFileDialog, QMessageBox
+from PyQt5.QtCore import QFileInfo
DictExtensions= {"MAP" : ".map"}
-class MyTabview:
+class MyTabview(object):
def __init__(self,appliEficas):
self.appliEficas=appliEficas
@@ -43,17 +45,12 @@ class MyTabview:
self.myQtab = self.appliEficas.myQtab
- if monEnvQT5:
- self.myQtab.currentChanged.connect(self.indexChanged)
- self.myQtab.tabCloseRequested.connect(self.closeTab)
- else :
- self.myQtab.connect(self.myQtab, SIGNAL('tabCloseRequested(int)'), self.closeTab)
- if self.appliEficas.multi== True:
- self.myQtab.connect(self.myQtab,SIGNAL("currentChanged(int)"),self.indexChanged)
+ self.myQtab.currentChanged.connect(self.indexChanged)
+ self.myQtab.tabCloseRequested.connect(self.closeTab)
def indexChanged(self):
index=self.myQtab.currentIndex()
- if self.dict_editors.has_key(index):
+ if index in self.dict_editors:
editor=self.dict_editors[index]
self.appliEficas.CONFIGURATION=editor.CONFIGURATION
self.appliEficas.code=editor.CONFIGURATION.code
@@ -67,7 +64,7 @@ class MyTabview:
self.appliEficas.definitCode(None,None)
if self.appliEficas.code == None:return
- if DictExtensions.has_key(self.appliEficas.code) :
+ if self.appliEficas.code in DictExtensions:
chaine="JDC (*"+DictExtensions[self.appliEficas.code]+");;"
extensions=tr(chaine+ "All Files (*)")
else :
@@ -77,10 +74,9 @@ class MyTabview:
tr('Ouvrir Fichier'),
self.appliEficas.CONFIGURATION.savedir,
extensions)
- if monEnvQT5 : fichier=fichier[0]
- if not fichier: return result
- fichier = os.path.abspath(unicode(fichier))
- ulfile = os.path.abspath(unicode(fichier))
+ fichier=fichier[0]
+ fichier = os.path.abspath(six.text_type(fichier))
+ ulfile = os.path.abspath(six.text_type(fichier))
self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
self.appliEficas.addToRecentList(fichier)
maPage=self.getEditor( fichier,units=units)
@@ -193,6 +189,16 @@ class MyTabview:
if index < 0 : return
self.dict_editors[index].viewJdcSource()
+ def ouvreArbre(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dict_editors[index].ouvreArbre()
+
+ def fermeArbre(self):
+ index=self.myQtab.currentIndex()
+ if index < 0 : return
+ self.dict_editors[index].fermeArbre()
+
def handleViewJdcRegles(self):
index=self.myQtab.currentIndex()
if index < 0 : return
@@ -219,7 +225,7 @@ class MyTabview:
index=self.myQtab.currentIndex()
if index < 0 : return
editor=self.dict_editors[index]
- if editor in self.doubles.keys() :
+ if editor in self.doubles :
QMessageBox.warning(
None,
tr("Fichier Duplique"),
@@ -227,7 +233,7 @@ class MyTabview:
return
ok, newName = editor.saveFile()
if ok :
- fileName=os.path.basename(unicode(newName))
+ fileName=os.path.basename(six.text_type(newName))
self.myQtab.setTabText(index,fileName)
return ok
@@ -242,7 +248,7 @@ class MyTabview:
index=self.myQtab.currentIndex()
if index < 0 : return
editor=self.dict_editors[index]
- if editor in self.doubles.keys() :
+ if editor in self.doubles :
QMessageBox.warning(
None,
tr("Fichier Duplique"),
@@ -250,7 +256,7 @@ class MyTabview:
return
ok, newName = editor.sauveLigneFile()
if ok :
- fileName=os.path.basename(unicode(newName))
+ fileName=os.path.basename(six.text_type(newName))
self.myQtab.setTabText(index,fileName)
return ok
@@ -261,9 +267,9 @@ class MyTabview:
oldName=editor.fichier
ok,newName = editor.saveFileAs()
if ok :
- fileName=os.path.basename(unicode(newName))
+ fileName=os.path.basename(six.text_type(newName))
self.myQtab.setTabText(index,fileName)
- if editor in self.doubles.keys():
+ if editor in self.doubles :
if oldName != newName :
del self.doubles[editor]
return ok
@@ -283,26 +289,19 @@ class MyTabview:
newWin = 0
double = None
indexEditor=0
- for indexEditor in self.dict_editors.keys():
+ for indexEditor in self.dict_editors :
editor=self.dict_editors[indexEditor]
if self.samepath(fichier, editor.getFileName()):
- if monEnvQT5 :
- msgBox = QMessageBox()
- msgBox.setWindowTitle(tr("Fichier"))
- msgBox.setText(tr("Le fichier %s est deja ouvert", str(fichier)))
- msgBox.addButton(tr("&Duplication"),0)
- msgBox.addButton(tr("&Abandonner"),1)
- abort=msgBox.exec_()
- else :
- abort = QMessageBox.warning(self.appliEficas,
- tr("Fichier"),
- tr("Le fichier %s est deja ouvert.",str(fichier)),
- tr("&Duplication"),
- tr("&Abort"))
+ msgBox = QMessageBox()
+ msgBox.setWindowTitle(tr("Fichier"))
+ msgBox.setText(tr("Le fichier %s est deja ouvert", str(fichier)))
+ msgBox.addButton(tr("&Duplication"),0)
+ msgBox.addButton(tr("&Abandonner"),1)
+ abort=msgBox.exec_()
if abort: break
double=editor
else :
- from editor import JDCEditor
+ from .editor import JDCEditor
editor = JDCEditor(self.appliEficas,fichier, jdc, self.myQtab,units=units,vm = self,include=include)
if double != None :
@@ -364,45 +363,29 @@ class MyTabview:
@return flag indicating successful reset of the dirty flag (boolean)
"""
res=1
- if (editor.modified) and (editor in self.doubles.keys()) :
- if monEnvQT5 :
- msgBox = QMessageBox(None)
- msgBox.setWindowTitle(tr("Fichier Duplique"))
- msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
- msgBox.addButton(texte,0)
- msgBox.addButton(tr("&Annuler"),1)
- res=msgBox.exec_()
- else:
- res = QMessageBox.warning(
- None,
- tr("Fichier Duplique"),
- tr("Le fichier ne sera pas sauvegarde."),
- tr(texte),
- tr("&Annuler"))
+ if (editor.modified) and (editor in self.doubles) :
+ msgBox = QMessageBox(None)
+ msgBox.setWindowTitle(tr("Fichier Duplique"))
+ msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
+ msgBox.addButton(texte,0)
+ msgBox.addButton(tr("&Annuler"),1)
+ res=msgBox.exec_()
if res == 0 : return 1
return 2
if editor.modified:
fn = editor.getFileName()
if fn is None: fn = tr('Noname')
- if monEnvQT5 :
- msgBox = QMessageBox(None)
- msgBox.setWindowTitle(tr("Fichier Modifie"))
- msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
- msgBox.addButton(tr("&Sauvegarder"),1)
- msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
- res=msgBox.exec_()
- else :
- res = QMessageBox.warning(self.appliEficas,
- tr("Fichier Modifie"),
- tr("Le fichier %s n a pas ete sauvegarde.",str(fn)),
- tr("&Sauvegarder"),
- tr(texte),
- tr("&Quitter sans sauvegarder") )
- if res == 2 : res = 1
+ msgBox = QMessageBox(None)
+ msgBox.setWindowTitle(tr("Fichier Modifie"))
+ msgBox.setText(tr("Le fichier ne sera pas sauvegarde."))
+ msgBox.addButton(tr("&Sauvegarder"),1)
+ msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
+ res=msgBox.exec_()
+ if res == 2 : res = 1
if res == 0:
(ok, newName) = editor.saveFile()
if ok:
- fileName=os.path.basename(unicode(newName))
+ fileName=os.path.basename(six.text_type(newName))
index=self.myQtab.currentIndex()
self.myQtab.setTabText(index,fileName)
return ok
diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py
index 0e9a566a..0ca831da 100644
--- a/Noyau/N_ASSD.py
+++ b/Noyau/N_ASSD.py
@@ -21,9 +21,12 @@
"""
-from N_utils import import_object
-from N_info import message, SUPERV
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import object
+except : pass
class ASSD(object):
@@ -35,8 +38,8 @@ class ASSD(object):
def __init__(self, etape=None, sd=None, reg='oui'):
"""
- reg est un paramètre qui vaut oui ou non :
- - si oui (défaut) : on enregistre la SD auprès du JDC
+ reg est un parametre qui vaut oui ou non :
+ - si oui (défaut) : on enregistre la SD aupres du JDC
- si non : on ne l'enregistre pas
"""
self.etape = etape
@@ -93,10 +96,7 @@ class ASSD(object):
sdj = property(_get_sdj, None, _del_sdj)
def __getitem__(self, key):
- from strfunc import convert
- text_error = convert(_(u"ASSD.__getitem__ est déprécié car la référence à "
- u"l'objet ETAPE parent sera supprimée."))
- # raise NotImplementedError(text_error)
+ text_error = "ASSD.__getitem__ est déprécié car la référence a l'objet ETAPE parent sera supprimée."
from warnings import warn
warn(text_error, DeprecationWarning, stacklevel=2)
return self.etape[key]
@@ -151,10 +151,6 @@ class ASSD(object):
# 'del self.sdj' appellerait la méthode '_get_sdj()'...
self._del_sdj()
- def __del__(self):
- # message.debug(SUPERV, "__del__ ASSD %s <%s>", getattr(self, 'nom',
- # 'unknown'), self)
- pass
def accept(self, visitor):
"""
@@ -167,15 +163,15 @@ class ASSD(object):
"""
Cette methode permet de pickler les objets ASSD
Ceci est possible car on coupe les liens avec les objets
- parent, etape et jdc qui conduiraient à pickler de nombreux
+ parent, etape et jdc qui conduiraient a pickler de nombreux
objets inutiles ou non picklables.
- En sortie, l'objet n'est plus tout à fait le même !
+ En sortie, l'objet n'est plus tout a fait le même !
"""
d = self.__dict__.copy()
for key in ('parent', 'etape', 'jdc'):
- if d.has_key(key):
+ if key in d :
del d[key]
- for key in d.keys():
+ for key in list(d.keys()):
if key in ('_as_co', ):
continue
if key[0] == '_':
@@ -186,23 +182,23 @@ class ASSD(object):
"""Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD.
"""
if CONTEXT.debug:
- print '| accessible ?', self.nom
+ print(('| accessible ?', self.nom))
is_accessible = CONTEXT.get_current_step().sd_accessible()
if CONTEXT.debug:
- print ' `- is_accessible =', repr(is_accessible)
+ print((' `- is_accessible =', repr(is_accessible)))
return is_accessible
def filter_context(self, context):
"""Filtre le contexte fourni pour retirer (en gros) ce qui vient du catalogue."""
- from N_ENTITE import ENTITE
+ from .N_ENTITE import ENTITE
import types
ctxt = {}
- for key, value in context.items():
- if type(value) is types.ClassType:
+ for key, value in list(context.items()):
+ if type(value) is type:
continue
if type(value) is types.ModuleType and value.__name__.startswith('Accas'):
continue
- if issubclass(type(value), types.TypeType):
+ if issubclass(type(value), type):
continue
if isinstance(value, ENTITE):
continue
diff --git a/Noyau/N_ASSD_NonAster.py b/Noyau/N_ASSD_NonAster.py
deleted file mode 100644
index 8991c724..00000000
--- a/Noyau/N_ASSD_NonAster.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-
-"""
-
-"""
-
-class ASSD(object):
- """
- Classe de base pour definir des types de structures de donnees ASTER
- equivalent d un concept ASTER
- """
- idracine="SD"
-
- def __init__(self,etape=None,sd=None,reg='oui'):
- """
- reg est un paramètre qui vaut oui ou non :
- - si oui (défaut) : on enregistre la SD auprès du JDC
- - si non : on ne l'enregistre pas
- """
- self.etape=etape
- self.sd=sd
- self.nom=None
- if etape:
- self.parent=etape.parent
- else:
- self.parent=CONTEXT.get_current_step()
- if self.parent :
- self.jdc = self.parent.get_jdc_root()
- else:
- self.jdc = None
-
- if not self.parent:
- self.id=None
- elif reg == 'oui' :
- self.id = self.parent.reg_sd(self)
- else :
- self.id = self.parent.o_register(self)
- # permet de savoir si le concept a été calculé (1) ou non (0)
- self.executed = 0
- # initialise la partie "sd"
- super(ASSD, self).__init__(nomj='?&?&?&?&')
-
- def __getitem__(self,key):
- return self.etape[key]
-
- def set_name(self, nom):
- """Positionne le nom de self (et appelle sd_init)
- """
- self.nom = nom
- # test car FORMULE n'a pas de SD associée
- meth = getattr(super(ASSD, self), 'set_name', None)
- if meth:
- meth(nom)
-
- def reparent_sd(self):
- """Repositionne le parent des attributs de la SD associée.
- """
- # test car FORMULE n'a pas de SD associée
- meth = getattr(super(ASSD, self), 'reparent', None)
- if meth:
- meth(None, None)
-
- def get_name(self):
- """
- Retourne le nom de self, éventuellement en le demandant au JDC
- """
- if not self.nom :
- try:
- self.nom=self.parent.get_name(self) or self.id
- except:
- self.nom=""
- if self.nom.find('sansnom') != -1 or self.nom == '':
- self.nom = self.id
- return self.nom
-
- def supprime(self):
- """
- Cassage des boucles de références pour destruction du JDC
- """
- self.etape = None
- self.sd = None
- self.jdc = None
- self.parent = None
-
- def accept(self,visitor):
- """
- Cette methode permet de parcourir l'arborescence des objets
- en utilisant le pattern VISITEUR
- """
- visitor.visitASSD(self)
-
- def __getstate__(self):
- """
- Cette methode permet de pickler les objets ASSD
- Ceci est possible car on coupe les liens avec les objets
- parent, etape et jdc qui conduiraient à pickler de nombreux
- objets inutiles ou non picklables.
- """
- d=self.__dict__.copy()
- for key in ('parent','etape','jdc'):
- if d.has_key(key):del d[key]
- for key in d.keys():
- if key[0]=='_':del d[key]
- return d
-
- def par_lot(self):
- """
- Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'.
- """
- if not hasattr(self, 'jdc') or self.jdc == None:
- val = None
- else:
- val = self.jdc.par_lot
- return val == 'OUI'
-
-class assd(ASSD):
- def __convert__(cls,valeur):
- return valeur
- __convert__=classmethod(__convert__)
diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py
index e9959fc5..dd33cfdf 100644
--- a/Noyau/N_BLOC.py
+++ b/Noyau/N_BLOC.py
@@ -23,16 +23,16 @@
qui permet de spécifier les caractéristiques des blocs de mots clés
"""
+from __future__ import absolute_import
+from __future__ import print_function
import types
-import string
import sys
import traceback
-import N_ENTITE
-import N_MCBLOC
-from N_Exception import AsException
-from N_types import force_list
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_MCBLOC
+from .N_Exception import AsException
+from .N_types import force_list
class BLOC(N_ENTITE.ENTITE):
@@ -70,7 +70,7 @@ class BLOC(N_ENTITE.ENTITE):
self.fr = fr
self.ang = ang
self.docu = docu
- if type(regles) == types.TupleType:
+ if type(regles) == tuple:
self.regles = regles
else:
self.regles = (regles,)
@@ -124,7 +124,7 @@ class BLOC(N_ENTITE.ENTITE):
if CONTEXT.debug:
l = traceback.format_exception(
sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
- print "WARNING : Erreur a l'evaluation de la condition " + string.join(l)
+ print(("WARNING : Erreur a l'evaluation de la condition " + ''.join(l)))
return 0
except SyntaxError:
# le texte de la condition n'est pas du Python correct -->
@@ -133,13 +133,13 @@ class BLOC(N_ENTITE.ENTITE):
sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
raise AsException(
"Catalogue entite : ", self.nom, ", de pere : ", self.pere.nom,
- '\n', "Erreur dans la condition : ", self.condition, string.join(l))
+ '\n', "Erreur dans la condition : ", self.condition, ''.join(l))
except:
l = traceback.format_exception(
sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
raise AsException(
"Catalogue entite : ", self.nom, ", de pere : ", self.pere.nom,
- '\n', "Erreur dans la condition : ", self.condition, string.join(l))
+ '\n', "Erreur dans la condition : ", self.condition, ''.join(l))
else:
return 0
diff --git a/Noyau/N_CO.py b/Noyau/N_CO.py
index 5faab5f3..76025307 100644
--- a/Noyau/N_CO.py
+++ b/Noyau/N_CO.py
@@ -18,15 +18,17 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-from N_ASSD import ASSD
-from N_Exception import AsException
-from N_VALIDATOR import ValError
-import N_utils
+from __future__ import absolute_import
+from .N_ASSD import ASSD
+from .N_Exception import AsException
+from .N_VALIDATOR import ValError
+from . import N_utils
-from asojb import AsBase
+#from asojb import AsBase
-class CO(ASSD, AsBase):
+#class CO(ASSD, AsBase):
+class CO(ASSD) :
def __init__(self, nom):
ASSD.__init__(self, etape=None, sd=None, reg='oui')
@@ -37,7 +39,7 @@ class CO(ASSD, AsBase):
if self.parent:
try:
self.parent.NommerSdprod(self, nom)
- except AsException, e:
+ except AsException as e:
appel = N_utils.callee_where(niveau=2)
raise AsException(
"Concept CO, fichier: ", appel[1], " ligne : ", appel[0], '\n', e)
diff --git a/Noyau/N_CONVERT.py b/Noyau/N_CONVERT.py
index f2bbc99c..d4fc92ac 100644
--- a/Noyau/N_CONVERT.py
+++ b/Noyau/N_CONVERT.py
@@ -21,7 +21,12 @@
Module de conversion des valeurs saisies par l'utilisateur après vérification.
"""
-from N_types import is_int, is_float, is_sequence
+from __future__ import absolute_import
+try:
+ from builtins import object
+except : pass
+
+from .N_types import is_int, is_float, is_sequence
def has_int_value(real):
@@ -30,7 +35,7 @@ def has_int_value(real):
return abs(int(real) - real) < 1.e-12
-class Conversion:
+class Conversion(object):
"""Conversion de type.
"""
@@ -58,7 +63,7 @@ class Conversion:
return tuple(result)
def function(self, o):
- raise NotImplementedError, 'cette classe doit être dérivée'
+ raise NotImplementedError('cette classe doit être dérivée')
class TypeConversion(Conversion):
diff --git a/Noyau/N_CR.py b/Noyau/N_CR.py
index 02200dfe..e304f9d2 100644
--- a/Noyau/N_CR.py
+++ b/Noyau/N_CR.py
@@ -21,14 +21,19 @@
""" Ce module contient la classe compte-rendu de validation
"""
-import string
-from strfunc import convert, ufmt
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
+import six
-class CR:
+class CR(object):
"""
- Classe servant à la construction et à l'affichage des objets Comptes-rendus
+ Classe servant a la construction et a l'affichage des objets Comptes-rendus
"""
def __init__(self, verbeux='non', debut='', fin='', dec=' '):
@@ -50,23 +55,24 @@ class CR:
self.subcr = []
def ok(self, comment):
- """ Ajoute un commentaire OK Ã la liste crok"""
+ """ Ajoute un commentaire OK a la liste crok"""
self.crok.append(comment)
def warn(self, comment):
- """ Ajoute un commentaire Warning à la liste crwarn"""
+ """ Ajoute un commentaire Warning a la liste crwarn"""
self.crwarn.append(comment)
def fatal(self, comment, *args):
- """Ajoute un commentaire Erreur Fatale à la liste crfatal à formater"""
- self.crfatal.append(ufmt(comment, *args))
+ """Ajoute un commentaire Erreur Fatale a la liste crfatal a formater"""
+ self.crfatal.append(comment)
+ self.crfatal.append(str( *args))
def exception(self, comment):
- """ Ajoute un commentaire Exception à la liste crexception"""
+ """ Ajoute un commentaire Exception a la liste crexception"""
self.crexception.append(comment)
def add(self, cr):
- """ Ajoute un objet CR Ã la liste subcr :il s'agit de l'objet CR d'un fils de self """
+ """ Ajoute un objet CR a la liste subcr :il s'agit de l'objet CR d'un fils de self """
self.subcr.append(cr)
def estvide(self):
@@ -120,8 +126,9 @@ class CR:
"""
Insère en tete de chaque ligne du texte s la chaine self.dec
"""
- l = string.split(s, '\n')
- return self.dec + string.join(l, '\n' + self.dec)[:-3]
+ l = s.split( '\n')
+ a='\n' + self.dec
+ return self.dec + a.join(l)[:-3]
def __unicode__(self):
"""
@@ -129,16 +136,16 @@ class CR:
"""
s = ''
self.beautifie_messages()
- s = s + string.join(self.crok_belle, '')
- s = s + string.join(self.crwarn_belle, '')
- s = s + string.join(self.crfatal_belle, '')
- s = s + string.join(self.crexception_belle, '')
+ s = s + ''.join(self.crok_belle)
+ s = s + ''.join(self.crwarn_belle)
+ s = s + ''.join(self.crfatal_belle)
+ s = s + ''.join(self.crexception_belle)
for subcr in self.subcr:
if self.verbeux == 'oui':
- s = s + unicode(subcr) + '\n'
+ s = s + six.text_type(subcr) + '\n'
else:
if not subcr.estvide():
- s = s + unicode(subcr)
+ s = s + six.text_type(subcr)
if s != '':
s = self.debut + '\n' + self.indent(s) + self.fin + '\n'
else:
@@ -147,8 +154,7 @@ class CR:
def __str__(self):
"""Return the report representation"""
- # convert into the output encoding
- txt = convert(self.__unicode__())
+ txt = self.__unicode__()
return txt
def report(self, decalage=2):
@@ -204,7 +210,7 @@ separateurs = (' ', ',', '/')
def split(ligne, cesure):
- ligne = string.rstrip(ligne)
+ ligne = ligne.rstrip()
if len(ligne) <= cesure:
return ligne
else:
@@ -223,10 +229,11 @@ def split(ligne, cesure):
def justify_text(texte='', cesure=50):
- texte = string.strip(texte)
- liste_lignes = string.split(texte, '\n')
+ if not isinstance (texte,str) : texte = ''.join(texte)
+ texte = texte.strip()
+ liste_lignes = texte.split('\n')
l = [split(l, cesure) for l in liste_lignes]
- texte_justifie = string.join(l, '\n')
+ texte_justifie = '\n'.join(l)
return texte_justifie
@@ -236,15 +243,17 @@ def encadre_message(texte, motif):
d'éléments 'motif'
"""
texte = justify_text(texte, cesure=80)
- lignes = string.split(texte, '\n')
+ if texte.strip() == "" : return ''
+ lignes = texte.split( '\n')
longueur = 0
for ligne in lignes:
- ligne = string.rstrip(ligne)
+ ligne = ligne.rstrip()
if len(ligne) > longueur:
longueur = len(ligne)
longueur = longueur + 4
txt = motif * longueur + '\n'
for ligne in lignes:
+ if ligne == '' : continue
txt = txt + motif + ' ' + ligne + ' ' * \
(longueur - len(motif + ligne) - 2) + motif + '\n'
txt = txt + motif * longueur + '\n'
diff --git a/Noyau/N_ENTITE.py b/Noyau/N_ENTITE.py
index 87a0463d..27e13d50 100644
--- a/Noyau/N_ENTITE.py
+++ b/Noyau/N_ENTITE.py
@@ -25,24 +25,23 @@
de toutes les classes de definition d'EFICAS.
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
import re
-import N_CR
-import N_OPS
-import N_VALIDATOR
-from strfunc import ufmt
+from . import N_CR
+from . import N_OPS
+from . import N_VALIDATOR
-from determine import monEnvQT5
-if monEnvQT5:
- stringTypes = (str, unicode)
-else :
- try:
- from PyQt4 import QtCore
- stringTypes = (str, unicode, QtCore.QString)
- except ImportError:
- stringTypes = (str, unicode)
+import six
+stringTypes = (str, six.text_type)
-class ENTITE:
+class ENTITE(object):
"""
Classe de base pour tous les objets de definition : mots cles et commandes
@@ -77,7 +76,7 @@ class ENTITE:
directement
Il s'agit principalement des mots cles
"""
- for k, v in self.entites.items():
+ for k, v in list(self.entites.items()):
v.pere = self
v.nom = k
@@ -102,17 +101,16 @@ class ENTITE:
"""
self.cr = self.CR()
self.verif_cata()
- for k, v in self.entites.items():
+ for k, v in list(self.entites.items()):
try:
cr = v.report()
cr.debut = u"Début " + v.__class__.__name__ + ' : ' + k
cr.fin = u"Fin " + v.__class__.__name__ + ' : ' + k
self.cr.add(cr)
except:
- self.cr.fatal(
- _(u"Impossible d'obtenir le rapport de %s %s"), k, `v`)
- print "Impossible d'obtenir le rapport de %s %s" % (k, `v`)
- print "père =", self
+ self.cr.fatal("Impossible d'obtenir le rapport de %s %s" % (k, repr(v)))
+ print(("Impossible d'obtenir le rapport de %s %s" % (k, repr(v))))
+ print(("père =", self))
return self.cr
def verif_cata_regles(self):
@@ -124,7 +122,7 @@ class ENTITE:
for regle in self.regles:
l = []
for mc in regle.mcs:
- if not self.entites.has_key(mc):
+ if not mc in self.entites :
l.append(mc)
if l != []:
txt = str(regle)
@@ -135,7 +133,7 @@ class ENTITE:
"""Verifie la definition d'un objet composite (commande, fact, bloc)."""
args = self.entites.copy()
mcs = set()
- for nom, val in args.items():
+ for nom, val in list(args.items()):
if val.label == 'SIMP':
mcs.add(nom)
# XXX
@@ -152,7 +150,7 @@ class ENTITE:
del args[nom]
# seuls les blocs peuvent entrer en conflit avec les mcs du plus haut
# niveau
- for nom, val in args.items():
+ for nom, val in list(args.items()):
if val.label == 'BLOC':
mcbloc = val.check_definition(parent)
# XXX
@@ -227,11 +225,11 @@ class ENTITE:
def check_min_max(self):
"""Vérifie les attributs min/max."""
if type(self.min) != int:
- if self.min != '**':
+ if self.min != '**'and self.min != float('-inf'):
self.cr.fatal(
_(u"L'attribut 'min' doit être un entier : %r"), self.min)
if type(self.max) != int:
- if self.max != '**':
+ if self.max != '**' and self.max != float('inf'):
self.cr.fatal(
_(u"L'attribut 'max' doit être un entier : %r"), self.max)
if self.min > self.max:
diff --git a/Noyau/N_ETAPE.py b/Noyau/N_ETAPE.py
index 3c055bdb..50c99e7a 100644
--- a/Noyau/N_ETAPE.py
+++ b/Noyau/N_ETAPE.py
@@ -19,49 +19,53 @@
"""
- Ce module contient la classe ETAPE qui sert à vérifier et à exécuter
+ Ce module contient la classe ETAPE qui sert a verifier et a executer
une commande
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except :
+ pass
import types
import sys
-import string
import os
import linecache
import traceback
from copy import copy
# Modules EFICAS
-import N_MCCOMPO
-from N_Exception import AsException
-import N_utils
-from N_utils import AsType
-from N_ASSD import ASSD
-from N_info import message, SUPERV
+from . import N_MCCOMPO
+from .N_Exception import AsException
+from . import N_utils
+from .N_utils import AsType
+from .N_ASSD import ASSD
class ETAPE(N_MCCOMPO.MCCOMPO):
"""
- Cette classe hérite de MCCOMPO car ETAPE est un OBJECT composite
+ Cette classe herite de MCCOMPO car ETAPE est un OBJECT composite
"""
nature = "OPERATEUR"
- # L'attribut de classe codex est utilisé pour rattacher le module de calcul éventuel (voir Build)
- # On le met à None pour indiquer qu'il n'y a pas de module de calcul
- # rattaché
+ # L'attribut de classe codex est utilise pour rattacher le module de calcul eventuel (voir Build)
+ # On le met a None pour indiquer qu'il n'y a pas de module de calcul
+ # rattache
codex = None
def __init__(self, oper=None, reuse=None, args={}, niveau=4):
"""
Attributs :
- - definition : objet portant les attributs de définition d'une étape de type opérateur. Il
- est initialisé par l'argument oper.
- - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc en sortie
- si les conditions d'exécution de l'opérateur l'autorise
- - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé avec l'argument args.
+ - definition : objet portant les attributs de definition d'une etape de type operateur. Il
+ est initialise par l'argument oper.
+ - reuse : indique le concept d'entree reutilise. Il se trouvera donc en sortie
+ si les conditions d'execution de l'operateur l'autorise
+ - valeur : arguments d'entree de type mot-cle=valeur. Initialise avec l'argument args.
"""
self.definition = oper
self.reuse = reuse
@@ -80,8 +84,8 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
def make_register(self):
"""
- Initialise les attributs jdc, id, niveau et réalise les
- enregistrements nécessaires
+ Initialise les attributs jdc, id, niveau et realise les
+ enregistrements necessaires
"""
if self.parent:
self.jdc = self.parent.get_jdc_root()
@@ -94,10 +98,10 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
def nettoiargs(self):
"""
- Cette methode a pour fonction de retirer tous les arguments egaux à None
- de la liste des arguments. Ils sont supposés non présents et donc retirés.
+ Cette methode a pour fonction de retirer tous les arguments egaux a None
+ de la liste des arguments. Ils sont supposes non presents et donc retires.
"""
- for k in self.valeur.keys():
+ for k in list(self.valeur.keys()):
if self.valeur[k] == None:
del self.valeur[k]
@@ -110,23 +114,22 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
def Build_sd(self, nom):
"""
- Construit le concept produit de l'opérateur. Deux cas
- peuvent se présenter :
+ Construit le concept produit de l'operateur. Deux cas
+ peuvent se presenter :
- - le parent n'est pas défini. Dans ce cas, l'étape prend en charge la création
+ - le parent n'est pas defini. Dans ce cas, l'etape prend en charge la creation
et le nommage du concept.
- - le parent est défini. Dans ce cas, l'étape demande au parent la création et
+ - le parent est defini. Dans ce cas, l'etape demande au parent la creation et
le nommage du concept.
"""
- # message.debug(SUPERV, "Build_sd %s", self.nom)
self.sdnom = nom
try:
if self.parent:
sd = self.parent.create_sdprod(self, nom)
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init, (
+ self.definition.op_init(*(
self, self.parent.g_context))
else:
sd = self.get_sd_prod()
@@ -136,7 +139,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
# On ne nomme le concept que dans le cas de non reutilisation
# d un concept
sd.set_name(nom)
- except AsException, e:
+ except AsException as e:
raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
'fichier : ', self.appel[1], e)
except EOFError:
@@ -146,7 +149,7 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
'fichier : ', self.appel[1] + '\n',
- string.join(l))
+ ''.join(l))
self.Execute()
return sd
@@ -161,31 +164,31 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
def get_sd_prod(self):
"""
- Retourne le concept résultat de l'étape
+ Retourne le concept resultat de l'etape
Deux cas :
- cas 1 : sd_prod de oper n'est pas une fonction
il s'agit d'une sous classe de ASSD
- on construit le sd à partir de cette classe
+ on construit le sd a partir de cette classe
et on le retourne
- cas 2 : il s'agit d'une fonction
- on l'évalue avec les mots-clés de l'étape (mc_liste)
- on construit le sd à partir de la classe obtenue
+ on l'evalue avec les mots-cles de l'etape (mc_liste)
+ on construit le sd a partir de la classe obtenue
et on le retourne
"""
if type(self.definition.sd_prod) == types.FunctionType:
d = self.cree_dict_valeurs(self.mc_liste)
try:
- sd_prod = apply(self.definition.sd_prod, (), d)
+ sd_prod = self.definition.sd_prod(*(), **d)
except EOFError:
raise
- except Exception, exc:
+ except Exception as exc:
if CONTEXT.debug:
traceback.print_exc()
raise AsException("impossible d affecter un type au resultat:",
str(exc))
else:
sd_prod = self.definition.sd_prod
- # on teste maintenant si la SD est réutilisée ou s'il faut la créer
+ # on teste maintenant si la SD est reutilisee ou s'il faut la creer
if self.definition.reentrant != 'n' and self.reuse:
# Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale.
# Elle sera traitee ulterieurement.
@@ -194,14 +197,14 @@ class ETAPE(N_MCCOMPO.MCCOMPO):
self.sd = sd_prod(etape=self)
# Si l'operateur est obligatoirement reentrant et reuse n'a pas ete specifie, c'est une erreur.
# On ne fait rien ici. L'erreur sera traiter par la suite.
- # précaution
+ # precaution
if self.sd is not None and not isinstance(self.sd, ASSD):
raise AsException("""
-Impossible de typer le résultat !
+Impossible de typer le resultat !
Causes possibles :
Utilisateur : Soit la valeur fournie derrière "reuse" est incorrecte,
- soit il y a une "," à la fin d'une commande précédente.
- Développeur : La fonction "sd_prod" retourne un type invalide.""")
+ soit il y a une "," a la fin d'une commande precedente.
+ Developpeur : La fonction "sd_prod" retourne un type invalide.""")
return self.sd
def get_type_produit(self):
@@ -212,34 +215,34 @@ Causes possibles :
def get_type_produit_brut(self):
"""
- Retourne le type du concept résultat de l'étape
+ Retourne le type du concept resultat de l'etape
Deux cas :
- cas 1 : sd_prod de oper n'est pas une fonction
il s'agit d'une sous classe de ASSD
on retourne le nom de la classe
- cas 2 : il s'agit d'une fonction
- on l'évalue avec les mots-clés de l'étape (mc_liste)
- et on retourne son résultat
+ on l'evalue avec les mots-cles de l'etape (mc_liste)
+ et on retourne son resultat
"""
if type(self.definition.sd_prod) == types.FunctionType:
d = self.cree_dict_valeurs(self.mc_liste)
- sd_prod = apply(self.definition.sd_prod, (), d)
+ sd_prod = self.definition.sd_prod(*(), **d)
else:
sd_prod = self.definition.sd_prod
return sd_prod
def get_etape(self):
"""
- Retourne l'étape à laquelle appartient self
- Un objet de la catégorie etape doit retourner self pour indiquer que
- l'étape a été trouvée
+ Retourne l'etape a laquelle appartient self
+ Un objet de la categorie etape doit retourner self pour indiquer que
+ l'etape a ete trouvee
"""
return self
def supprime(self):
"""
- Méthode qui supprime toutes les références arrières afin que l'objet puisse
- etre correctement détruit par le garbage collector
+ Methode qui supprime toutes les references arrières afin que l'objet puisse
+ etre correctement detruit par le garbage collector
"""
N_MCCOMPO.MCCOMPO.supprime(self)
self.jdc = None
@@ -251,14 +254,11 @@ Causes possibles :
self.sd.supprime()
def __del__(self):
- # message.debug(SUPERV, "__del__ ETAPE %s <%s>", getattr(self, 'nom', 'unknown'), self)
- # if self.sd:
- # message.debug(SUPERV, " sd : %s", self.sd.nom)
pass
def get_created_sd(self):
- """Retourne la liste des sd réellement produites par l'étape.
- Si reuse est présent, `self.sd` a été créée avant, donc n'est pas dans
+ """Retourne la liste des sd reellement produites par l'etape.
+ Si reuse est present, `self.sd` a ete creee avant, donc n'est pas dans
cette liste."""
if not self.reuse and self.sd:
return [self.sd, ]
@@ -266,7 +266,7 @@ Causes possibles :
def isactif(self):
"""
- Indique si l'étape est active (1) ou inactive (0)
+ Indique si l'etape est active (1) ou inactive (0)
"""
return self.actif
@@ -275,10 +275,9 @@ Causes possibles :
Methode utilisee pour que l etape self se declare etape
courante. Utilise par les macros
"""
- # message.debug(SUPERV, "call etape.set_current_step", stack_id=-1)
cs = CONTEXT.get_current_step()
if self.parent != cs:
- raise AsException("L'étape courante", cs.nom, cs,
+ raise AsException("L'etape courante", cs.nom, cs,
"devrait etre le parent de", self.nom, self)
else:
CONTEXT.unset_current_step()
@@ -291,7 +290,7 @@ Causes possibles :
"""
cs = CONTEXT.get_current_step()
if self != cs:
- raise AsException("L'étape courante", cs.nom, cs,
+ raise AsException("L'etape courante", cs.nom, cs,
"devrait etre", self.nom, self)
else:
CONTEXT.unset_current_step()
@@ -303,13 +302,13 @@ Causes possibles :
sous etape de self ou non
1 = oui
0 = non
- Une étape simple n'a pas de sous etape
+ Une etape simple n'a pas de sous etape
"""
return 0
def get_file(self, unite=None, fic_origine='', fname=None):
"""
- Retourne le nom du fichier correspondant à un numero d'unité
+ Retourne le nom du fichier correspondant a un numero d'unite
logique (entier) ainsi que le source contenu dans le fichier
"""
if self.jdc:
@@ -343,12 +342,12 @@ Causes possibles :
l'appelant en argument (d) en fonction de sa definition
"""
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init, (self, d))
+ self.definition.op_init(*(self, d))
if self.sd:
d[self.sd.nom] = self.sd
def copy(self):
- """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+ """ Methode qui retourne une copie de self non enregistree auprès du JDC
et sans sd
"""
etape = copy(self)
@@ -365,13 +364,13 @@ Causes possibles :
return etape
def copy_reuse(self, old_etape):
- """ Méthode qui copie le reuse d'une autre étape.
+ """ Methode qui copie le reuse d'une autre etape.
"""
if hasattr(old_etape, "reuse"):
self.reuse = old_etape.reuse
def copy_sdnom(self, old_etape):
- """ Méthode qui copie le sdnom d'une autre étape.
+ """ Methode qui copie le sdnom d'une autre etape.
"""
if hasattr(old_etape, "sdnom"):
self.sdnom = old_etape.sdnom
@@ -390,7 +389,7 @@ Causes possibles :
def get_cmd(self, nomcmd):
"""
- Méthode pour recuperer la definition d'une commande
+ Methode pour recuperer la definition d'une commande
donnee par son nom dans les catalogues declares
au niveau du jdc
Appele par un ops d'une macro en Python
@@ -399,16 +398,16 @@ Causes possibles :
def copy_intern(self, etape):
"""
- Méthode permettant lors du processus de recopie de copier
+ Methode permettant lors du processus de recopie de copier
les elements internes d'une etape dans une autre
"""
return
def full_copy(self, parent=None):
"""
- Méthode permettant d'effectuer une copie complète
- d'une étape (y compris concept produit, éléments internes)
- Si l'argument parent est fourni, la nouvelle étape
+ Methode permettant d'effectuer une copie complète
+ d'une etape (y compris concept produit, elements internes)
+ Si l'argument parent est fourni, la nouvelle etape
aura cet objet comme parent.
"""
new_etape = self.copy()
@@ -434,22 +433,22 @@ Causes possibles :
self.parent.NommerSdprod(self.sd, self.sd.nom)
def is_include(self):
- """Permet savoir si on a affaire à la commande INCLUDE
+ """Permet savoir si on a affaire a la commande INCLUDE
car le comportement de ces macros est particulier.
"""
return self.nom.startswith('INCLUDE')
def sd_accessible(self):
- """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD produite par l'étape.
+ """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD produite par l'etape.
"""
if CONTEXT.debug:
- print '`- ETAPE sd_accessible :', self.nom
+ print(('`- ETAPE sd_accessible :', self.nom))
return self.parent.sd_accessible()
def get_concept(self, nomsd):
"""
- Méthode pour recuperer un concept à partir de son nom
+ Methode pour recuperer un concept a partir de son nom
"""
- # pourrait être appelée par une commande fortran faisant appel à des fonctions python
+ # pourrait etre appelee par une commande fortran faisant appel a des fonctions python
# on passe la main au parent
return self.parent.get_concept(nomsd)
diff --git a/Noyau/N_Exception.py b/Noyau/N_Exception.py
index 4d396fc8..362db727 100644
--- a/Noyau/N_Exception.py
+++ b/Noyau/N_Exception.py
@@ -24,7 +24,9 @@
"""
# Modules EFICAS
-from strfunc import get_encoding, to_unicode
+from __future__ import absolute_import
+from .strfunc import get_encoding, to_unicode
+import six
class AsException(Exception):
@@ -33,13 +35,13 @@ class AsException(Exception):
args = []
for x in self.args:
ustr = to_unicode(x)
- if type(ustr) is not unicode:
- ustr = unicode( repr(x) )
+ if type(ustr) is not six.text_type:
+ ustr = six.text_type( repr(x) )
args.append(ustr)
return " ".join(args)
def __str__(self):
- return unicode(self).encode(get_encoding())
+ return six.text_type(self).encode(get_encoding())
class InterruptParsingError(Exception):
diff --git a/Noyau/N_FACT.py b/Noyau/N_FACT.py
index a94b90b4..1824185a 100644
--- a/Noyau/N_FACT.py
+++ b/Noyau/N_FACT.py
@@ -22,16 +22,17 @@
qui permet de spécifier les caractéristiques des mots clés facteurs
"""
+from __future__ import absolute_import
+from __future__ import print_function
import types
-import N_ENTITE
-import N_MCFACT
-import N_MCLIST
-from N__F import _F
-from N_types import is_sequence
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_MCFACT
+from . import N_MCLIST
+from .N__F import _F
+from .N_types import is_sequence
-import N_OBJECT
+from . import N_OBJECT
class FACT(N_ENTITE.ENTITE):
@@ -72,7 +73,7 @@ class FACT(N_ENTITE.ENTITE):
self.fr = fr
self.ang=ang
self.docu = docu
- if type(regles) == types.TupleType:
+ if type(regles) == tuple:
self.regles = regles
else:
self.regles = (regles,)
@@ -80,6 +81,8 @@ class FACT(N_ENTITE.ENTITE):
self.defaut = defaut
self.min = min
self.max = max
+ if self.max == "**" : self.max=float('inf')
+ if self.min == "**" : self.min=float('-inf')
self.entites = args
self.position = None
self.affecter_parente()
@@ -106,14 +109,14 @@ class FACT(N_ENTITE.ENTITE):
if val is None:
if self.defaut == None:
val = {}
- elif type(self.defaut) == types.TupleType:
+ elif type(self.defaut) == tuple:
val = self.defaut
# Est ce utile ? Le défaut pourrait etre uniquement un dict
- elif type(self.defaut) == types.DictType or isinstance(self.defaut, _F):
+ elif type(self.defaut) == dict or isinstance(self.defaut, _F):
val = self.defaut
else:
# On ne devrait jamais passer par la
- print "On ne devrait jamais passer par la"
+ print ("On ne devrait jamais passer par la")
return None
elif is_sequence(val) and len(val) == 0 and self.statut == 'o':
# On est dans le cas où le mcfact est présent mais est une liste/tuple
@@ -124,9 +127,9 @@ class FACT(N_ENTITE.ENTITE):
# On cree toujours une liste de mcfact
l = self.list_instance()
l.init(nom=nom, parent=parent)
- if type(val) in (types.TupleType, types.ListType, self.list_instance):
+ if type(val) in (tuple, list, self.list_instance):
for v in val:
- if type(v) == types.DictType or isinstance(v, _F):
+ if type(v) == dict or isinstance(v, _F):
objet = self.class_instance(
nom=nom, definition=self, val=v, parent=parent)
l.append(objet)
@@ -134,7 +137,7 @@ class FACT(N_ENTITE.ENTITE):
l.append(v)
else:
l.append(N_OBJECT.ErrorObj(self, v, parent, nom))
- elif type(val) == types.DictType or isinstance(val, _F):
+ elif type(val) == dict or isinstance(val, _F):
objet = self.class_instance(
nom=nom, definition=self, val=val, parent=parent)
l.append(objet)
diff --git a/Noyau/N_FONCTION.py b/Noyau/N_FONCTION.py
index 131e6902..87de6af3 100644
--- a/Noyau/N_FONCTION.py
+++ b/Noyau/N_FONCTION.py
@@ -21,11 +21,17 @@
# de la division réelle pour les entiers, et non la division entière
# 1/2=0.5 (et non 0). Comportement par défaut dans Python 3.0.
from __future__ import division
+from __future__ import absolute_import
+try :
+ from builtins import zip
+ from builtins import str
+except :
+ pass
from math import sin, cos, tan, asin, acos, atan2, atan, sinh, cosh, tanh
from math import pi, exp, log, log10, sqrt
-from N_ASSD import ASSD
-from N_info import message, SUPERV
+from .N_ASSD import ASSD
+from six.moves import zip
class FONCTION(ASSD):
@@ -42,8 +48,6 @@ class formule(ASSD):
ctxt.update(getattr(self.parent, 'const_context', {}))
ctxt.update(getattr(self.parent, 'macro_const_context', {}))
self.parent_context = self.filter_context(ctxt)
- # message.debug(SUPERV, "add parent_context %s %s", self.nom,
- # self.parent_context)
def __call__(self, *val):
"""Evaluation de la formule"""
@@ -56,9 +60,9 @@ class formule(ASSD):
try:
# globals() pour math.*
res = eval(self.code, context, globals())
- except Exception, exc:
- message.error(SUPERV, "ERREUR LORS DE L'ÃVALUATION DE LA FORMULE '%s' "
- ":\n>> %s", self.nom, str(exc))
+ except Exception as exc:
+ mes = "ERREUR LORS DE L EVALUATION DE LA FORMULE %s" %self.nom
+ print (mes)
raise
return res
@@ -70,9 +74,9 @@ class formule(ASSD):
self.expression = texte
try:
self.code = compile(texte, texte, 'eval')
- except SyntaxError, exc:
- message.error(SUPERV, "ERREUR LORS DE LA CREATION DE LA FORMULE '%s' "
- ":\n>> %s", self.nom, str(exc))
+ except SyntaxError as exc:
+ mes = "ERREUR LORS DE LA CREATION DE LA FORMULE %s" %self.nom
+ print (mes)
raise
def __setstate__(self, state):
diff --git a/Noyau/N_FORM.py b/Noyau/N_FORM.py
index 89ca09ce..ab6032e9 100644
--- a/Noyau/N_FORM.py
+++ b/Noyau/N_FORM.py
@@ -18,8 +18,9 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-import N_MACRO
-import N_FORM_ETAPE
+from __future__ import absolute_import
+from . import N_MACRO
+from . import N_FORM_ETAPE
class FORM(N_MACRO.MACRO):
diff --git a/Noyau/N_FORM_ETAPE.py b/Noyau/N_FORM_ETAPE.py
index ad399678..3e1abdba 100644
--- a/Noyau/N_FORM_ETAPE.py
+++ b/Noyau/N_FORM_ETAPE.py
@@ -18,7 +18,8 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-import N_MACRO_ETAPE
+from __future__ import absolute_import
+from . import N_MACRO_ETAPE
class FORM_ETAPE(N_MACRO_ETAPE.MACRO_ETAPE):
diff --git a/Noyau/N_GEOM.py b/Noyau/N_GEOM.py
index 471919cd..b0429914 100644
--- a/Noyau/N_GEOM.py
+++ b/Noyau/N_GEOM.py
@@ -21,7 +21,9 @@
"""
"""
-from N_ASSD import ASSD
+from __future__ import absolute_import
+from .N_ASSD import ASSD
+import six
class GEOM(ASSD):
@@ -56,7 +58,7 @@ class GEOM(ASSD):
return self.nom
def __convert__(cls, valeur):
- if isinstance(valeur, (str, unicode)) and len(valeur.strip()) <= 8:
+ if isinstance(valeur, (str, six.text_type)) and len(valeur.strip()) <= 8:
return valeur.strip()
raise ValueError(
_(u'On attend une chaine de caractères (de longueur <= 8).'))
diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py
index 5088de7d..2a30674f 100644
--- a/Noyau/N_JDC.py
+++ b/Noyau/N_JDC.py
@@ -19,42 +19,47 @@
"""
- Ce module contient la classe JDC qui sert à interpréter un jeu de commandes
+ Ce module contient la classe JDC qui sert a interpreter un jeu de commandes
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
import os
-import string
import traceback
import types
import sys
import linecache
# Modules EFICAS
-import N_OBJECT
-import N_CR
-from N_Exception import AsException, InterruptParsingError
-from N_ASSD import ASSD
-from N_info import message, SUPERV
-from strfunc import get_encoding
+from . import N_OBJECT
+from . import N_CR
+from .N_Exception import AsException, InterruptParsingError
+from .N_ASSD import ASSD
+from .strfunc import get_encoding
+from six.moves import range
MemoryErrorMsg = """MemoryError :
-En général, cette erreur se produit car la mémoire utilisée hors du fortran
+En general, cette erreur se produit car la memoire utilisee hors du fortran
(jeveux) est importante.
Causes possibles :
- le calcul produit de gros objets Python dans une macro-commande ou
- dans le jeu de commande lui-même,
+ dans le jeu de commande lui-meme,
- le calcul appelle un solveur (MUMPS par exemple) ou un outil externe
- qui a besoin de mémoire hors jeveux,
+ qui a besoin de memoire hors jeveux,
- utilisation de jeveux dynamique,
- ...
Solution :
- - distinguer la mémoire limite du calcul (case "Mémoire totale" de astk)
- de la mémoire réservée à jeveux (case "dont Aster"), le reste étant
+ - distinguer la memoire limite du calcul (case "Memoire totale" de astk)
+ de la memoire reservee a jeveux (case "dont Aster"), le reste etant
disponible pour les allocations dynamiques.
"""
@@ -79,7 +84,7 @@ from Accas import *
NONE = None
"""
- from N_utils import SEP
+ from .N_utils import SEP
def __init__(self, definition=None, procedure=None, cata=None,
cata_ord_dico=None, parent=None,
@@ -87,7 +92,7 @@ NONE = None
self.procedure = procedure
self.definition = definition
self.cata = cata
- if type(self.cata) != types.TupleType and cata != None:
+ if type(self.cata) != tuple and cata != None:
self.cata = (self.cata,)
self._build_reserved_kw_list()
self.cata_ordonne_dico = cata_ord_dico
@@ -95,11 +100,11 @@ NONE = None
self.appli = appli
self.parent = parent
self.context_ini = context_ini
- # On conserve les arguments supplémentaires. Il est possible de passer
+ # On conserve les arguments supplementaires. Il est possible de passer
# des informations globales au JDC par ce moyen. Il pourrait etre plus
# sur de mettre en place le mecanisme des mots-cles pour verifier la
- # validité des valeurs passées.
- # Ceci reste à faire
+ # validite des valeurs passees.
+ # Ceci reste a faire
# On initialise avec les parametres de la definition puis on
# update avec ceux du JDC
self.args = self.definition.args
@@ -122,7 +127,6 @@ NONE = None
# on met le jdc lui-meme dans le context global pour l'avoir sous
# l'etiquette "jdc" dans le fichier de commandes
self.g_context = {'jdc': self}
- # message.debug(SUPERV, "g_context : %s - %s", self.g_context, id(self.g_context))
# Dictionnaire pour stocker tous les concepts du JDC (acces rapide par
# le nom)
self.sds_dict = {}
@@ -134,13 +138,13 @@ NONE = None
self.index_etape_courante = 0
self.UserError = "UserError"
self.alea = None
- # permet transitoirement de conserver la liste des étapes
+ # permet transitoirement de conserver la liste des etapes
self.hist_etape = False
def compile(self):
"""
Cette methode compile la chaine procedure
- Si des erreurs se produisent, elles sont consignées dans le
+ Si des erreurs se produisent, elles sont consignees dans le
compte-rendu self.cr
"""
try:
@@ -153,17 +157,17 @@ NONE = None
encoded_filename = self.nom.encode(get_encoding())
self.proc_compile = compile(
self.procedure, encoded_filename, 'exec')
- except SyntaxError, e:
+ except SyntaxError as e:
if CONTEXT.debug:
traceback.print_exc()
l = traceback.format_exception_only(SyntaxError, e)
- self.cr.exception("Compilation impossible : " + string.join(l))
- except MemoryError, e:
+ self.cr.exception("Compilation impossible : " + ''.join(l))
+ except MemoryError as e:
self.cr.exception(MemoryErrorMsg)
- except SystemError, e:
+ except SystemError as e:
erreurs_connues = """
Causes possibles :
- - offset too large : liste trop longue derrière un mot-clé.
+ - offset too large : liste trop longue derrière un mot-cle.
Solution : liste = (valeurs, ..., )
MOT_CLE = *liste,
"""
@@ -174,55 +178,47 @@ Causes possibles :
def exec_compile(self):
"""
- Cette méthode execute le jeu de commandes compilé dans le contexte
+ Cette methode execute le jeu de commandes compile dans le contexte
self.g_context de l'objet JDC
"""
CONTEXT.set_current_step(self)
- # Le module nommage utilise le module linecache pour accéder
+ # Le module nommage utilise le module linecache pour acceder
# au source des commandes du jeu de commandes.
# Dans le cas d'un fichier, on accède au contenu de ce fichier
- # Dans le cas d'une chaine de caractères il faut accéder
+ # Dans le cas d'une chaine de caractères il faut acceder
# aux commandes qui sont dans la chaine
import linecache
- linecache.cache[self.nom] = 0, 0, string.split(
- self.procedure, '\n'), self.nom
+ linecache.cache[self.nom] = 0, 0, self.procedure.split('\n'), self.nom
try:
- exec self.exec_init in self.g_context
- # message.debug(SUPERV, "JDC.exec_compile_1 - len(g_context) = %d",
- # len(self.g_context.keys()))
+ exec(self.exec_init, self.g_context)
for obj_cata in self.cata:
if type(obj_cata) == types.ModuleType:
init2 = "from " + obj_cata.__name__ + " import *"
- exec init2 in self.g_context
- # message.debug(SUPERV, "JDC.exec_compile_2 - len(g_context) = %d",
- # len(self.g_context.keys()))
+ exec(init2, self.g_context)
- # Initialisation du contexte global pour l'évaluation des conditions de BLOC
+ # Initialisation du contexte global pour l'evaluation des conditions de BLOC
# On utilise une copie de l'initialisation du contexte du jdc
self.condition_context = self.g_context.copy()
# Si l'attribut context_ini n'est pas vide, on ajoute au contexte global
- # le contexte initial (--> permet d'évaluer un JDC en récupérant un contexte
+ # le contexte initial (--> permet d'evaluer un JDC en recuperant un contexte
# d'un autre par exemple)
if self.context_ini:
self.g_context.update(self.context_ini)
# Update du dictionnaire des concepts
- for sdnom, sd in self.context_ini.items():
+ for sdnom, sd in list(self.context_ini.items()):
if isinstance(sd, ASSD):
self.sds_dict[sdnom] = sd
if self.appli != None:
self.appli.affiche_infos(
- 'Interprétation du fichier de commandes en cours ...')
+ 'Interpretation du fichier de commandes en cours ...')
# On sauve le contexte pour garder la memoire des constantes
# En mode edition (EFICAS) ou lors des verifications le contexte
- # est recalculé
+ # est recalcule
# mais les constantes sont perdues
self.const_context = self.g_context
- # message.debug(SUPERV, "pass")
- exec self.proc_compile in self.g_context
- # message.debug(SUPERV, "JDC.exec_compile_3 - len(g_context) = %d",
- # len(self.g_context.keys()))
+ exec(self.proc_compile, self.g_context)
CONTEXT.unset_current_step()
if self.appli != None:
@@ -242,11 +238,11 @@ Causes possibles :
self.affiche_fin_exec()
self.traiter_fin_exec('commande')
- except AsException, e:
+ except AsException as e:
# une erreur a ete identifiee
if CONTEXT.debug:
traceback.print_exc()
- # l'exception a été récupérée avant (où, comment ?),
+ # l'exception a ete recuperee avant (ou, comment ?),
# donc on cherche dans le texte
txt = str(e)
if txt.find('MemoryError') >= 0:
@@ -254,7 +250,7 @@ Causes possibles :
self.cr.exception(txt)
CONTEXT.unset_current_step()
- except NameError, e:
+ except NameError as e:
etype, value, tb = sys.exc_info()
l = traceback.extract_tb(tb)
s = traceback.format_exception_only("Erreur de nom", e)[0][:-1]
@@ -264,16 +260,16 @@ Causes possibles :
self.cr.exception(msg)
CONTEXT.unset_current_step()
- except self.UserError, exc_val:
- self.traiter_user_exception(exc_val)
- CONTEXT.unset_current_step()
- self.affiche_fin_exec()
- self.traiter_fin_exec('commande')
+ # except self.UserError as exc_val:
+ # self.traiter_user_exception(exc_val)
+ # CONTEXT.unset_current_step()
+ # self.affiche_fin_exec()
+ # self.traiter_fin_exec('commande')
except:
# erreur inattendue
# sys_exc_typ,sys_exc_value,sys_exc_frame = sys_exc.info()
- # (tuple de 3 éléments)
+ # (tuple de 3 elements)
if CONTEXT.debug:
traceback.print_exc()
@@ -282,7 +278,7 @@ Causes possibles :
exc_typ, exc_val, exc_fr = sys.exc_info()
l = traceback.format_exception(exc_typ, exc_val, exc_fr)
self.cr.exception(
- "erreur non prevue et non traitee prevenir la maintenance " + '\n' + string.join(l))
+ "erreur non prevue et non traitee prevenir la maintenance " + '\n' + ''.join(l))
del exc_typ, exc_val, exc_fr
CONTEXT.unset_current_step()
@@ -302,23 +298,22 @@ Causes possibles :
Par defaut il n'y a pas de traitement. Elle doit etre surchargee
pour en introduire un
"""
- message.info(SUPERV, "FIN D'EXECUTION %s %s", mode, etape)
+ print ( "FIN D'EXECUTION %s %s" %s( mode, etape))
def traiter_user_exception(self, exc_val):
"""Cette methode realise un traitement sur les exceptions utilisateur
- Par defaut il n'y a pas de traitement. La méthode doit etre
- surchargée pour en introduire un.
+ Par defaut il n'y a pas de traitement. La methode doit etre
+ surchargee pour en introduire un.
"""
return
def register(self, etape):
"""
- Cette méthode ajoute etape dans la liste des etapes : self.etapes
- et retourne un numéro d'enregistrement
+ Cette methode ajoute etape dans la liste des etapes : self.etapes
+ et retourne un numero d'enregistrement
"""
self.etapes.append(etape)
self.index_etapes[etape] = len(self.etapes) - 1
- # message.debug(SUPERV, "#%d %s", self.index_etapes[etape], etape.nom)
return self.g_register(etape)
def o_register(self, sd):
@@ -326,7 +321,7 @@ Causes possibles :
Retourne un identificateur pour concept
"""
self.nsd = self.nsd + 1
- nom = sd.idracine + self.SEP + `self.nsd`
+ nom = sd.idracine + self.SEP + repr(self.nsd)
return nom
def g_register(self, etape):
@@ -334,7 +329,7 @@ Causes possibles :
Retourne un identificateur pour etape
"""
self.nstep = self.nstep + 1
- idetape = etape.idracine + self.SEP + `self.nstep`
+ idetape = etape.idracine + self.SEP + repr(self.nstep)
return idetape
def create_sdprod(self, etape, nomsd):
@@ -342,18 +337,18 @@ Causes possibles :
Cette methode doit fabriquer le concept produit retourne
par l'etape etape et le nommer.
- Elle est appelée à l'initiative de l'etape
+ Elle est appelee a l'initiative de l'etape
pendant le processus de construction de cette etape :
methode __call__ de la classe CMD (OPER ou MACRO)
- Ce travail est réalisé par le contexte supérieur
+ Ce travail est realise par le contexte superieur
(etape.parent) car dans certains cas, le concept ne doit
- pas etre fabriqué mais l'etape doit simplement utiliser
- un concept préexistant.
+ pas etre fabrique mais l'etape doit simplement utiliser
+ un concept preexistant.
Deux cas possibles :
- - Cas 1 : etape.reuse != None : le concept est réutilisé
- - Cas 2 : l'étape appartient à une macro qui a déclaré un
+ - Cas 1 : etape.reuse != None : le concept est reutilise
+ - Cas 2 : l'etape appartient a une macro qui a declare un
concept de sortie qui doit etre produit par cette
etape.
Dans le cas du JDC, le deuxième cas ne peut pas se produire.
@@ -370,14 +365,14 @@ Causes possibles :
Nomme la SD apres avoir verifie que le nommage est possible : nom
non utilise
Si le nom est deja utilise, leve une exception
- Met le concept créé dans le concept global g_context
+ Met le concept cree dans le concept global g_context
"""
o = self.sds_dict.get(sdnom, None)
if isinstance(o, ASSD):
raise AsException("Nom de concept deja defini : %s" % sdnom)
if sdnom in self._reserved_kw:
raise AsException(
- "Nom de concept invalide. '%s' est un mot-clé réservé." % sdnom)
+ "Nom de concept invalide. '%s' est un mot-cle reserve." % sdnom)
# Ajoute a la creation (appel de reg_sd).
self.sds_dict[sdnom] = sd
@@ -387,7 +382,6 @@ Causes possibles :
# du JDC
if restrict == 'non':
self.g_context[sdnom] = sd
- # message.debug(SUPERV, "g_context[%r] = %s", sdnom, sd)
def reg_sd(self, sd):
"""
@@ -398,13 +392,13 @@ Causes possibles :
def delete_concept_after_etape(self, etape, sd):
"""
- Met à jour les étapes du JDC qui sont après etape suite Ã
+ Met a jour les etapes du JDC qui sont après etape suite a
la disparition du concept sd
"""
- # Cette methode est définie dans le noyau mais ne sert que pendant
+ # Cette methode est definie dans le noyau mais ne sert que pendant
# la phase de creation des etapes et des concepts. Il n'y a aucun
- # traitement particulier à réaliser.
- # Dans d'autres conditions, il faut surcharger cette méthode
+ # traitement particulier a realiser.
+ # Dans d'autres conditions, il faut surcharger cette methode
return
def supprime(self):
@@ -413,27 +407,25 @@ Causes possibles :
etape.supprime()
def clean(self, netapes):
- """Nettoie les `netapes` dernières étapes de la liste des étapes."""
+ """Nettoie les `netapes` dernières etapes de la liste des etapes."""
if self.hist_etape:
return
- for i in xrange(netapes):
+ for i in range(netapes):
e = self.etapes.pop()
jdc = e.jdc
parent = e.parent
e.supprime()
e.parent = parent
e.jdc = jdc
- # message.debug(SUPERV, "JDC.clean - etape = %r - refcount(e) = %d",
- # e.nom, sys.getrefcount(e))
del self.index_etapes[e]
def get_file(self, unite=None, fic_origine='', fname=None):
"""
- Retourne le nom du fichier correspondant à un numero d'unité
+ Retourne le nom du fichier correspondant a un numero d'unite
logique (entier) ainsi que le source contenu dans le fichier
"""
if self.appli:
- # Si le JDC est relié à une application maitre, on délègue la
+ # Si le JDC est relie a une application maitre, on delègue la
# recherche
return self.appli.get_file(unite, fic_origine)
else:
@@ -459,13 +451,11 @@ Causes possibles :
en fonction de la valeur du mot cle PAR_LOT et
du contexte : application maitre ou pas
- En PAR_LOT='NON', il n'y a pas d'ambiguité.
- En PAR_LOT='OUI', E_SUPERV positionne l'attribut à 'NON' après la phase
- d'analyse et juste avant la phase d'exécution.
+ En PAR_LOT='NON', il n'y a pas d'ambiguite.
+ d'analyse et juste avant la phase d'execution.
`user_value` : permet de stocker la valeur choisie par l'utilisateur
pour l'interroger plus tard (par exemple dans `get_contexte_avant`).
"""
- # message.debug(SUPERV, "set par_lot = %r", par_lot)
if user_value:
self.par_lot_user = par_lot
if self.appli == None:
@@ -489,10 +479,10 @@ Causes possibles :
"""
CONTEXT.set_current_step(self)
try:
- # Le module nommage utilise le module linecache pour accéder
+ # Le module nommage utilise le module linecache pour acceder
# au source des commandes du jeu de commandes.
# Dans le cas d'un fichier, on accède au contenu de ce fichier
- # Dans le cas de la console interactive, il faut pouvoir accéder
+ # Dans le cas de la console interactive, il faut pouvoir acceder
# aux commandes qui sont dans le buffer de la console
import linecache
import code
@@ -514,15 +504,13 @@ Causes possibles :
comme DETRUIRE ou les macros
Si etape == None, on retourne le contexte en fin de JDC
"""
- # L'étape courante pour laquelle le contexte a été calculé est
- # mémorisée dans self.index_etape_courante
+ # L'etape courante pour laquelle le contexte a ete calcule est
+ # memorisee dans self.index_etape_courante
# XXX on pourrait faire mieux dans le cas PAR_LOT="NON" : en
- # mémorisant l'étape
- # courante pendant le processus de construction des étapes.
- # Si on insère des commandes (par ex, dans EFICAS), il faut préalablement
- # remettre ce pointeur à 0
- # message.debug(SUPERV, "g_context : %s", [k for k, v in self.g_context.items() if isinstance(v, ASSD)])
- # message.debug(SUPERV, "current_context : %s", [k for k, v in
+ # memorisant l'etape
+ # courante pendant le processus de construction des etapes.
+ # Si on insère des commandes (par ex, dans EFICAS), il faut prealablement
+ # remettre ce pointeur a 0
# self.current_context.items() if isinstance(v, ASSD)])
if self.par_lot_user == 'NON':
d = self.current_context = self.g_context.copy()
@@ -530,8 +518,6 @@ Causes possibles :
return d
# retirer les sd produites par 'etape'
sd_names = [sd.nom for sd in etape.get_created_sd()]
- # message.debug(SUPERV, "reuse : %s, sdprods : %s", etape.reuse,
- # sd_names)
for nom in sd_names:
try:
del d[nom]
@@ -564,16 +550,14 @@ Causes possibles :
if e.isactif():
e.update_context(d)
self.index_etape_courante = index_etape
- # message.debug(SUPERV, "returns : %s", [k for k, v in d.items() if
- # isinstance(v, ASSD)])
return d
def get_global_contexte(self):
"""Retourne "un" contexte global ;-)"""
- # N'est utilisé que par INCLUDE (sauf erreur).
- # g_context est remis à {} en PAR_LOT='OUI'. const_context permet
- # de retrouver ce qui y a été mis par exec_compile.
- # Les concepts n'y sont pas en PAR_LOT='OUI'. Ils sont ajoutés
+ # N'est utilise que par INCLUDE (sauf erreur).
+ # g_context est remis a {} en PAR_LOT='OUI'. const_context permet
+ # de retrouver ce qui y a ete mis par exec_compile.
+ # Les concepts n'y sont pas en PAR_LOT='OUI'. Ils sont ajoutes
# par get_global_contexte de la MACRO.
d = self.const_context.copy()
d.update(self.g_context)
@@ -582,7 +566,7 @@ Causes possibles :
def get_contexte_courant(self, etape_courante=None):
"""
Retourne le contexte tel qu'il est (ou 'sera' si on est en phase
- de construction) au moment de l'exécution de l'étape courante.
+ de construction) au moment de l'execution de l'etape courante.
"""
if etape_courante is None:
etape_courante = CONTEXT.get_current_step()
@@ -590,7 +574,7 @@ Causes possibles :
def get_concept(self, nomsd):
"""
- Méthode pour récuperer un concept à partir de son nom
+ Methode pour recuperer un concept a partir de son nom
"""
co = self.get_contexte_courant().get(nomsd.strip(), None)
if not isinstance(co, ASSD):
@@ -599,7 +583,7 @@ Causes possibles :
def get_concept_by_type(self, nomsd, typesd, etape):
"""
- Méthode pour récuperer un concept à partir de son nom et de son type.
+ Methode pour recuperer un concept a partir de son nom et de son type.
Il aura comme père 'etape'.
"""
assert issubclass(typesd, ASSD), typesd
@@ -610,8 +594,8 @@ Causes possibles :
def del_concept(self, nomsd):
"""
- Méthode pour supprimer la référence d'un concept dans le sds_dict.
- Ne détruire pas le concept (différent de supprime).
+ Methode pour supprimer la reference d'un concept dans le sds_dict.
+ Ne detruire pas le concept (different de supprime).
"""
try:
del self.sds_dict[nomsd.strip()]
@@ -620,7 +604,7 @@ Causes possibles :
def get_cmd(self, nomcmd):
"""
- Méthode pour recuperer la definition d'une commande
+ Methode pour recuperer la definition d'une commande
donnee par son nom dans les catalogues declares
au niveau du jdc
"""
@@ -631,7 +615,7 @@ Causes possibles :
def append_reset(self, etape):
"""
Ajoute une etape provenant d'un autre jdc a la liste des etapes
- et remet à jour la parenté de l'étape et des concepts
+ et remet a jour la parente de l'etape et des concepts
"""
self.etapes.append(etape)
self.index_etapes[etape] = len(self.etapes) - 1
@@ -642,11 +626,11 @@ Causes possibles :
"""On peut acceder aux "valeurs" (jeveux) des ASSD si le JDC est en PAR_LOT="NON".
"""
if CONTEXT.debug:
- print ' `- JDC sd_accessible : PAR_LOT =', self.par_lot
+ print((' `- JDC sd_accessible : PAR_LOT =', self.par_lot))
return self.par_lot == 'NON'
def _build_reserved_kw_list(self):
- """Construit la liste des mots-clés réservés (interdits pour le
+ """Construit la liste des mots-cles reserves (interdits pour le
nommage des concepts)."""
self._reserved_kw = set()
for cat in self.cata:
diff --git a/Noyau/N_JDC_CATA.py b/Noyau/N_JDC_CATA.py
index bfd8832a..3f52de55 100644
--- a/Noyau/N_JDC_CATA.py
+++ b/Noyau/N_JDC_CATA.py
@@ -23,13 +23,12 @@
qui permet de spécifier les caractéristiques d'un JDC
"""
+from __future__ import absolute_import
import types
-import string
import traceback
-import N_ENTITE
-import N_JDC
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_JDC
class JDC_CATA(N_ENTITE.ENTITE):
@@ -54,7 +53,7 @@ class JDC_CATA(N_ENTITE.ENTITE):
"""
self.code = code
self.execmodul = execmodul
- if type(regles) == types.TupleType:
+ if type(regles) == tuple:
self.regles = regles
else:
self.regles = (regles,)
diff --git a/Noyau/N_LASSD.py b/Noyau/N_LASSD.py
index b3886430..24468835 100644
--- a/Noyau/N_LASSD.py
+++ b/Noyau/N_LASSD.py
@@ -16,5 +16,6 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-from N_ASSD import ASSD
+from __future__ import absolute_import
+from .N_ASSD import ASSD
class LASSD(ASSD,list):pass
diff --git a/Noyau/N_MACRO.py b/Noyau/N_MACRO.py
index 58d743e0..88665420 100644
--- a/Noyau/N_MACRO.py
+++ b/Noyau/N_MACRO.py
@@ -23,14 +23,13 @@
qui permet de spécifier les caractéristiques d'une macro-commande
"""
+from __future__ import absolute_import
import types
-import string
import traceback
-import N_ENTITE
-import N_MACRO_ETAPE
-import nommage
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_MACRO_ETAPE
+from . import nommage
class MACRO(N_ENTITE.ENTITE):
@@ -101,7 +100,7 @@ class MACRO(N_ENTITE.ENTITE):
# xxx est donné par la valeur absolue de op. L'execution est egalement effectuée via cette subroutine.
# - Si op est une fonction Python, la construction de la macro est effectuée par l'appel à cette fonction
# Suivant le cas on garde l info dans self.op ou dans self.proc
- if type(op) == types.IntType:
+ if type(op) == int:
self.proc = None
self.op = op
else:
@@ -114,7 +113,7 @@ class MACRO(N_ENTITE.ENTITE):
self.ang=ang
self.repetable = repetable
self.docu = docu
- if type(regles) == types.TupleType:
+ if type(regles) == tuple:
self.regles = regles
else:
self.regles = (regles,)
diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py
index aad1004f..a12147d1 100644
--- a/Noyau/N_MACRO_ETAPE.py
+++ b/Noyau/N_MACRO_ETAPE.py
@@ -19,26 +19,31 @@
"""
- Ce module contient la classe MACRO_ETAPE qui sert à vérifier et à exécuter
+ Ce module contient la classe MACRO_ETAPE qui sert a verifier et a executer
une commande
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
import types
import sys
-import string
import traceback
from warnings import warn
# Modules EFICAS
-import N_MCCOMPO
-import N_ETAPE
-from N_Exception import AsException
-import N_utils
-from N_utils import AsType
-from N_CO import CO
-from N_ASSD import ASSD
-from N_info import message, SUPERV
+from . import N_MCCOMPO
+from . import N_ETAPE
+from .N_Exception import AsException
+from . import N_utils
+from .N_utils import AsType
+from .N_CO import CO
+from .N_ASSD import ASSD
+from six.moves import range
class MACRO_ETAPE(N_ETAPE.ETAPE):
@@ -52,13 +57,13 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
def __init__(self, oper=None, reuse=None, args={}):
"""
Attributs :
- - definition : objet portant les attributs de définition d'une étape
- de type macro-commande. Il est initialisé par
+ - definition : objet portant les attributs de definition d'une etape
+ de type macro-commande. Il est initialise par
l'argument oper.
- - reuse : indique le concept d'entrée réutilisé. Il se trouvera donc
- en sortie si les conditions d'exécution de l'opérateur
+ - reuse : indique le concept d'entree reutilise. Il se trouvera donc
+ en sortie si les conditions d'execution de l'operateur
l'autorise
- - valeur : arguments d'entrée de type mot-clé=valeur. Initialisé
+ - valeur : arguments d'entree de type mot-cle=valeur. Initialise
avec l'argument args.
"""
N_ETAPE.ETAPE.__init__(self, oper, reuse, args, niveau=5)
@@ -69,19 +74,19 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
self.index_etape_courante = 0
self.etapes = []
self.index_etapes = {}
- # Dans le cas d'une macro écrite en Python, l'attribut Outputs est un
+ # Dans le cas d'une macro ecrite en Python, l'attribut Outputs est un
# dictionnaire qui contient les concepts produits de sortie
- # (nom : ASSD) déclarés dans la fonction sd_prod
+ # (nom : ASSD) declares dans la fonction sd_prod
self.Outputs = {}
self.sdprods = []
self.UserError = "UserError"
- # permet de stocker le nom du dernier concept nommé dans la macro
+ # permet de stocker le nom du dernier concept nomme dans la macro
self.last = None
def make_register(self):
"""
- Initialise les attributs jdc, id, niveau et réalise les enregistrements
- nécessaires
+ Initialise les attributs jdc, id, niveau et realise les enregistrements
+ necessaires
"""
N_ETAPE.ETAPE.make_register(self)
if self.parent:
@@ -91,27 +96,26 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
def Build_sd(self, nom):
"""
- Construit le concept produit de l'opérateur. Deux cas
- peuvent se présenter :
+ Construit le concept produit de l'operateur. Deux cas
+ peuvent se presenter :
- - le parent n'est pas défini. Dans ce cas, l'étape prend en charge
- la création et le nommage du concept.
+ - le parent n'est pas defini. Dans ce cas, l'etape prend en charge
+ la creation et le nommage du concept.
- - le parent est défini. Dans ce cas, l'étape demande au parent la
- création et le nommage du concept.
+ - le parent est defini. Dans ce cas, l'etape demande au parent la
+ creation et le nommage du concept.
"""
- # message.debug(SUPERV, "%s", self.nom)
self.sdnom = nom
try:
# On positionne la macro self en tant que current_step pour que les
- # étapes créées lors de l'appel à sd_prod et à op_init aient la macro
+ # etapes creees lors de l'appel a sd_prod et a op_init aient la macro
# comme parent
self.set_current_step()
if self.parent:
sd = self.parent.create_sdprod(self, nom)
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init, (
+ self.definition.op_init(*(
self, self.parent.g_context))
else:
sd = self.get_sd_prod()
@@ -120,11 +124,12 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
# d un concept
sd.set_name(nom)
self.reset_current_step()
- except AsException, e:
+ except AsException as e:
self.reset_current_step()
raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
'fichier : ', self.appel[1], e)
- except (EOFError, self.UserError):
+ #except (EOFError, self.UserError):
+ except (EOFError):
# Le retablissement du step courant n'est pas strictement
# necessaire. On le fait pour des raisons de coherence
self.reset_current_step()
@@ -135,14 +140,14 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
'fichier : ', self.appel[1] + '\n',
- string.join(l))
+ ''.join(l))
self.Execute()
return sd
def get_sd_prod(self):
"""
- Retourne le concept résultat d'une macro étape
+ Retourne le concept resultat d'une macro etape
La difference avec une etape ou une proc-etape tient a ce que
le concept produit peut exister ou pas
@@ -151,11 +156,11 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
Deux cas :
- cas 1 : sd_prod n'est pas une fonction
il s'agit d'une sous classe de ASSD
- on construit le sd à partir de cette classe
+ on construit le sd a partir de cette classe
et on le retourne
- cas 2 : sd_prod est une fonction
- on l'évalue avec les mots-clés de l'étape (mc_liste)
- on construit le sd à partir de la classe obtenue
+ on l'evalue avec les mots-cles de l'etape (mc_liste)
+ on construit le sd a partir de la classe obtenue
et on le retourne
"""
sd_prod = self.definition.sd_prod
@@ -165,20 +170,21 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
d = self.cree_dict_valeurs(self.mc_liste)
try:
# la sd_prod d'une macro a l'objet macro_etape lui meme en premier argument
- # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute
- # les concepts produits dans self.sdprods, il faut le mettre Ã
- # zéro avant de l'appeler
+ # Comme sd_prod peut invoquer la methode type_sdprod qui ajoute
+ # les concepts produits dans self.sdprods, il faut le mettre a
+ # zero avant de l'appeler
self.sdprods = []
- sd_prod = apply(sd_prod, (self,), d)
- except (EOFError, self.UserError):
+ sd_prod = sd_prod(*(self,), **d)
+ #except (EOFError, self.UserError):
+ except (EOFError):
raise
- except Exception, exc:
+ except Exception as exc:
if CONTEXT.debug:
traceback.print_exc()
raise AsException("impossible d affecter un type au resultat:",
str(exc))
- # on teste maintenant si la SD est réutilisée ou s'il faut la créer
+ # on teste maintenant si la SD est reutilisee ou s'il faut la creer
if self.definition.reentrant != 'n' and self.reuse:
# Le concept produit est specifie reutilise (reuse=xxx). C'est une erreur mais non fatale.
# Elle sera traitee ulterieurement.
@@ -191,14 +197,14 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
self.typret = sd_prod
# Si la commande est obligatoirement reentrante et reuse n'a pas ete specifie, c'est une erreur.
# On ne fait rien ici. L'erreur sera traitee par la suite.
- # précaution
+ # precaution
if self.sd is not None and not isinstance(self.sd, ASSD):
raise AsException("""
-Impossible de typer le résultat !
+Impossible de typer le resultat !
Causes possibles :
Utilisateur : Soit la valeur fournie derrière "reuse" est incorrecte,
- soit il y a une "," à la fin d'une commande précédente.
- Développeur : La fonction "sd_prod" retourne un type invalide.""")
+ soit il y a une "," a la fin d'une commande precedente.
+ Developpeur : La fonction "sd_prod" retourne un type invalide.""")
return self.sd
def get_type_produit(self, force=0):
@@ -210,26 +216,26 @@ Causes possibles :
def get_type_produit_brut(self, force=0):
"""
- Retourne le type du concept résultat de l'étape et eventuellement type
- les concepts produits "à droite" du signe égal (en entrée)
+ Retourne le type du concept resultat de l'etape et eventuellement type
+ les concepts produits "a droite" du signe egal (en entree)
Deux cas :
- cas 1 : sd_prod de oper n'est pas une fonction
il s'agit d'une sous classe de ASSD
on retourne le nom de la classe
- cas 2 : il s'agit d'une fonction
- on l'évalue avec les mots-clés de l'étape (mc_liste)
- et on retourne son résultat
+ on l'evalue avec les mots-cles de l'etape (mc_liste)
+ et on retourne son resultat
"""
if not force and hasattr(self, 'typret'):
return self.typret
if type(self.definition.sd_prod) == types.FunctionType:
d = self.cree_dict_valeurs(self.mc_liste)
- # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute
- # les concepts produits dans self.sdprods, il faut le mettre à zéro
+ # Comme sd_prod peut invoquer la methode type_sdprod qui ajoute
+ # les concepts produits dans self.sdprods, il faut le mettre a zero
self.sdprods = []
- sd_prod = apply(self.definition.sd_prod, (self,), d)
+ sd_prod = self.definition.sd_prod(*(self,), **d)
else:
sd_prod = self.definition.sd_prod
return sd_prod
@@ -241,24 +247,20 @@ Causes possibles :
On tient compte des commandes qui modifient le contexte
comme DETRUIRE ou les macros
"""
- # L'étape courante pour laquelle le contexte a été calculé est
- # mémorisée dans self.index_etape_courante
- # message.debug(SUPERV, "g_context : %s", [k for k, v in self.g_context.items() if isinstance(v, ASSD)])
- # message.debug(SUPERV, "current_context : %s", [k for k, v in
+ # L'etape courante pour laquelle le contexte a ete calcule est
+ # memorisee dans self.index_etape_courante
# self.current_context.items() if isinstance(v, ASSD)])
d = self.current_context = self.g_context.copy()
if etape is None:
return d
# retirer les sd produites par 'etape'
sd_names = [sd.nom for sd in etape.get_created_sd()]
- # message.debug(SUPERV, "etape: %s, reuse : %s, sdprods de %s : %s",
- # self.nom, etape.reuse, etape.nom, sd_names)
for nom in sd_names:
try:
del d[nom]
except KeyError:
pass
- # Exemple avec INCLUDE_MATERIAU appelé dans une macro.
+ # Exemple avec INCLUDE_MATERIAU appele dans une macro.
# Les fonctions restent uniquement dans le contexte de INCLUDE_MATERIAU,
# elles ne sont donc pas dans le contexte de la macro appelante.
# from warnings import warn
@@ -268,8 +270,8 @@ Causes possibles :
def supprime(self):
"""
- Méthode qui supprime toutes les références arrières afin que
- l'objet puisse etre correctement détruit par le garbage collector
+ Methode qui supprime toutes les references arrières afin que
+ l'objet puisse etre correctement detruit par le garbage collector
"""
N_MCCOMPO.MCCOMPO.supprime(self)
self.jdc = None
@@ -282,18 +284,16 @@ Causes possibles :
etape.supprime()
def clean(self, netapes):
- """Nettoie les `netapes` dernières étapes de la liste des étapes."""
+ """Nettoie les `netapes` dernières etapes de la liste des etapes."""
if self.jdc.hist_etape:
return
- for i in xrange(netapes):
+ for i in range(netapes):
e = self.etapes.pop()
jdc = e.jdc
parent = e.parent
e.supprime()
e.parent = parent
e.jdc = jdc
- # message.debug(SUPERV, "MACRO.clean - etape = %s - refcount(e) = %d",
- # e.nom, sys.getrefcount(e))
del self.index_etapes[e]
def type_sdprod(self, co, t):
@@ -301,10 +301,10 @@ Causes possibles :
Cette methode a pour fonction de typer le concept co avec le type t
dans les conditions suivantes :
1. co est un concept produit de self
- 2. co est un concept libre : on le type et on l attribue à self
+ 2. co est un concept libre : on le type et on l attribue a self
Elle enregistre egalement les concepts produits (on fait l hypothese
- que la liste sdprods a été correctement initialisee, vide probablement)
+ que la liste sdprods a ete correctement initialisee, vide probablement)
"""
if not hasattr(co, 'etape'):
# Le concept vaut None probablement. On ignore l'appel
@@ -340,23 +340,21 @@ Il ne devrait y avoir qu'un seul mot cle porteur du concept CO (%s)""" % co)
Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pas CO mais seulement (%s)""" % (co, mcs.definition.type))
co.etape = self
# affectation du bon type du concept
- # message.debug(SUPERV, "MACRO.type_sdprod : changement de type de
- # %s --> %s", co, t)
co.change_type(t)
self.sdprods.append(co)
elif co.etape == self:
# Cas 2 : le concept est produit par la macro (self)
# On est deja passe par type_sdprod (Cas 1 ou 3).
- # XXX Peut-il être créer par une autre macro ?
- # On vérifie juste que c'est un vrai CO non déjà typé
+ # XXX Peut-il etre creer par une autre macro ?
+ # On verifie juste que c'est un vrai CO non deja type
# if co.etape == co._etape:
if co.is_typco() == 1:
- # Le concept a été créé par la macro (self)
+ # Le concept a ete cree par la macro (self)
# On peut changer son type
co.change_type(t)
else:
- # Le concept a été créé par une macro parente
+ # Le concept a ete cree par une macro parente
# Le type du concept doit etre coherent avec le type demande
# (seulement derive)
if not isinstance(co, t):
@@ -371,8 +369,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
# et on change le type du concept comme demande
# Au prealable, on verifie que le concept existant (co) est une instance
# possible du type demande (t)
- # Cette règle est normalement cohérente avec les règles de
- # vérification des mots-clés
+ # Cette règle est normalement coherente avec les règles de
+ # verification des mots-cles
if not isinstance(co, t):
raise AsException("""
Impossible de changer le type du concept produit (%s) en (%s).
@@ -391,7 +389,7 @@ Impossible de changer le type du concept (%s). Le mot cle associe ne supporte pa
self.sdprods.append(co)
elif self.issubstep(co.etape):
- # Cas 4 : Le concept est propriété d'une sous etape de la macro (self).
+ # Cas 4 : Le concept est propriete d'une sous etape de la macro (self).
# On est deja passe par type_sdprod (Cas 3 ou 1).
# Il suffit de le mettre dans la liste des concepts produits (self.sdprods)
# Le type du concept et t doivent etre derives.
@@ -403,7 +401,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
self.sdprods.append(co)
else:
- # Cas 5 : le concept est produit par une autre étape
+ # Cas 5 : le concept est produit par une autre etape
# On ne fait rien
return
@@ -434,7 +432,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def reg_sd(self, sd):
"""
Methode appelee dans l __init__ d un ASSD a sa creation pour
- s enregistrer (reserve aux ASSD créés au sein d'une MACRO)
+ s enregistrer (reserve aux ASSD crees au sein d'une MACRO)
"""
return self.jdc.o_register(sd)
@@ -443,37 +441,37 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
Cette methode doit fabriquer le concept produit retourne
par l'etape etape et le nommer.
- Elle est appelée à l'initiative de l'etape
+ Elle est appelee a l'initiative de l'etape
pendant le processus de construction de cette etape : methode __call__
de la classe CMD (OPER ou MACRO)
- Ce travail est réalisé par le contexte supérieur (etape.parent)
- car dans certains cas, le concept ne doit pas etre fabriqué mais
- l'etape doit simplement utiliser un concept préexistant.
- - Cas 1 : etape.reuse != None : le concept est réutilisé
- - Cas 2 : l'étape appartient à une macro qui a déclaré un concept
+ Ce travail est realise par le contexte superieur (etape.parent)
+ car dans certains cas, le concept ne doit pas etre fabrique mais
+ l'etape doit simplement utiliser un concept preexistant.
+ - Cas 1 : etape.reuse != None : le concept est reutilise
+ - Cas 2 : l'etape appartient a une macro qui a declare un concept
de sortie qui doit etre produit par cette etape.
"""
- if self.Outputs.has_key(nomsd):
- # Il s'agit d'un concept de sortie de la macro. Il ne faut pas le créer
+ if nomsd in self.Outputs:
+ # Il s'agit d'un concept de sortie de la macro. Il ne faut pas le creer
# Il faut quand meme appeler la fonction sd_prod si elle existe.
# get_type_produit le fait et donne le type attendu par la commande
- # pour verification ultérieure.
+ # pour verification ulterieure.
sdprod = etape.get_type_produit_brut()
sd = self.Outputs[nomsd]
# On verifie que le type du concept existant sd.__class__ est un sur type de celui attendu
- # Cette règle est normalement cohérente avec les règles de
- # vérification des mots-clés
+ # Cette règle est normalement coherente avec les règles de
+ # verification des mots-cles
if not issubclass(sdprod, sd.__class__):
raise AsException(
"Le type du concept produit %s devrait etre une sur classe de %s" % (sd.__class__, sdprod))
# La propriete du concept est transferee a l'etape avec le type
- # attendu par l'étape
+ # attendu par l'etape
etape.sd = sd
sd.etape = etape
if self.reuse == sd and etape.reuse != sd \
- and getattr(sd, "executed", 0) == 1: # n'a pas été pas détruit
- raise AsException("Le concept '%s' est réentrant dans la macro-commande %s. "
- "Il devrait donc l'être dans %s (produit sous le nom '%s')."
+ and getattr(sd, "executed", 0) == 1: # n'a pas ete pas detruit
+ raise AsException("Le concept '%s' est reentrant dans la macro-commande %s. "
+ "Il devrait donc l'etre dans %s (produit sous le nom '%s')."
% (sd.nom, self.nom, etape.nom, nomsd))
# On donne au concept le type produit par la sous commande.
# Le principe est le suivant : apres avoir verifie que le type deduit par la sous commande
@@ -481,8 +479,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
# on affecte au concept ce type car il peut etre plus precis
# (derive, en general)
sd.__class__ = sdprod
- # On force également le nom stocké dans l'attribut sdnom : on lui donne le nom
- # du concept associé à nomsd
+ # On force egalement le nom stocke dans l'attribut sdnom : on lui donne le nom
+ # du concept associe a nomsd
etape.sdnom = sd.nom
# pour l'ajouter au contexte de la macro
self.g_context[sd.nom] = sd
@@ -510,10 +508,10 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def NommerSdprod(self, sd, sdnom, restrict='non'):
"""
- Cette méthode est appelée par les etapes internes de la macro.
+ Cette methode est appelee par les etapes internes de la macro.
La macro appelle le JDC pour valider le nommage.
- On considère que l'espace de nom est unique et géré par le JDC.
- Si le nom est déjà utilisé, l'appel lève une exception.
+ On considère que l'espace de nom est unique et gere par le JDC.
+ Si le nom est deja utilise, l'appel lève une exception.
Si restrict=='non', on insère le concept dans le contexte du parent de la macro.
Si restrict=='oui', on insère le concept uniquement dans le contexte de la macro.
"""
@@ -522,22 +520,20 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
# create_sdprod. La seule chose a verifier apres conversion eventuelle du nom
# est de verifier que le nom n'est pas deja attribue. Ceci est fait en delegant
# au JDC par l'intermediaire du parent.
- # message.debug(SUPERV, "macro results = %s, (sdnom: %r, restrict: %r)",
- # self.Outputs.keys(), sdnom, restrict)
- if self.Outputs.has_key(sdnom):
+ if sdnom in self.Outputs :
# Il s'agit d'un concept de sortie de la macro produit par une
# sous commande
sdnom = self.Outputs[sdnom].nom
elif len(sdnom) > 0:
if sdnom[0] in ('_', '.') and sdnom[1:].isdigit():
- # il est déjà de la forme _9000012 ou .9000017
+ # il est deja de la forme _9000012 ou .9000017
pass
elif sdnom[0] == '_':
# Si le nom du concept commence par le caractère '_', on lui attribue
# un identificateur JEVEUX construit par gcncon.
- # nom commençant par __ : il s'agit de concepts qui seront détruits
+ # nom commençant par __ : il s'agit de concepts qui seront detruits
# nom commençant par _ : il s'agit de concepts intermediaires
- # qui seront gardés
+ # qui seront gardes
if len(sdnom) > 1 and sdnom[1] == '_':
sdnom = self.gcncon('.')
else:
@@ -548,10 +544,10 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
pass
else:
# On est dans le cas d'un nom de concept global
- # XXX à voir, création de CO() dans CALC_ESSAI (sdls139a)
+ # XXX a voir, creation de CO() dans CALC_ESSAI (sdls139a)
if not sd.is_typco():
raise AsException(
- "Résultat non déclaré par la macro %s : %s" % (self.nom, sdnom))
+ "Resultat non declare par la macro %s : %s" % (self.nom, sdnom))
self.last = sdnom
if restrict == 'non':
# On demande le nommage au parent mais sans ajout du concept dans le contexte du parent
@@ -560,26 +556,24 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
# On ajoute dans le contexte de la macro les concepts nommes
# Ceci est indispensable pour les CO (macro) dans un INCLUDE
self.g_context[sdnom] = sd
- # message.debug(SUPERV, "g_context[%s] = %s", sdnom, sd)
else:
# La demande de nommage vient probablement d'une macro qui a mis
# le concept dans son contexte. On ne traite plus que le nommage (restrict="oui")
- # message.debug(SUPERV, "restrict=oui co[%s] = %s", sdnom, sd)
self.parent.NommerSdprod(sd, sdnom, restrict='oui')
def delete_concept_after_etape(self, etape, sd):
"""
- Met à jour les étapes de la MACRO qui sont après etape suite Ã
+ Met a jour les etapes de la MACRO qui sont après etape suite a
la disparition du concept sd
"""
- # Cette methode est définie dans le noyau mais ne sert que pendant la phase de creation
- # des etapes et des concepts. Il n'y a aucun traitement particulier à réaliser
- # Dans d'autres conditions, il faudrait surcharger cette méthode.
+ # Cette methode est definie dans le noyau mais ne sert que pendant la phase de creation
+ # des etapes et des concepts. Il n'y a aucun traitement particulier a realiser
+ # Dans d'autres conditions, il faudrait surcharger cette methode.
return
def get_created_sd(self):
- """Retourne la liste des sd réellement produites par l'étape.
- Si reuse est présent, `self.sd` a été créée avant, donc n'est pas dans
+ """Retourne la liste des sd reellement produites par l'etape.
+ Si reuse est present, `self.sd` a ete creee avant, donc n'est pas dans
cette liste."""
sdprods = self.sdprods[:]
if not self.reuse and self.sd:
@@ -588,7 +582,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def get_last_concept(self):
"""Retourne le dernier concept produit dans la macro.
- Peut-être utile pour accéder au contenu 'fortran' dans une
+ Peut-etre utile pour acceder au contenu 'fortran' dans une
clause 'except'."""
return self.g_context.get(self.last, None)
@@ -601,12 +595,12 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def update_context(self, d):
"""
- Met à jour le contexte contenu dans le dictionnaire d
+ Met a jour le contexte contenu dans le dictionnaire d
Une MACRO_ETAPE peut ajouter plusieurs concepts dans le contexte
Une fonction enregistree dans op_init peut egalement modifier le contexte
"""
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init, (self, d))
+ self.definition.op_init(*(self, d))
if self.sd != None:
d[self.sd.nom] = self.sd
for co in self.sdprods:
@@ -644,8 +638,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
d = self.g_context = self.macro_const_context
globs = self.get_global_contexte()
d.update(globs)
- exec code in globs, d
- # pour ne pas conserver des références sur tout
+ exec(code, globs, d)
+ # pour ne pas conserver des references sur tout
self.macro_const_context = {}
def get_global_contexte(self):
@@ -657,19 +651,19 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
# Le contexte global est forme par concatenation du contexte
# du parent de self et de celui de l'etape elle meme (self)
# Pour les concepts, cela ne doit rien changer. Mais pour les constantes,
- # les valeurs de get_contexte_avant sont moins récentes que dans
- # get_global_contexte. On prend donc la précaution de ne pas écraser
- # ce qui y est déjà .
+ # les valeurs de get_contexte_avant sont moins recentes que dans
+ # get_global_contexte. On prend donc la precaution de ne pas ecraser
+ # ce qui y est deja.
d = self.parent.get_global_contexte()
d.update(self.g_context)
- d.update([(k, v) for k, v in self.parent.get_contexte_avant(self).items()
+ d.update([(k, v) for k, v in list(self.parent.get_contexte_avant(self).items())
if d.get(k) is None])
return d
def get_contexte_courant(self, etape_fille_du_jdc=None):
"""
- Retourne le contexte tel qu'il est au moment de l'exécution de
- l'étape courante.
+ Retourne le contexte tel qu'il est au moment de l'execution de
+ l'etape courante.
"""
ctx = {}
# update car par ricochet on modifierait jdc.current_context
@@ -680,8 +674,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def get_concept(self, nomsd):
"""
- Méthode pour recuperer un concept à partir de son nom
- dans le contexte du jdc connu avant l'exécution de la macro courante.
+ Methode pour recuperer un concept a partir de son nom
+ dans le contexte du jdc connu avant l'execution de la macro courante.
"""
# chercher dans self.get_contexte_avant, puis si non trouve
# self.parent.get_concept est peut-etre plus performant
@@ -692,13 +686,13 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def get_concept_by_type(self, nomsd, typesd, etape=None):
"""
- Méthode pour récuperer un concept à partir de son nom et de son type.
+ Methode pour recuperer un concept a partir de son nom et de son type.
Il aura comme père 'etape' (ou la macro courante si etape est absente).
"""
return self.parent.get_concept_by_type(nomsd, typesd, etape=etape or self)
def copy(self):
- """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
+ """ Methode qui retourne une copie de self non enregistree auprès du JDC
et sans sd
On surcharge la methode de ETAPE pour exprimer que les concepts crees
par la MACRO d'origine ne sont pas crees par la copie mais eventuellement
@@ -709,8 +703,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
return etape
def copy_intern(self, etape):
- """ Cette méthode effectue la recopie des etapes internes d'une macro
- passée en argument (etape)
+ """ Cette methode effectue la recopie des etapes internes d'une macro
+ passee en argument (etape)
"""
self.etapes = []
self.index_etapes = {}
@@ -744,8 +738,8 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
Cette methode sert a reinitialiser la parente de l'objet
"""
N_ETAPE.ETAPE.reparent(self, parent)
- # on ne change pas la parenté des concepts. On s'assure uniquement que
- # le jdc en référence est le bon
+ # on ne change pas la parente des concepts. On s'assure uniquement que
+ # le jdc en reference est le bon
for concept in self.sdprods:
concept.jdc = self.jdc
for e in self.etapes:
@@ -753,13 +747,13 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
def update_const_context(self, d):
"""
- Met à jour le contexte des constantes pour l'évaluation de
+ Met a jour le contexte des constantes pour l'evaluation de
formules dans la macro.
"""
- # Dans le jdc, const_context est mis à jour par exec_compile
- # Dans la macro, on n'a pas le code à compiler pour récupèrer les
- # constantes locales à la macro. On demande donc explicitement de
- # définir les constantes "locales".
+ # Dans le jdc, const_context est mis a jour par exec_compile
+ # Dans la macro, on n'a pas le code a compiler pour recupèrer les
+ # constantes locales a la macro. On demande donc explicitement de
+ # definir les constantes "locales".
self.macro_const_context.update(d)
def sd_accessible(self):
@@ -768,5 +762,5 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t,
sauf pour INCLUDE.
"""
if CONTEXT.debug:
- print ' `- MACRO sd_accessible :', self.nom
+ print((' `- MACRO sd_accessible :', self.nom))
return self.parent.sd_accessible() or not self.is_include()
diff --git a/Noyau/N_MCBLOC.py b/Noyau/N_MCBLOC.py
index 020b1593..d0612550 100644
--- a/Noyau/N_MCBLOC.py
+++ b/Noyau/N_MCBLOC.py
@@ -24,9 +24,10 @@
de type ENTITE
"""
+from __future__ import absolute_import
import types
-import N_MCCOMPO
+from . import N_MCCOMPO
class MCBLOC(N_MCCOMPO.MCCOMPO):
@@ -99,8 +100,8 @@ class MCBLOC(N_MCCOMPO.MCCOMPO):
# et caché ('c')
# On n'ajoute aucune information sur les blocs. Ils n'ont pas de défaut seulement
# une condition.
- for k, v in self.definition.entites.items():
- if not dico.has_key(k):
+ for k, v in list(self.definition.entites.items()):
+ if not k in dico:
if v.label == 'SIMP':
# Mot clé simple
dico[k] = v.defaut
diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py
index 5b9db489..254d775b 100644
--- a/Noyau/N_MCCOMPO.py
+++ b/Noyau/N_MCCOMPO.py
@@ -23,8 +23,10 @@
des OBJECT composites
"""
+from __future__ import absolute_import
+from __future__ import print_function
from copy import copy
-import N_OBJECT
+from . import N_OBJECT
class MCCOMPO(N_OBJECT.OBJECT):
@@ -40,7 +42,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
à partir du dictionnaire des arguments (valeur)
"""
if CONTEXT.debug:
- print "MCCOMPO.build_mc ", self.nom
+ print(("MCCOMPO.build_mc ", self.nom))
# Dans la phase de reconstruction args peut contenir des mots-clés
# qui ne sont pas dans le dictionnaire des entites de definition (self.definition.entites)
# de l'objet courant (self)
@@ -61,10 +63,10 @@ class MCCOMPO(N_OBJECT.OBJECT):
# 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut
# Phase 1.1 : on traite d'abord les SIMP pour enregistrer les mots cles
# globaux
- for k, v in self.definition.entites.items():
+ for k, v in list(self.definition.entites.items()):
if v.label != 'SIMP':
continue
- if args.has_key(k) or v.statut == 'o':
+ if k in args or v.statut == 'o':
#
# Creation par appel de la methode __call__ de la definition de la sous entite k de self
# si une valeur existe dans args ou est obligatoire (generique si toutes les
@@ -79,15 +81,15 @@ class MCCOMPO(N_OBJECT.OBJECT):
self.append_mc_global(objet)
elif objet.definition.position == 'global_jdc':
self.append_mc_global_jdc(objet)
- if args.has_key(k):
+ if k in args:
del args[k]
# Phase 1.2 : on traite les autres entites que SIMP
# (FACT en fait car un BLOC ne peut avoir le meme nom qu'un mot-clef)
- for k, v in self.definition.entites.items():
+ for k, v in list(self.definition.entites.items()):
if v.label == 'SIMP':
continue
- if args.has_key(k) or v.statut == 'o':
+ if k in args or v.statut == 'o':
#
# Creation par appel de la methode __call__ de la definition de la sous entite k de self
# si une valeur existe dans args ou est obligatoire (generique si toutes les
@@ -95,7 +97,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
#
objet = v(val=args.get(k, None), nom=k, parent=self)
mc_liste.append(objet)
- if args.has_key(k):
+ if k in args:
del args[k]
# Phase 2:
@@ -103,7 +105,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
# A ce stade, mc_liste ne contient que les fils de l'objet courant
# args ne contient plus que des mots-clés qui n'ont pas été attribués car ils sont
# à attribuer à des blocs du niveau inférieur ou bien sont des mots-clés erronés
- for k, v in self.definition.entites.items():
+ for k, v in list(self.definition.entites.items()):
if v.label != 'BLOC':
continue
# condition and a or b : Equivalent de l'expression : condition ?
@@ -185,7 +187,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
assert intersection_vide(dico, dadd)
dico.update(dadd)
else:
- assert not dico.has_key(v.nom), "deja vu : %s" % v.nom
+ assert not v.nom in dico, "deja vu : %s" % v.nom
dico[v.nom] = v.get_valeur()
# On rajoute tous les autres mots-clés locaux possibles avec la valeur
@@ -196,8 +198,8 @@ class MCCOMPO(N_OBJECT.OBJECT):
# une condition.
# XXX remplacer le not has_key par un dico différent et faire dico2.update(dico)
# ce n'est qu'un pb de perf
- for k, v in self.definition.entites.items():
- if not dico.has_key(k):
+ for k, v in list(self.definition.entites.items()):
+ if not k in dico :
if v.label == 'SIMP':
# Mot clé simple
dico[k] = v.defaut
@@ -224,7 +226,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
"""Semblable à `cree_dict_valeurs(liste=self.mc_liste)` en supprimant les
valeurs None."""
dico = self.cree_dict_valeurs(self.mc_liste, condition=0)
- dico = dict([(k, v) for k, v in dico.items() if v is not None])
+ dico = dict([(k, v) for k, v in list(dico.items()) if v is not None])
return dico
def cree_dict_condition(self, liste=[], condition=0):
@@ -237,7 +239,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
# On ajoute la cle "reuse" pour les MCCOMPO qui ont un attribut reuse. A destination
# uniquement des commandes. Ne devrait pas etre dans cette classe mais
# dans une classe dérivée
- if not dico.has_key('reuse') and hasattr(self, 'reuse'):
+ if not 'reuse' in dico and hasattr(self, 'reuse'):
dico['reuse'] = self.reuse
return dico
@@ -249,10 +251,10 @@ class MCCOMPO(N_OBJECT.OBJECT):
etape = self.get_etape()
if etape:
dict_mc_globaux_fac = self.recherche_mc_globaux_facultatifs()
- for k, v in etape.mc_globaux.items():
+ for k, v in list(etape.mc_globaux.items()):
dict_mc_globaux_fac[k] = v.get_valeur()
if self.jdc:
- for k, v in self.jdc.mc_globaux.items():
+ for k, v in list(self.jdc.mc_globaux.items()):
dict_mc_globaux_fac[k] = v.get_valeur()
return dict_mc_globaux_fac
else:
@@ -268,7 +270,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
etape = self.get_etape()
if not etape:
return {}
- for k, v in etape.definition.entites.items():
+ for k, v in list(etape.definition.entites.items()):
if v.label != 'SIMP':
continue
if v.position != 'global':
@@ -337,7 +339,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
pass
# On a rien trouve, le mot cle est absent.
# On leve une exception
- raise IndexError, "Le mot cle %s n existe pas dans %s" % (key, self)
+ raise IndexError("Le mot cle %s n existe pas dans %s" % (key, self))
def get_child(self, name, restreint='non'):
"""
@@ -429,7 +431,7 @@ class MCCOMPO(N_OBJECT.OBJECT):
dico = {}
for child in self.mc_liste:
daux = child.get_sd_mcs_utilisees()
- for cle in daux.keys():
+ for cle in daux:
dico[cle] = dico.get(cle, [])
dico[cle].extend(daux[cle])
return dico
@@ -458,10 +460,10 @@ class MCCOMPO(N_OBJECT.OBJECT):
def intersection_vide(dict1, dict2):
"""Verification qu'il n'y a pas de clé commune entre 'dict1' et 'dict2'."""
- sk1 = set(dict1.keys())
- sk2 = set(dict2.keys())
+ sk1 = set(dict1)
+ sk2 = set(dict2)
inter = sk1.intersection(sk2)
ok = len(inter) == 0
if not ok:
- print 'ERREUR: Mot(s)-clef(s) vu(s) plusieurs fois :', tuple(inter)
+ print(('ERREUR: Mot(s)-clef(s) vu(s) plusieurs fois :', tuple(inter)))
return ok
diff --git a/Noyau/N_MCFACT.py b/Noyau/N_MCFACT.py
index 361373cc..f054ec5f 100644
--- a/Noyau/N_MCFACT.py
+++ b/Noyau/N_MCFACT.py
@@ -24,7 +24,8 @@
de type ENTITE
"""
-import N_MCCOMPO
+from __future__ import absolute_import
+from . import N_MCCOMPO
class MCFACT(N_MCCOMPO.MCCOMPO):
diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py
index 90a1d76e..21912655 100644
--- a/Noyau/N_MCLIST.py
+++ b/Noyau/N_MCLIST.py
@@ -24,12 +24,24 @@
de type ENTITE
"""
+from __future__ import absolute_import
+try :
+ from future import standard_library
+ standard_library.install_aliases()
+except :
+ pass
from copy import copy
-import UserList
import types
+try:
+ from UserList import UserList
+except ImportError:
+ from collections import UserList
-class MCList(UserList.UserList):
+
+
+
+class MCList(UserList):
""" Liste semblable a la liste Python
mais avec quelques methodes en plus
@@ -95,7 +107,7 @@ class MCList(UserList.UserList):
if resu != None:
return resu
# Phase 3 : on cherche dans les entites possibles pour les défauts
- for k, v in obj.definition.entites.items():
+ for k, v in list(obj.definition.entites.items()):
# if k == name: return v.defaut
if k == name:
if v.defaut != None:
@@ -143,7 +155,7 @@ class MCList(UserList.UserList):
dico = {}
for child in self.data:
daux = child.get_sd_mcs_utilisees()
- for cle in daux.keys():
+ for cle in daux:
dico[cle] = dico.get(cle, [])
dico[cle].extend(daux[cle])
return dico
@@ -211,7 +223,7 @@ class MCList(UserList.UserList):
"""
Dans le cas d un mot cle facteur de longueur 1 on simule un scalaire
"""
- if type(key) != types.IntType and len(self) == 1:
+ if type(key) != int and len(self) == 1:
return self.data[0].get_mocle(key)
else:
return self.data[key]
@@ -224,7 +236,7 @@ class MCList(UserList.UserList):
dresu = []
for mcf in self:
dico = mcf.cree_dict_valeurs(mcf.mc_liste)
- for i in dico.keys():
+ for i in list(dico.keys()):
if dico[i] == None:
del dico[i]
dresu.append(dico)
diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py
index 7840ee73..dc2b5f4f 100644
--- a/Noyau/N_MCSIMP.py
+++ b/Noyau/N_MCSIMP.py
@@ -24,13 +24,14 @@
de type ENTITE
"""
+from __future__ import absolute_import
from copy import copy
from Noyau.N_ASSD import ASSD
from Noyau.N_CO import CO
-import N_OBJECT
-from N_CONVERT import ConversionFactory
-from N_types import force_list, is_sequence
+from . import N_OBJECT
+from .N_CONVERT import ConversionFactory
+from .N_types import force_list, is_sequence
class MCSIMP(N_OBJECT.OBJECT):
@@ -102,8 +103,7 @@ class MCSIMP(N_OBJECT.OBJECT):
elif not is_sequence(v) and self.definition.max != 1:
v = (v, )
# traitement particulier pour les complexes ('RI', r, i)
- if 'C' in self.definition.type and self.definition.max != 1 \
- and v[0] in ('RI', 'MP'):
+ if 'C' in self.definition.type and self.definition.max != 1 and v != None and v[0] in ('RI', 'MP'):
v = (v, )
return v
diff --git a/Noyau/N_OBJECT.py b/Noyau/N_OBJECT.py
index a9c3e421..646d8fca 100644
--- a/Noyau/N_OBJECT.py
+++ b/Noyau/N_OBJECT.py
@@ -22,11 +22,15 @@
Ce module contient la classe OBJECT classe mère de tous les objets
servant à controler les valeurs par rapport aux définitions
"""
-from N_CR import CR
-from strfunc import ufmt
+from __future__ import absolute_import
+try :
+ from builtins import object
+except :
+ pass
+from .N_CR import CR
-class OBJECT:
+class OBJECT(object):
"""
Classe OBJECT : cette classe est virtuelle et sert de classe mère
diff --git a/Noyau/N_OPER.py b/Noyau/N_OPER.py
index 3c14e09a..9464651a 100644
--- a/Noyau/N_OPER.py
+++ b/Noyau/N_OPER.py
@@ -23,14 +23,13 @@
qui permet de spécifier les caractéristiques d'un opérateur
"""
+from __future__ import absolute_import
import types
-import string
import traceback
-import N_ENTITE
-import N_ETAPE
-import nommage
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_ETAPE
+from . import nommage
class OPER(N_ENTITE.ENTITE):
@@ -101,7 +100,7 @@ class OPER(N_ENTITE.ENTITE):
self.ang = ang
self.repetable = repetable
self.docu = docu
- if type(regles) == types.TupleType:
+ if type(regles) == tuple:
self.regles = regles
else:
self.regles = (regles,)
diff --git a/Noyau/N_OPS.py b/Noyau/N_OPS.py
index c9e1d6ed..3b77056a 100644
--- a/Noyau/N_OPS.py
+++ b/Noyau/N_OPS.py
@@ -17,10 +17,15 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-from N_utils import import_object
+from __future__ import absolute_import
+try :
+ from builtins import object
+except :
+ pass
+from .N_utils import import_object
-class OPS:
+class OPS(object):
"""Wrapper to ops functions.
This allows to import them only when they are needed."""
diff --git a/Noyau/N_PROC.py b/Noyau/N_PROC.py
index 3560f099..949e2e2c 100644
--- a/Noyau/N_PROC.py
+++ b/Noyau/N_PROC.py
@@ -23,13 +23,12 @@
qui permet de spécifier les caractéristiques d'une procédure
"""
+from __future__ import absolute_import
import types
-import string
import traceback
-import N_ENTITE
-import N_PROC_ETAPE
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_PROC_ETAPE
class PROC(N_ENTITE.ENTITE):
@@ -95,7 +94,7 @@ class PROC(N_ENTITE.ENTITE):
#self.ang=""
self.ang=ang
self.docu = docu
- if type(regles) == types.TupleType:
+ if type(regles) == tuple:
self.regles = regles
else:
self.regles = (regles,)
diff --git a/Noyau/N_PROC_ETAPE.py b/Noyau/N_PROC_ETAPE.py
index 331bcfb2..ad590250 100644
--- a/Noyau/N_PROC_ETAPE.py
+++ b/Noyau/N_PROC_ETAPE.py
@@ -24,16 +24,16 @@
"""
# Modules Python
+from __future__ import absolute_import
import types
import sys
-import string
import traceback
# Modules EFICAS
-import N_MCCOMPO
-import N_ETAPE
-from N_Exception import AsException
-import N_utils
+from . import N_MCCOMPO
+from . import N_ETAPE
+from .N_Exception import AsException
+from . import N_utils
class PROC_ETAPE(N_ETAPE.ETAPE):
@@ -68,11 +68,11 @@ class PROC_ETAPE(N_ETAPE.ETAPE):
try:
if self.parent:
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init, (
+ self.definition.op_init(*(
self, self.parent.g_context))
else:
pass
- except AsException, e:
+ except AsException as e:
raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
'fichier : ', self.appel[1], e)
except EOFError:
@@ -82,7 +82,7 @@ class PROC_ETAPE(N_ETAPE.ETAPE):
sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2])
raise AsException("Etape ", self.nom, 'ligne : ', self.appel[0],
'fichier : ', self.appel[1] + '\n',
- string.join(l))
+ ''.join(l))
self.Execute()
return None
@@ -110,4 +110,4 @@ class PROC_ETAPE(N_ETAPE.ETAPE):
Seule une fonction enregistree dans op_init pourrait le faire
"""
if type(self.definition.op_init) == types.FunctionType:
- apply(self.definition.op_init, (self, d))
+ self.definition.op_init(*(self, d))
diff --git a/Noyau/N_REGLE.py b/Noyau/N_REGLE.py
index 5f609e8e..dafb8917 100644
--- a/Noyau/N_REGLE.py
+++ b/Noyau/N_REGLE.py
@@ -37,10 +37,15 @@
r.verif({"INFO":v1,"AFFE":v2)
"""
+from __future__ import absolute_import
+try :
+ from builtins import object
+except :
+ pass
import types
-class REGLE:
+class REGLE(object):
def __init__(self, *args):
"""
@@ -71,9 +76,9 @@ class REGLE:
Ceci permet d'avoir un traitement identique pour les listes et les dictionnaires
"""
- if type(args) == types.DictionaryType:
+ if type(args) == dict:
return args
- elif type(args) == types.ListType:
+ elif type(args) == list:
dico = {}
for arg in args:
dico[arg] = 0
diff --git a/Noyau/N_SENSIBILITE.py b/Noyau/N_SENSIBILITE.py
index 3bc1ff51..33d120ad 100644
--- a/Noyau/N_SENSIBILITE.py
+++ b/Noyau/N_SENSIBILITE.py
@@ -23,10 +23,9 @@
sur présence de la sensibilité.
"""
-from types import TupleType, ListType
-EnumTypes = (TupleType, ListType)
+from __future__ import absolute_import
-from N_REGLE import REGLE
+from .N_REGLE import REGLE
# -----------------------------------------------------------------------------
class CONCEPT_SENSIBLE(REGLE):
@@ -66,19 +65,19 @@ class CONCEPT_SENSIBLE(REGLE):
if not hasattr(etape.sd,"sensi"):
etape.sd.sensi = {}
# si ENSEMBLE, la sd nominale est forcément produite
- if self.mode == self._modes['ENSEMBLE'] and not etape.sd.sensi.has_key('nominal'):
+ if self.mode == self._modes['ENSEMBLE'] and not 'nominal' in etape.sd.sensi :
etape.sd.sensi['nominal'] = id_etape
# liste des paramètres sensibles
valeur = obj[self.mocle]
if valeur == None:
# pas de sensibilité, la sd nominale est produite
- if not etape.sd.sensi.has_key('nominal'):
+ if not 'nominal' in etape.sd.sensi:
etape.sd.sensi['nominal'] = id_etape
return '', 1
- if not type(valeur) in EnumTypes:
+ if not type(valeur) in (list, tuple):
valeur = [valeur,]
for v in valeur:
- if not etape.sd.sensi.has_key(v.get_name()):
+ if not v.get_name() in etape.sd.sensi:
etape.sd.sensi[v.get_name()] = id_etape
return '', 1
@@ -121,7 +120,7 @@ class REUSE_SENSIBLE(REGLE):
text = "Commande non réentrante en l'absence de sensibilité."
return text, 0
else:
- if not type(valeur) in EnumTypes:
+ if not type(valeur) in (list, tuple):
valeur = [valeur,]
for ps in valeur:
if hasattr(sd, 'sensi') and sd.sensi.get(ps.nom, id_etape) != id_etape:
@@ -158,7 +157,7 @@ class DERIVABLE(REGLE):
concept = obj[self.mocle]
except IndexError:
return '', 1
- if not type(concept) in EnumTypes:
+ if not type(concept) in (list, tuple):
concept = [concept,]
l_ps = obj["SENSIBILITE"]
for co in concept:
@@ -173,7 +172,7 @@ class DERIVABLE(REGLE):
return text, 0
else:
# sensibilité spécifiée
- if not type(l_ps) in EnumTypes:
+ if not type(l_ps) in (list, tuple):
l_ps = [l_ps,]
for ps in l_ps:
if not hasattr(co,"sensi") or not co.sensi.get(ps.nom):
diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py
index 21ee6345..cc1d47ca 100644
--- a/Noyau/N_SIMP.py
+++ b/Noyau/N_SIMP.py
@@ -22,11 +22,11 @@
qui permet de spécifier les caractéristiques des mots clés simples
"""
+from __future__ import absolute_import
import types
-import N_ENTITE
-import N_MCSIMP
-from strfunc import ufmt
+from . import N_ENTITE
+from . import N_MCSIMP
class SIMP(N_ENTITE.ENTITE):
@@ -48,7 +48,7 @@ class SIMP(N_ENTITE.ENTITE):
def __init__(self, typ,ang="", fr="", statut='f', into=None, defaut=None,
min=1, max=1, homo=1, position='local',
- val_min='**', val_max='**', docu="", validators=None,
+ val_min=float('-inf'), val_max=float('inf'), docu="", validators=None,
sug=None):
"""
Un mot-clé simple est caractérisé par les attributs suivants :
@@ -69,7 +69,7 @@ class SIMP(N_ENTITE.ENTITE):
"""
N_ENTITE.ENTITE.__init__(self, validators)
# Initialisation des attributs
- if type(typ) == types.TupleType:
+ if type(typ) == tuple:
self.type = typ
else:
self.type = (typ,)
@@ -86,6 +86,10 @@ class SIMP(N_ENTITE.ENTITE):
self.docu = docu
self.sug = sug
self.ang=ang
+ if self.max == '**' : self.max = float('inf')
+ if self.val_max == '**' : self.val_max = float('inf')
+ if self.min == '**' : self.min = float('-inf')
+ if self.val_min == '**' : self.val_min = float('-inf')
def verif_cata(self):
"""
diff --git a/Noyau/N_VALIDATOR.py b/Noyau/N_VALIDATOR.py
index e9493c7d..61002462 100644
--- a/Noyau/N_VALIDATOR.py
+++ b/Noyau/N_VALIDATOR.py
@@ -24,13 +24,22 @@
Ce module contient toutes les classes necessaires pour
implanter le concept de validateur dans Accas
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except : pass
+
import types
import traceback
import re
-from N_ASSD import ASSD
-from N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_sequence
-from strfunc import convert, ufmt
+from .N_ASSD import ASSD
+from .N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_sequence
from Extensions.i18n import tr
+import six
+from six.moves import range
@@ -47,7 +56,7 @@ def cls_mro(cls):
return mro
-class Protocol:
+class Protocol(object):
def __init__(self, name):
self.registry = {}
@@ -150,49 +159,51 @@ class TypeProtocol(PProtocol):
if self.is_complexe(obj):
return obj
elif type_permis == 'TXM':
- if is_str(obj):
- return obj
+ if is_str(obj):
+ return obj
elif type_permis == 'shell':
if is_str(obj):
return obj
elif type_permis == 'Fichier':
import os
- if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
- return obj
- else:
- raise ValError(
- ufmt(_(tr(u"%s n'est pas un fichier valide")), repr(obj)))
+ try :
+ if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
+ return obj
+ else:
+ raise ValError( "%s n'est pas un fichier valide" % repr(obj))
+ except :
+ raise ValError( "%s n'est pas un fichier valide" % repr(obj))
+
elif type_permis == 'FichierNoAbs':
import os
if (len(typ) > 2 and typ[2] == "Sauvegarde") or isinstance(obj, type("")):
return obj
else:
- raise ValError(
- ufmt(_(tr("%s n'est pas un fichier valide")), repr(obj)))
+ raise ValError( "%s n'est pas un fichier valide" % repr(obj))
+
elif type_permis == 'Repertoire':
import os
- if os.path.isdir(obj):
- return obj
- else:
- raise ValError(
- ufmt(_(tr(u"%s n'est pas un repertoire valide")), repr(obj)))
- elif type(type_permis) == types.ClassType or isinstance(type_permis, type):
+ try :
+ if os.path.isdir(obj): return obj
+ else: raise ValError( "%s n'est pas un repertoire valide" % repr(obj))
+ except :
+ raise ValError( "%s n'est pas un repertoire valide" % repr(obj))
+ elif type(type_permis) == type or isinstance(type_permis, type):
try:
if self.is_object_from(obj, type_permis):
return obj
- except Exception, err:
+ except Exception as err:
pass
elif type(type_permis) == types.InstanceType or isinstance(type_permis, object):
try:
if type_permis.__convert__(obj):
return obj
- except Exception, err:
+ except Exception as err:
pass
else:
- print convert(ufmt(_(tr(u"Type non encore gere %s")), `type_permis`))
+ print(("Type non encore gere %s" %type_permis))
raise ValError(
- ufmt(_(tr(u"%s (de type %s) n'est pas d'un type autorise: %s %s")),
- repr(obj), type(obj), typ, unicode(err)))
+ tr("%s (de type %s) n'est pas d'un type autorise: %s %s") % (repr(obj), type(obj), typ, err))
def is_complexe(self, valeur):
""" Retourne 1 si valeur est un complexe, 0 sinon """
@@ -227,7 +238,7 @@ class TypeProtocol(PProtocol):
try:
v = convert(objet)
return v is not None
- except ValueError, err:
+ except ValueError as err:
raise
except:
return 0
@@ -248,11 +259,9 @@ class CardProtocol(PProtocol):
def default(self, obj, min, max):
length = len(obj)
- if length < min or length > max:
+ if (length < min) or( length > max):
raise ValError(
- ufmt(
- _(tr(u"Nombre d'arguments de %s incorrect (min = %s, max = %s)")),
- repr(obj), min, max))
+ "Nombre d'arguments de %s incorrect (min = %s, max = %s)" % (repr(obj), min, max))
return obj
@@ -262,7 +271,8 @@ class IntoProtocol(PProtocol):
# pas de registre par instance. Registre unique pour toutes les instances
registry = {}
- def __init__(self, name, into=None, val_min='**', val_max='**'):
+ def __init__(self, name, into=None, val_min=float('-inf'), val_max=float('inf')):
+
PProtocol.__init__(
self, name, into=into, val_min=val_min, val_max=val_max)
self.val_min = val_min
@@ -272,8 +282,7 @@ class IntoProtocol(PProtocol):
if into:
if obj not in into:
raise ValError(
- ufmt(
- _(tr(u"La valeur : %s ne fait pas partie des choix possibles %s")), repr(obj), into))
+ tr("La valeur : %s ne fait pas partie des choix possibles %s") % (repr(obj), into))
else:
# on est dans le cas d'un ensemble continu de valeurs possibles
# (intervalle)
@@ -284,13 +293,11 @@ class IntoProtocol(PProtocol):
val_max = obj + 1
if obj < val_min or obj > val_max:
raise ValError(
- ufmt(
- _(tr(u"La valeur : %s est en dehors du domaine de validite [ %s , %s ]")),
- repr(obj), self.val_min, self.val_max))
+ tr("La valeur : %s est en dehors du domaine de validite [ %s , %s ]") %(repr(obj), self.val_min, self.val_max))
return obj
-class MinStr:
+class MinStr(object):
# exemple de classe pour verificateur de type
# on utilise des instances de classe comme type (typ=MinStr(3,6), par
# exemple)
@@ -300,15 +307,12 @@ class MinStr:
self.max = max
def __convert__(self, valeur):
- if is_str(valeur) and self.min <= len(valeur) <= self.max:
- return valeur
+ if is_str(valeur) and self.min <= len(valeur) <= self.max: return valeur
raise ValError(
- ufmt(
- _(tr(u"%s n'est pas une chaine de longueur comprise entre %s et %s")),
- valeur, self.min, self.max))
+ "%s n'est pas une chaine de longueur comprise entre %s et %s" % (valeur, self.min, self.max))
def __repr__(self):
- return ufmt(_(tr(u"TXM de longueur entre %s et %s")), self.min, self.max)
+ return tr("TXM de longueur entre %s et %s" % (self.min, self.max))
class Valid(PProtocol):
@@ -320,7 +324,7 @@ class Valid(PProtocol):
fonctionnement et dans certains cas leur comportement par défaut.
@ivar cata_info: raison de la validite ou de l'invalidite du validateur meme
- @type cata_info: C{string}
+ @type cata_info: C{}
"""
registry = {}
@@ -333,7 +337,7 @@ class Valid(PProtocol):
la validation demandée par le validateur. Elle est utilisée
pour produire le compte-rendu de validité du mot clé associé.
"""
- return _(u"valeur valide")
+ return "valeur valide"
def aide(self):
"""
@@ -526,7 +530,7 @@ class Compulsory(ListVal):
self.cata_info = ""
def info(self):
- return ufmt(_(tr(u"valeur %s obligatoire")), `self.elem`)
+ return (tr(u"valeur %s obligatoire") % self.elem)
def default(self, valeur, elem):
return valeur
@@ -542,8 +546,7 @@ class Compulsory(ListVal):
elem.remove(v)
if elem:
raise ValError(
- ufmt(_(tr(u"%s ne contient pas les elements obligatoires : %s ")),
- valeur, elem))
+ tr("%s ne contient pas les elements obligatoires : %s ") % (valeur, elem))
return valeur
def has_into(self):
@@ -560,7 +563,7 @@ class Compulsory(ListVal):
return 1
def info_erreur_item(self):
- return _(u"La valeur n'est pas dans la liste des choix possibles")
+ return tr("La valeur n'est pas dans la liste des choix possibles")
class Together(ListVal):
@@ -578,7 +581,7 @@ class Together(ListVal):
self.cata_info = ""
def info(self):
- return ufmt(_(tr(u"%s present ensemble")), `self.elem`)
+ return (tr("%s present ensemble") % self.elem)
def default(self, valeur, elem):
return valeur
@@ -593,7 +596,7 @@ class Together(ListVal):
if v in elem: elem.remove(v)
if ( len(elem) == 0 ): return valeur
if len(elem) != len(list(self.elem)) :
- raise ValError( ufmt(_(tr(u"%s ne contient pas les elements devant etre presents ensemble: %s ")), valeur, elem))
+ raise ValError(tr("%s ne contient pas les elements devant etre presents ensemble: %s ") %( valeur, elem))
return valeur
def has_into(self):
@@ -612,7 +615,7 @@ class Together(ListVal):
return 1
def info_erreur_item(self):
- return _(u"La valeur n'est pas dans la liste des choix possibles")
+ return tr("La valeur n'est pas dans la liste des choix possibles")
class Absent(ListVal):
@@ -630,7 +633,7 @@ class Absent(ListVal):
self.cata_info = ""
def info(self):
- return ufmt(_(tr(u"%s absent")), `self.elem`)
+ return (tr("%s absent") % self.elem)
def default(self, valeur, elem):
return valeur
@@ -643,7 +646,7 @@ class Absent(ListVal):
for val in valeur:
v = self.adapt(val)
if v in elem:
- raise ValError( ufmt(_(tr(u"%s n'est pas autorise : %s ")), v, elem))
+ raise ValError(tr("%s n'est pas autorise : %s ")% (v, elem))
return valeur
def has_into(self):
@@ -659,7 +662,7 @@ class Absent(ListVal):
return 1
def info_erreur_item(self):
- return _(u"La valeur n'est pas dans la liste des choix possibles")
+ return tr("La valeur n'est pas dans la liste des choix possibles")
class NoRepeat(ListVal):
@@ -672,14 +675,14 @@ class NoRepeat(ListVal):
self.cata_info = ""
def info(self):
- return _(u"Pas de doublon dans la liste")
+ return tr("Pas de doublon dans la liste")
def info_erreur_liste(self):
- return _(u"Les doublons ne sont pas permis")
+ return tr("Les doublons ne sont pas permis")
def default(self, valeur):
if valeur in self.liste:
- raise ValError(ufmt(_(tr(u"%s est un doublon")), valeur))
+ raise ValError( tr("%s est un doublon") % valeur)
return valeur
def convert(self, valeur):
@@ -735,10 +738,10 @@ class LongStr(ListVal):
self.cata_info = ""
def info(self):
- return ufmt(_(tr(u"longueur de la chaine entre %s et %s")), self.low, self.high)
+ return (tr("longueur de la chaine entre %s et %s") %( self.low, self.high))
def info_erreur_item(self):
- return _(tr(u"Longueur de la chaine incorrecte"))
+ return tr("Longueur de la chaine incorrecte")
def convert(self, valeur):
for val in valeur:
@@ -754,13 +757,13 @@ class LongStr(ListVal):
def default(self, valeur, low, high):
if not is_str(valeur):
- raise ValError(ufmt(_(tr(u"%s n'est pas une chaine")), repr(valeur)))
+ raise ValError ("%s n'est pas une chaine" % repr(valeur))
if valeur[0] == "'" and valeur[-1] == "'":
low = low + 2
high = high + 2
if len(valeur) < low or len(valeur) > high:
raise ValError(
- ufmt(_(tr(u"%s n'est pas de la bonne longueur")), repr(valeur)))
+ "%s n'est pas de la bonne longueur" % repr(valeur))
return valeur
@@ -776,10 +779,10 @@ class OnlyStr(ListVal):
self.cata_info = ""
def info(self):
- return _(u"regarde si c'est une chaine")
+ return tr("regarde si c'est une chaine")
def info_erreur_item(self):
- return _(u"Ce n'est pas une chaine")
+ return tr("Ce n'est pas une chaine")
def convert(self, valeur):
for val in valeur:
@@ -795,7 +798,7 @@ class OnlyStr(ListVal):
def default(self, valeur):
if not is_str(valeur):
- raise ValError(ufmt(_(tr(u"%s n'est pas une chaine")), repr(valeur)))
+ raise ValError (tr("%s n'est pas une chaine") % repr(valeur))
return valeur
@@ -812,10 +815,10 @@ class OrdList(ListVal):
self.cata_info = ""
def info(self):
- return ufmt(_(tr(u"liste %s")), self.ord)
+ return ("liste %s" % self.ord)
def info_erreur_liste(self):
- return ufmt(_(tr(u"La liste doit etre en ordre %s")), self.ord)
+ return (tr("La liste doit etre en ordre %s") % self.ord)
def convert(self, valeur):
self.val = None
@@ -828,11 +831,11 @@ class OrdList(ListVal):
if self.ord == 'croissant':
if self.val is not None and valeur < self.val:
raise ValError(
- ufmt(_(tr(u"%s n'est pas par valeurs croissantes")), repr(self.liste)))
+ (tr("%s n'est pas par valeurs croissantes") % repr(self.liste)))
elif self.ord == 'decroissant':
if self.val is not None and valeur > self.val:
raise ValError(
- ufmt(_(tr(u"%s n'est pas par valeurs decroissantes")), repr(self.liste)))
+ (tr("%s n'est pas par valeurs decroissantes") % repr(self.liste)))
self.val = valeur
return valeur
@@ -890,7 +893,7 @@ class OrVal(Valid):
return validator.convert(valeur)
except:
pass
- raise ValError(ufmt(_(tr(u"%s n'est pas du bon type")), repr(valeur)))
+ raise ValError(tr("%s n'est pas du bon type")% repr(valeur))
def info_erreur_item(self):
l = []
@@ -1180,22 +1183,22 @@ class RangeVal(ListVal):
def __init__(self, low, high):
self.low = low
self.high = high
- self.cata_info = ufmt(_(tr(u"%s doit etre inferieur a %s")), low, high)
+ self.cata_info = (tr("%s doit etre inferieur a %s") % (low, high))
def info(self):
- return ufmt(_(tr(u"valeur dans l'intervalle %s , %s")), self.low, self.high)
+ return (tr("valeur dans l'intervalle %s , %s") %( self.low, self.high))
def convert_item(self, valeur):
if valeur > self.low and valeur < self.high:
return valeur
- raise ValError(ufmt(_(tr(u"%s devrait etre comprise entre %s et %s")),
- valeur, self.low, self.high))
+ raise ValError(tr("%s devrait etre comprise entre %s et %s") % (valeur, self.low, self.high))
def verif_item(self, valeur):
return valeur > self.low and valeur < self.high
def info_erreur_item(self):
- return ufmt(_(tr(u"La valeur doit etre comprise entre %s et %s")), self.low, self.high)
+ return (tr("la valeur %s doit etre comprise entre %s et %s") % (valeur, self.low, self.high))
+
def verif_cata(self):
if self.low > self.high:
@@ -1213,18 +1216,16 @@ class CardVal(Valid):
catalogues
"""
- def __init__(self, min='**', max='**'):
+ def __init__(self, min=float('-inf'), max=float('inf')):
self.min = min
self.max = max
- self.cata_info = ufmt(_(tr(u"%s doit etre inferieur a %s")), min, max)
+ self.cata_info = (tr("%s doit etre inferieur a %s") %(min, max))
def info(self):
- return ufmt(_(tr(u"longueur de liste comprise entre %s et %s")), self.min, self.max)
+ return (tr("longueur de liste comprise entre %s et %s") %(self.min, self.max))
def info_erreur_liste(self):
- return ufmt(
- _(tr(u"Le cardinal de la liste doit etre compris entre %s et %s")),
- self.min, self.max)
+ return (tr("Le cardinal de la liste doit etre compris entre %s et %s") % (self.min, self.max))
def is_list(self):
return self.max == '**' or self.max > 1
@@ -1250,10 +1251,10 @@ class CardVal(Valid):
l = 1
if self.max != '**' and l > self.max:
raise ValError(
- ufmt(_(tr(u"%s devrait etre de longueur inferieure a %s")), valeur, self.max))
+ tr("%s devrait etre de longueur inferieure a %s") % (valeur, self.max))
if self.min != '**' and l < self.min:
raise ValError(
- ufmt(_(tr(u"%s devrait etre de longueur superieure a %s")), valeur, self.min))
+ tr("%s devrait etre de longueur superieure a %s") % (valeur, self.min))
return valeur
def verif_item(self, valeur):
@@ -1303,21 +1304,21 @@ class PairVal(ListVal):
return _(u"valeur paire")
def info_erreur_item(self):
- return _(u"La valeur saisie doit etre paire")
+ return tr("La valeur saisie doit etre paire")
def convert(self, valeur):
for val in valeur:
v = self.adapt(val)
if v % 2 != 0:
raise ValError(
- ufmt(_(tr(u"%s contient des valeurs non paires")), repr(valeur)))
+ tr("%s contient des valeurs non paires") % repr(valeur))
return valeur
def default(self, valeur):
return valeur
def verif_item(self, valeur):
- if type(valeur) not in (int, long):
+ if type(valeur) not in six.integer_types:
return 0
return valeur % 2 == 0
@@ -1348,14 +1349,13 @@ class EnumVal(ListVal):
self.cata_info = ""
def info(self):
- return "valeur dans %s" % `self.into`
+ return ("valeur dans %s" % self.into)
def convert_item(self, valeur):
if valeur in self.into:
return valeur
raise ValError(
- ufmt(_(tr(u"%s contient des valeurs hors des choix possibles: %s ")),
- valeur, self.into))
+ tr("%s contient des valeurs hors des choix possibles: %s ") % (valeur, self.into))
def verif_item(self, valeur):
if valeur not in self.into:
@@ -1376,7 +1376,7 @@ class EnumVal(ListVal):
return liste_choix
def info_erreur_item(self):
- return _(u"La valeur n'est pas dans la liste des choix possibles")
+ return tr("La valeur n'est pas dans la liste des choix possibles")
def ImpairVal(valeur):
@@ -1412,22 +1412,22 @@ class F1Val(Valid):
self.cata_info = ""
def info(self):
- return ufmt(_(tr(u"valeur %s pour la somme des cles A et B ")), self.somme)
+ return (tr("valeur %s pour la somme des cles A et B ") % self.somme)
def verif(self, valeur):
if is_sequence(valeur):
for val in valeur:
- if not val.has_key("A"):
+ if not "A" in val:
return 0
- if not val.has_key("B"):
+ if not "B" in val:
return 0
if val["A"] + val["B"] != self.somme:
return 0
return 1
else:
- if not valeur.has_key("A"):
+ if not "A" in valeur:
return 0
- if not valeur.has_key("B"):
+ if not "B" in valeur:
return 0
if valeur["A"] + valeur["B"] != self.somme:
return 0
@@ -1447,6 +1447,9 @@ class FunctionVal(Valid):
def info(self):
return self.function.info
+ def info_erreur_item(self):
+ return self.function.info
+
def verif(self, valeur):
return self.function(valeur)
@@ -1457,11 +1460,11 @@ class FunctionVal(Valid):
return valeur
# MC ca ne devrait plus servir !
-CoercableFuncs = {types.IntType: int,
- types.LongType: long,
- types.FloatType: float,
- types.ComplexType: complex,
- types.UnicodeType: unicode}
+CoercableFuncs = {int: int,
+ int: int,
+ float: float,
+ complex: complex,
+ str: six.text_type}
class TypeVal(ListVal):
@@ -1478,7 +1481,7 @@ class TypeVal(ListVal):
def __init__(self, aType):
# Si aType n'est pas un type, on le retrouve a l'aide de la fonction type
# type(1) == int;type(0.2)==float;etc.
- if type(aType) != types.TypeType:
+ if type(aType) != type:
aType = type(aType)
self.aType = aType
try:
@@ -1487,7 +1490,7 @@ class TypeVal(ListVal):
self.coerce = self.identity
def info(self):
- return ufmt(_(tr(u"valeur de %s")), self.aType)
+ return (tr("valeur de %s") % self.aType)
def identity(self, value):
if type(value) == self.aType:
@@ -1520,7 +1523,7 @@ class InstanceVal(ListVal):
if type(aClass) == types.InstanceType:
# instance ancienne mode
aClass = aClass.__class__
- elif type(aClass) == types.ClassType:
+ elif type(aClass) == type:
# classe ancienne mode
aClass = aClass
elif type(aClass) == type:
@@ -1530,12 +1533,12 @@ class InstanceVal(ListVal):
# instance nouvelle mode
aClass = type(aClass)
else:
- raise ValError(_(u"type non supporté"))
+ raise ValError(tr("type non supporté"))
self.aClass = aClass
def info(self):
- return ufmt(_(tr(u"valeur d'instance de %s")), self.aClass.__name__)
+ return (tr("valeur d'instance de %s") % self.aClass.__name__)
def verif_item(self, valeur):
if not isinstance(valeur, self.aClass):
@@ -1543,7 +1546,7 @@ class InstanceVal(ListVal):
return 1
-class VerifTypeTuple(Valid, ListVal):
+class VerifTypeTuple(ListVal):
def __init__(self, typeDesTuples):
self.typeDesTuples = typeDesTuples
@@ -1551,14 +1554,12 @@ class VerifTypeTuple(Valid, ListVal):
self.cata_info = ""
def info(self):
- return _(tr(": verifie les types dans un tuple"))
+ return tr(": verifie les types dans un tuple")
def info_erreur_liste(self):
- return _(tr("Les types entres ne sont pas permis"))
+ return tr("Les types entres ne sont pas permis")
def default(self, valeur):
- # if valeur in self.liste : raise ValError("%s est un doublon" %
- # valeur)
return valeur
def is_list(self):
@@ -1567,12 +1568,12 @@ class VerifTypeTuple(Valid, ListVal):
def convert_item(self, valeur):
if len(valeur) != len(self.typeDesTuples):
raise ValError(
- ufmt(_(tr(u"%s devrait etre de type %s ")), valeur, self.typeDesTuples))
+ tr("%s devrait etre de type %s ") %( valeur, self.typeDesTuples))
for i in range(len(valeur)):
ok = self.verifType(valeur[i], self.typeDesTuples[i])
if ok != 1:
raise ValError(
- ufmt(_(tr(u"%s devrait etre de type %s ")), valeur, self.typeDesTuples))
+ tr("%s devrait etre de type %s ") % (valeur, self.typeDesTuples))
return valeur
def verif_item(self, valeur):
@@ -1589,23 +1590,23 @@ class VerifTypeTuple(Valid, ListVal):
def verifType(self, valeur, type_permis):
if type_permis == 'R':
- if type(valeur) in (types.IntType, types.FloatType, types.LongType):
+ if type(valeur) in (int, float, int):
return 1
elif type_permis == 'I':
- if type(valeur) in (types.IntType, types.LongType):
+ if type(valeur) in (int, int):
return 1
elif type_permis == 'C':
if self.is_complexe(valeur):
return 1
elif type_permis == 'TXM':
- if type(valeur) == types.StringType:
+ if type(valeur) == bytes:
return 1
elif isinstance(valeur, type_permis):
return 1
return 0
def verif(self, valeur):
- if type(valeur) in (types.ListType, types.TupleType):
+ if type(valeur) in (list, tuple):
liste = list(valeur)
for val in liste:
if self.verif_item(val) != 1:
@@ -1667,7 +1668,7 @@ class VerifExiste(ListVal):
if valeur in self.listeDesFreres:
return valeur
raise ValError(
- ufmt(_(tr(u"%s n'est pas dans %s")), valeur, self.listeDesFreres))
+ tr("%s n'est pas dans %s") % (valeur, self.listeDesFreres))
class RegExpVal(ListVal):
@@ -1676,14 +1677,17 @@ class RegExpVal(ListVal):
Vérifie qu'une chaîne de caractère corresponde à l'expression régulière 'pattern'
"""
- errormsg = u'La chaîne "%(value)s" ne correspond pas au motif "%(pattern)s"'
+ errormsg = 'La chaîne "%(value)s" ne correspond pas au motif "%(pattern)s"'
def __init__(self, pattern):
self.pattern = pattern
self.compiled_regexp = re.compile(pattern)
def info(self):
- return u'Une chaîne correspondant au motif "%s" est attendue.' % self.pattern
+ return tr('Une chaîne correspondant au motif ') + str(self.pattern) + tr(" est attendue")
+
+ def info_erreur_item(self):
+ return tr('Une chaîne correspondant au motif ') + str(self.pattern) + tr(" est attendue")
def verif_item(self, valeur):
if self.compiled_regexp.match(valeur):
@@ -1707,24 +1711,24 @@ class FileExtVal(RegExpVal):
def __init__(self, ext):
self.ext = ext
- self.errormsg = u'"%%(value)s" n\'est pas un nom de fichier %(ext)s valide' % {
+ self.errormsg = '"%%(value)s" n\'est pas un nom de fichier %(ext)s valide' % {
"ext": ext}
- #RegExpVal.__init__(self, "^[\w\-]+\.%s$" % self.ext)
#PNPN Modif pour Adao
- #RegExpVal.__init__(self, "^[\S]+\.%s$" % self.ext
RegExpVal.__init__(self, "^\S+\.%s$" % self.ext)
def info(self):
- return u'Un nom de fichier se terminant par ".%s" est attendu.' % self.ext
+ return ('Un nom de fichier se terminant par ".%s" est attendu.' % self.ext)
+
+ def info_erreur_item(self):
+ return ('Un nom de fichier se terminant par ".%s" est attendu.' % self.ext)
-class CreeMotClef:
+class CreeMotClef(object):
def __init__(self,MotClef ):
self.MotClef=MotClef
self.MCSimp=None
def convert(self, lval):
- print "dans convert"
try : valeur=lval[0]
except : return lval
diff --git a/Noyau/N__F.py b/Noyau/N__F.py
index 753ba633..85819b9d 100644
--- a/Noyau/N__F.py
+++ b/Noyau/N__F.py
@@ -18,10 +18,18 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-import UserDict
+from __future__ import absolute_import
+try :
+ from past.builtins import cmp
+except :
+ pass
+try:
+ from UserDict import UserDict
+except ImportError:
+ from collections import UserDict
-class _F(UserDict.UserDict):
+class _F(UserDict):
"""
Cette classe a un comportement semblable à un
diff --git a/Noyau/N_info.py b/Noyau/N_info.py
deleted file mode 100644
index c97197f7..00000000
--- a/Noyau/N_info.py
+++ /dev/null
@@ -1,281 +0,0 @@
-# coding=utf-8
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-
-
-"""Module to manage information printing : debug, info, error.
-Should replace 'print' and 'UTMESS' calls at least in the supervisor
-modules.
-Only used for debug right now.
-"""
-
-import os
-import os.path as osp
-import re
-import traceback
-from functools import partial
-from subprocess import Popen, PIPE
-
-from N_utils import Enum, Singleton
-from strfunc import convert
-
-
-def default_print(text):
- """Basic print function."""
- print convert(text)
-
-LEVEL = Enum(
- 'DEBUG',
- 'INFO',
- 'WARN',
- 'ERROR'
-)
-
-
-class Category(object):
-
- """Define a category of message for different parts of the code.
- This allows to store different parameters for each category of message."""
-
- def __init__(self):
- self._level = LEVEL.INFO
- self._fmt = "%-8s"
- self._header = {
- LEVEL.DEBUG: "DEBUG",
- LEVEL.INFO: None,
- LEVEL.WARN: "WARNING",
- LEVEL.ERROR: "ERROR",
- }
-
- def set_level(self, level):
- """Set the current level."""
- self._level = level
-
- def get_level(self):
- """Return the current level."""
- return self._level
-
- def set_header(self, level, header):
- """Set the header of ``level`` messages."""
- self._header[level] = header
-
- def get_header(self, level):
- """Return the header at this ``level``."""
- header = self._header.get(level, "")
- if header:
- header = self._fmt % header
- return header
-
- def active(self, level):
- """Tell if a message should be print at this ``level``."""
- return self._level <= level
-
-
-ALL = Category()
-SUPERV = Category()
-SUPERV.set_header(LEVEL.ERROR, None)
-MISS = Category()
-
-REGEXP_ORIG = re.compile('File [\'\"]*(.*?)[\'\"]*, *line ([0-9]+), *in (.*)')
-
-# slighty different and very simplier than logger objects
-# from the logging module.
-
-
-class InfoLevel(Singleton):
-
- """Store informations level."""
- _singleton_id = 'N_info.InfoLevel'
-
- def __init__(self, level):
- """Initialization"""
- self._parts = []
- for part in self._parts:
- part.level = level
- self.reset_print_function()
- self._msg_callback = []
- # self.extend_message(ALL, stack_header_callback)
- self.extend_message(ALL, insert_header)
-
- def add(self, category):
- """Add a category of message."""
- self._parts.append(category)
-
- def set_level(self, category, level):
- """Set the current level for ``category``."""
- assert category in self._parts, "unknown category : %s" % category
- assert LEVEL.exists(level), "unknown level : %s" % level
- category.set_level(level)
- if category == ALL:
- for part in self._parts:
- part.set_level(level)
-
- def set_debug(self):
- """Set debug level for all categories."""
- self.set_level(ALL, LEVEL.DEBUG)
-
- def set_header(self, category, level, header):
- """Set the header of ``level`` messages."""
- category.set_header(level, header)
-
- def register_print_function(self, print_function):
- """Define the `print_function` to use."""
- self._print = print_function
-
- def reset_print_function(self):
- """Register the default 'print function'."""
- self._print = default_print
-
- def extend_message(self, category, callback):
- """Allow to extend the message calling an external function."""
- self._msg_callback.append((category, callback))
-
- def _message(self, category, level, msg, args, kwargs):
- """Print the message if the level is reached."""
- if category.active(level):
- if kwargs.get('utmess'):
- func = self._message_utmess
- else:
- func = self._message_print
- func = self._message_print
- apply(func, (category, level, msg, args, kwargs))
-
- def _message_print(self, category, level, msg, args, kwargs):
- """Print the message if the level is reached."""
- for cat, cbk in self._msg_callback:
- if cat in (ALL, category):
- msg, args = cbk(category, level, msg, args, kwargs)
- if len(args) > 0:
- try:
- msg = msg % args
- except Exception, err:
- msg = repr((msg, args, err))
- self._print(msg)
-
- def _message_utmess(self, category, level, msg, args, kwargs):
- """Print the message if the level is reached."""
- # how to use callbacks ? valk ?
- from Utilitai.Utmess import MessageLog
- code = {
- LEVEL.DEBUG: 'I',
- LEVEL.INFO: 'I',
- LEVEL.WARN: 'A',
- LEVEL.ERROR: 'F',
- }
- valk = kwargs.get('valk', ())
- vali = kwargs.get('vali', ())
- valr = kwargs.get('valr', ())
- msg = MessageLog.GetText(code[level], msg, valk, vali, valr)
- for cat, cbk in self._msg_callback:
- if cat in (ALL, category):
- msg, args = cbk(category, level, msg, args, kwargs)
- self._print(msg)
-
- def debug(self, category, msg, *args, **kwargs):
- """Print a debug message."""
- self._message(category or ALL, LEVEL.DEBUG, msg, args, kwargs)
-
- def info(self, category, msg, *args, **kwargs):
- """Print an information message."""
- self._message(category or ALL, LEVEL.INFO, msg, args, kwargs)
-
- def warn(self, category, msg, *args, **kwargs):
- """Print a warning message."""
- self._message(category or ALL, LEVEL.WARN, msg, args, kwargs)
-
- def error(self, category, msg, *args, **kwargs):
- """Print an error message."""
- self._message(category or ALL, LEVEL.ERROR, msg, args, kwargs)
-
- critical = error
-
- def add_memory_info(self, category):
- """Shortcut to add memory informations."""
- self.extend_message(category, mem_msg_callback)
-
- def use_aster_print(self):
- """Shortcut to use aster.affiche function to print the messages."""
- import aster
- self.register_print_function(partial(aster.affiche, 'MESSAGE'))
-
-
-# defined extensions
-def insert_header(category, level, msg, args, kwargs):
- """Insert the header."""
- header = category.get_header(level)
- if header:
- msg = header + msg
- return msg, args
-
-
-def stack_header_callback(category, level, msg, args, kwargs):
- """To insert the origin."""
- if level <= LEVEL.DEBUG:
- stack_id = -5 + kwargs.get('stack_id', 0)
- stack = traceback.format_stack(limit=10)[stack_id]
- mat = REGEXP_ORIG.search(stack)
- origin = '[%s:%s in %s] ' % (
- osp.basename(mat.group(1)), mat.group(2), mat.group(3))
- msg = origin + msg
- return msg, args
-
-
-# objet singleton
-message = InfoLevel(LEVEL.INFO)
-message.add(ALL)
-message.add(SUPERV)
-message.add(MISS)
-
-# callback to add memory information
-_pid = os.getpid()
-
-RE_VMPEAK = re.compile('VmPeak:\s*([0-9]+)\s*([kMGBo]+)', re.M | re.I)
-
-
-def memory_used(pid):
- """Return the current VmPeak value."""
- p = Popen(['cat', '/proc/%s/status' % pid], stdout=PIPE)
- output = p.communicate()[0]
- mat = RE_VMPEAK.search(output)
- mem = mat and int(mat.group(1)) or 0.
- return mem / 1024.
-
-current_memory_used = partial(memory_used, _pid)
-
-
-def mem_msg_callback(category, level, msg, args, kwargs):
- """Callback to add memory infos to message."""
- if level <= LEVEL.DEBUG:
- msg = msg + " - VmPeak : %.2f Mo"
- args = tuple(list(args) + [current_memory_used(), ])
- return msg, args
-
-
-if __name__ == "__main__":
- message.set_level(SUPERV, LEVEL.WARN)
- message.set_level(MISS, LEVEL.DEBUG)
- # message.debug(None, "debug message")
- message.info(ALL, "information message")
- message.warn(None, "warning message")
- message.error(ALL, "error message")
- message.add_memory_info()
- # message.debug(MISS, "debug supervisor message")
- message.info(SUPERV, "information supervisor message")
- message.warn(SUPERV, "warning supervisor message")
- message.error(SUPERV, "error supervisor message")
- message.critical(MISS, "test the critical alias")
diff --git a/Noyau/N_types.py b/Noyau/N_types.py
index 42626f15..db686f81 100644
--- a/Noyau/N_types.py
+++ b/Noyau/N_types.py
@@ -22,6 +22,8 @@
"""
# eficas sentinel
+from __future__ import absolute_import
+import six
try:
import numpy as NP
_np_arr = NP.ndarray
@@ -33,7 +35,7 @@ except ImportError:
def is_int(obj):
- return isinstance(obj, int) or type(obj) is long
+ return isinstance(obj, int) or type(obj) is int
def is_float(obj):
@@ -55,7 +57,7 @@ def is_number(obj):
def is_str(obj):
- return isinstance(obj, (str, unicode))
+ return isinstance(obj, (str, six.text_type))
def is_list(obj):
@@ -77,7 +79,7 @@ def is_sequence(obj):
def is_assd(obj):
- from N_ASSD import ASSD
+ from .N_ASSD import ASSD
return isinstance(obj, ASSD)
diff --git a/Noyau/N_utils.py b/Noyau/N_utils.py
index 2b624a47..e53a8851 100644
--- a/Noyau/N_utils.py
+++ b/Noyau/N_utils.py
@@ -23,50 +23,41 @@
"""
# Modules Python
+from __future__ import absolute_import
+from __future__ import print_function
+from __future__ import division
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
import sys
# Modules EFICAS
-from N_Exception import AsException
-from N_types import is_int, is_float, is_complex, is_str, is_sequence, is_assd
-from strfunc import get_encoding
+from .N_Exception import AsException
+from .N_types import is_int, is_float, is_complex, is_str, is_sequence, is_assd
+from .strfunc import get_encoding
+import six
SEP = '_'
-try:
- # Si la version de Python possède la fonction _getframe
- # on l'utilise.
- cur_frame = sys._getframe
-except:
- # Sinon on l'émule
- def cur_frame(offset=0):
- """ Retourne la frame d execution effective eventuellement en remontant
- de offset niveaux dans la pile d execution
- Si il y a moins de offset niveaux retourne None
- """
- try:
- 1 / 0
- except:
- frame = sys.exc_info()[2].tb_frame.f_back
- while offset > 0:
- if frame == None:
- return None
- frame = frame.f_back
- offset = offset - 1
- return frame
-
+try :
+ cur_frame = sys._getframe
+except :
+ print ('pb avec la version de python pour cur_frame = sys._getframe')
def callee_where(niveau=4):
"""
recupere la position de l appel
"""
- frame = cur_frame(niveau)
+ frame = sys._getframe(niveau)
if frame == None:
return 0, "inconnu", 0, {}
try:
# Python 2.7 compile function does not accept unicode filename, so we encode it
# with the current locale encoding in order to have a correct traceback.
# Here, we convert it back to unicode.
- filename = unicode(frame.f_code.co_filename, get_encoding())
+ filename = six.text_type(frame.f_code.co_filename, get_encoding())
return frame.f_lineno, filename, frame.f_code.co_firstlineno, frame.f_locals
except:
return 0, "inconnu", 0, {}
@@ -93,9 +84,9 @@ def AsType(a):
def prbanner(s):
- print "*" * (len(s) + 10)
- print "*" * 5 + s + "*" * 5
- print "*" * (len(s) + 10)
+ print(("*" * (len(s) + 10)))
+ print(("*" * 5 + s + "*" * 5))
+ print(("*" * (len(s) + 10)))
def repr_float(valeur):
@@ -182,13 +173,13 @@ def import_object(uri):
try:
__import__(modname)
mod = sys.modules[modname]
- except ImportError, err:
+ except ImportError as err:
raise ImportError(
- u"can not import module : %s (%s)" % (modname, str(err)))
+ "can not import module : %s (%s)" % (modname, str(err)))
try:
object = getattr(mod, objname)
- except AttributeError, err:
- raise AttributeError(u"object (%s) not found in module '%s'. "
+ except AttributeError as err:
+ raise AttributeError("object (%s) not found in module '%s'. "
"Module content is: %s" % (objname, modname, tuple(dir(mod))))
return object
diff --git a/Noyau/__init__.py b/Noyau/__init__.py
index aaf6d59a..455a3211 100644
--- a/Noyau/__init__.py
+++ b/Noyau/__init__.py
@@ -21,35 +21,31 @@
"""
Ce package fournit les classes de base d'EFICAS.
- Ces classes permettent d'effectuer quelques opérations basiques :
+ Ces classes permettent d'effectuer quelques operations basiques :
- - la création
-
- - la vérification des définitions
-
- - la création d'objets de type OBJECT à partir d'une définition de type ENTITE
+ - la creation
+ - la verification des definitions
+ - la creation d'objets de type OBJECT a partir d'une definition de type ENTITE
"""
# Avant toutes choses, on met le module context dans le global de l'interpreteur (__builtin__)
-# sous le nom CONTEXT afin d'avoir accès aux fonctions
-# get_current_step, set_current_step et unset_current_step de n'importe où
-import context
-import __builtin__
-__builtin__.CONTEXT = context
+# sous le nom CONTEXT afin d'avoir acces aux fonctions
+# get_current_step, set_current_step et unset_current_step de n'importe ou
+
+from __future__ import absolute_import
+from . import context
+try :
+ import __builtin__
+ __builtin__.CONTEXT = context
+except :
+ import builtins
+ builtins.CONTEXT = context
-def _(msg):
- """Differs translation."""
- # 'codex' should install its translation functions later
- return msg
-__builtin__._ = _
# Classes de base
-from N_SIMP import SIMP
-from N_FACT import FACT
+#from .N_SIMP import SIMP
+#from .N_FACT import FACT
-# structures de données
-import asojb
-from asojb import AsBase
# Only the first MAXSIZE objects will be checked
# This is used for the number of MCFACT, the number of MCSIMP and the number of
diff --git a/Noyau/ascheckers.py b/Noyau/ascheckers.py
deleted file mode 100644
index 5bcbf9bd..00000000
--- a/Noyau/ascheckers.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# coding=utf-8
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-class Parmi(object):
-
- """Classe qui exprime une contrainte multiple pour un attribut"""
-
- def __init__(self, *args):
- self.values = list(args)
-
- def add_value(self, value):
- if value not in self.values:
- self.values.append(value)
-
- def __call__(self, obj, name, value, log):
- if value not in self.values:
- log.err(obj, "l'attribut %s=%r n'est pas dans %r" %
- (name, value, self.values))
-
- def __repr__(self):
- l = ["Parmi(", ]
- g = [repr(v) for v in self.values]
- l.append(", ".join(g))
- l.append(")")
- return "".join(l)
-
-
-class CheckLog(object):
-
- """Un validateur qui enregistre toutes les erreurs trouvées.
- checkedXXX répond True si la "marq" courante est inférieure ou égale
- à la celle de la dernière vérification.
- Si on incrémentait "marq" à chaque étape, on revérifie à chaque fois.
- """
-
- def __init__(self):
- self.msg = []
- self.names = {}
- self.cksums = {}
- self.optional = False
- self._marq = 1
- self._lastmarq = self._marq
- self._debug = False
- self._profond = False # True pour forcer des vérifications plus profondes
-
- def log(self, level, obj, msg):
- if obj:
- self.msg.append((level, obj.nomj(), msg))
- else:
- self.msg.append((level, 'None', msg))
-
- def err(self, obj, msg):
- self.log(0, obj, msg)
-
- def warn(self, obj, msg):
- self.log(1, obj, msg)
-
- def visitOJB(self, obj):
- key = obj.nomj()
- self.names[key] = self._marq
-
- def checkSumOJB(self, obj, sd, maj='non'):
- # vérifie que le checksum de obj n'a pas changé
- # sd : concept qui contient obj
- # maj='maj', l'opérateur a le droit de modifier ojb
- if obj.exists:
- import md5
- m = md5.new()
- m.update(str(obj.get()))
- cksum = m.digest()
- nom = obj.nomj()
- if not self.cksums.has_key(nom):
- self.cksums[nom] = cksum
- else:
- if self.cksums[nom] != cksum:
- self.cksums[nom] = cksum
- # if maj.strip()=='maj' and nom[0:8].strip()==sd.nomj.nomj[0:8].strip() :
- # Remarque : ne pas tester 'maj' premet de résoudre (un peu) le problème
- # posé par la commande DETRUIRE
- if nom[0:8].strip() == sd.nomj.nomj[0:8].strip():
- pass
- else:
- self.err(obj, 'Le checksum a changé')
-
- def visitAsBase(self, obj):
- key = (obj.nomj(), obj.__class__.__name__)
- self.names[key] = self._marq
-
- def force(self, force=False):
- if not force:
- self._marq = 1
- else:
- self._lastmarq += 1
- self._marq = self._lastmarq
-
- def checkedOJB(self, obj):
- key = obj.nomj()
- res = self.names.get(key, 0) >= self._marq
- self.help_dbg([key, ], res)
- return res
-
- def checkedAsBase(self, obj):
- key = (obj.nomj(), obj.__class__.__name__)
- res = self.names.get(key, 0) >= self._marq
- self.help_dbg(key, res)
- return res
-
- def help_dbg(self, key, res):
- if self._debug:
- if res:
- s = 'ignore'
- else:
- s = 'check '
- print '#DBG %6d %s : %s' % (self._marq, s, ', '.join(key))
-
- def __str__(self):
- d = {0: "E", 1: "W"}
- return "\n".join(["%s:%s: %s" % (d[l], n, m)
- for l, n, m in self.msg])
-
-
-class CheckFail(CheckLog):
-
- """Un validateur qui lève une exception
- dès la première erreur"""
-
- def err(self, obj, msg):
- raise AssertionError("%s: %s" % (obj.nomj(), msg))
diff --git a/Noyau/asnom.py b/Noyau/asnom.py
deleted file mode 100644
index 9ee9fd0e..00000000
--- a/Noyau/asnom.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# coding=utf-8
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-"""
-Description des types de base aster
-
-version 2 - réécrite pour essayer de simplifier
-le problème des instances/types et instances/instances
-
-le type de base ASBase permet de représenter une structure
-de donnée. Une instance de ASBase comme attribut d'une classe
-dérivée de ASBase représente une sous-structure nommée.
-
-une instance de ASBase 'libre' représente une instance de la
-structure de donnée complète.
-
-c'est ce comportement qui est capturé dans la classe StructType
-"""
-
-from basetype import Type
-
-
-class SDNom(Type):
-
- """Objet représentant une sous-partie de nom
- d'objet jeveux"""
- nomj = None
- debut = None
- fin = None
- just = None
- justtype = None
-
- def __init__(self, nomj=None, debut=None, fin=None, just='l', **kwargs):
- """
- Configure un objet nom
- nomj : la partie du nom fixée (par ex .TITR) ou '' si non précisée
- debut, fin : la partie du K24 concernée
- just : la justification a droite ou a gauche ('l' ou 'r')
- kwargs : inutilisé, juste par simplicité
-
- Note:
- On utilise cet objet comme attribut d'instance ou de classe.
- En attribut de classe pour les noms de structure, cela permet
- de définir la position du nom d'objet dans le nom jeveux, l'attribut
- nom est alors la valeur du suffixe pour une sous-structure ou None pour
- une structure principale.
- """
- super(SDNom, self).__init__(
- nomj=nomj, debut=debut, fin=fin, just=just, **kwargs)
- self.update((nomj, debut, fin, just))
-
- def __call__(self):
- if self._parent is None or self._parent._parent is None:
- debut = self.debut or 0
- prefix = ' ' * debut
- else:
- # normalement
- # assert self._parent.nomj is self
- nomparent = self._parent._parent.nomj
- prefix = nomparent()
- debut = self.debut or nomparent.fin or len(prefix)
- fin = self.fin or 24
- nomj = self.nomj or ''
- nomj = self.just(nomj, fin - debut)
- prefix = prefix.ljust(24)
- res = prefix[:debut] + nomj + prefix[fin:]
- return res[:24]
-
- def fcata(self):
- return self.just(self.nomj, self.fin - self.debut).replace(' ', '?')
-
- def __repr__(self):
- return "" % (self.nomj, self.debut, self.fin)
-
- # On utilise pickle pour les copies, et pickle ne sait pas gérer la
- # sauvegarde de str.ljust ou str.rjust (c'est une méthode non liée)
-
- def __getstate__(self):
- return (self.nomj, self.debut, self.fin, self.justtype)
-
- def __setstate__(self, (nomj, debut, fin, just)):
- self.nomj = nomj
- self.debut = debut
- self.fin = fin
- if just == 'l' or just is None:
- self.just = str.ljust
- elif just == 'r':
- self.just = str.rjust
- else:
- raise ValueError("Justification '%s' invalide" % just)
- self.justtype = just
-
- def update(self, (nomj, debut, fin, just)):
- if nomj is not None:
- self.nomj = nomj
- if self.debut is None:
- self.debut = debut
- if self.fin is None:
- self.fin = fin
- if self.justtype is None and just is not None:
- if just == 'l':
- self.just = str.ljust
- elif just == 'r':
- self.just = str.rjust
- else:
- raise ValueError("Justification '%s' invalide" % just)
- self.justtype = just
-
- def reparent(self, parent, new_name):
- self._parent = parent
- self._name = new_name
- for nam in self._subtypes:
- obj = getattr(self, nam)
- obj.reparent(self, nam)
- if self.nomj is None and self._parent._name is not None:
- self.nomj = "." + self._parent._name
diff --git a/Noyau/asojb.py b/Noyau/asojb.py
deleted file mode 100644
index f07d1ecc..00000000
--- a/Noyau/asojb.py
+++ /dev/null
@@ -1,398 +0,0 @@
-# coding=utf-8
-# person_in_charge: mathieu.courtois at edf.fr
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2015 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-# ======================================================================
-
-"""
- Description des OJB jeveux
-"""
-from basetype import Type
-from asnom import SDNom
-from ascheckers import CheckLog
-import traceback
-import sys
-
-# pour utilisation dans eficas
-try:
- import aster
- from Utilitai.Utmess import UTMESS
-except:
- pass
-
-# -----------------------------------------------------------------------------
-
-
-class AsBase(Type):
- nomj = SDNom()
- optional = False
-
- def __init__(self, nomj=None, *args, **kwargs):
- super(AsBase, self).__init__(nomj, *args, **kwargs)
- assert self.nomj is not self.__class__.nomj
- if isinstance(nomj, str):
- self.nomj.nomj = nomj
- elif isinstance(nomj, SDNom):
- self.nomj.update(nomj.__getstate__())
-
- def set_name(self, nomj):
- """Positionne le nomj de self
- """
- assert isinstance(self.nomj.nomj, str), "uniquement pour les concepts"
- self.nomj.nomj = nomj
-
- def check(self, checker=None):
- if checker is None:
- checker = CheckLog()
-
- # vérif déjà faite ? (en tenant compte du type)
- if checker.checkedAsBase(self):
- return checker
- checker.visitAsBase(self)
-
- # vérifie les enfants :
- optional = checker.optional
- checker.optional = checker.optional or self.optional
- for name in self._subtypes:
- v = getattr(self, name)
- if isinstance(v, (OJB, AsBase)):
- v.check(checker)
- for name in dir(self):
- if name.startswith('check_'):
- v = getattr(self, name)
- if callable(v):
- try:
- v(checker)
- except:
- mess = 60 * '-' + '\n'
- mess = mess + \
- 'Erreur SDVERI (Attention : vérification incomplète)' + \
- '\n'
- mess = mess.join(
- traceback.format_tb(sys.exc_traceback))
- checker.err(self, mess)
-
- checker.optional = optional
- return checker
-
- def dump(self, indent=""):
- import pydoc
- l = []
- checkers = []
- nomj = self.nomj()
- if self.optional:
- f = "(f)"
- else:
- f = "(o)"
- l.append(f + " " + nomj)
- for name in self._subtypes:
- obj = getattr(self, name)
- if isinstance(obj, (AsBase, OJB)):
- l.append(obj.dump(indent))
- for name in dir(self):
- if name.startswith('check_'):
- obj = getattr(self, name)
- if callable(obj) and name.startswith("check_"):
- checkers.append(obj)
-
- indent = " " * len(nomj)
- for checker in checkers:
- doc = pydoc.text.document(checker)
- for line in doc.splitlines():
- l.append(indent + line)
- return "\n".join(l)
-
- def short_repr(self):
- return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj())
-
- def long_repr(self):
- if not hasattr(self, "accessible") or not self.accessible():
- # hors Aster ou en par_lot='oui'
- return self.short_repr()
- else:
- from Cata.cata import IMPR_CO, _F
- IMPR_CO(CONCEPT=_F(NOM=self.nom), UNITE=6)
- return ''
-
- def __repr__(self):
- # par défaut, on fait court !
- return self.short_repr()
-
-
-# -----------------------------------------------------------------------------
-class JeveuxAttr(object):
-
- """Un attribut jeveux"""
-
- def __init__(self, name):
- self.name = name
-
- def __get__(self, obj, klass):
- raise NotImplementedError
-
- def check(self, attrname, obj, log):
- checker = getattr(obj, "_" + attrname, None)
- if checker is None:
- return True
- val = self.__get__(obj, obj.__class__)
- if callable(checker):
- return checker(obj, attrname, val, log)
- elif val == checker:
- return True
- else:
- log.err(obj, "Attribut incorrect %s %r!=%r" %
- (self.name, val, checker))
- return False
-
-# -----------------------------------------------------------------------------
-
-
-class JeveuxExists(JeveuxAttr):
-
- def __init__(self):
- pass
-
- def __get__(self, obj, klass):
- if obj is None:
- return self
- nomj = obj.nomj()
- if len(nomj) != 24:
- raise AssertionError(repr(nomj))
- return aster.jeveux_exists(nomj.ljust(24))
-
-# -----------------------------------------------------------------------------
-
-
-class JeveuxIntAttr(JeveuxAttr):
-
- def __get__(self, obj, klass):
- if obj is None:
- return self
- nomj = obj.nomj()
- if aster.jeveux_exists(nomj):
- return aster.jeveux_getattr(nomj, self.name)[0]
- else:
- return None
-
-# -----------------------------------------------------------------------------
-
-
-class JeveuxStrAttr(JeveuxAttr):
-
- def __get__(self, obj, klass):
- if obj is None:
- return self
- nomj = obj.nomj()
- if aster.jeveux_exists(nomj):
- return aster.jeveux_getattr(nomj, self.name)[1].strip()
- else:
- return None
-
-# -----------------------------------------------------------------------------
-
-
-class OJB(AsBase):
- _clas = None
- _genr = None
- _type = None
- _ltyp = None
- _xous = None
- _docu = None
- _exists = True
-
- clas = JeveuxStrAttr("CLAS")
- genr = JeveuxStrAttr("GENR")
- type = JeveuxStrAttr("TYPE")
- ltyp = JeveuxIntAttr("LTYP")
- xous = JeveuxStrAttr("XOUS")
- docu = JeveuxStrAttr("DOCU")
- exists = JeveuxExists()
- nomj = SDNom()
-
- def __init__(self, nomj=None, **attrs):
- super(OJB, self).__init__(nomj, **attrs)
- self.foreachattr(self.setattribute, attrs)
- self.optional = attrs.get('optional', False)
-
- def setattribute(self, name, prop, attrs):
- _name = "_" + name
- if name in attrs:
- setattr(self, _name, attrs[name])
-
- def get(self):
- nomj = self.nomj()
- if aster.jeveux_exists(nomj):
- obj_simple = aster.jeveux_getattr(nomj, 'XOUS')[1].strip() == 'S'
- if obj_simple:
- return aster.getvectjev(nomj)
- else:
- return aster.getcolljev(nomj)
- else:
- return None
-
- def changeJeveuxValues(self, nbval, indices, reel, imag, num = 1):
- """Modify values of existing data structures"""
- nomj = self.nomj()
- if aster.jeveux_exists(nomj):
- obj_simple = aster.jeveux_getattr(nomj, 'XOUS')[1].strip() == 'S'
- if obj_simple:
- assert num==1,"""For vectors last argument must be set to 1"""
- # aster.putvectjev can be used for vectors (num=1) and collections
- aster.putvectjev(nomj, nbval, indices, reel, imag, num)
-
- def get_stripped(self):
- """Fonction utilitaire, renvoie une liste de chaines 'strippées'"""
- data = self.get()
- if data is not None:
- return [x.strip() for x in data]
- else:
- return []
-
- def foreachattr(self, callback, *args, **kwargs):
- klass = self.__class__
- for k in dir(klass):
- v = getattr(klass, k)
- if isinstance(v, JeveuxAttr):
- callback(k, v, *args, **kwargs)
-
- def check(self, checker=None):
- if checker is None:
- checker = CheckLog()
- # l'objet a déjà été vérifié, on ne fait rien
- if checker.checkedOJB(self):
- return checker
- checker.visitOJB(self)
- if self.exists:
- self.foreachattr(lambda k, v, obj, c: v.check(k, obj, c),
- self, checker)
- else:
- if not self.optional and not checker.optional:
- checker.err(self, "n'existe pas (%r)" % self._parent)
- return checker
-
- def dump(self, indent=""):
- if self.optional:
- f = "(f)"
- else:
- f = "(o)"
- return f + " " + self.nomj() + " " + str(self.exists)
-
-# -----------------------------------------------------------------------------
-
-
-def Facultatif(ojb):
- ojb.optional = True
- return ojb
-
-# -----------------------------------------------------------------------------
-
-
-class OJBVect(OJB):
- lonmax = JeveuxIntAttr("LONMAX")
- lonuti = JeveuxIntAttr("LONUTI")
- _xous = "S"
- _genr = "V"
-
-# -----------------------------------------------------------------------------
-
-
-class OJBPtnom(OJB):
- nommax = JeveuxIntAttr("NOMMAX")
- nomuti = JeveuxIntAttr("NOMUTI")
- _xous = "S"
- _genr = "N"
- _type = "K"
-
-# -----------------------------------------------------------------------------
-
-
-class OJBCollec(OJB):
- stockage = JeveuxStrAttr("STOCKAGE")
- nutioc = JeveuxIntAttr("NUTIOC")
- acces = JeveuxStrAttr("ACCES")
- modelong = JeveuxStrAttr("MODELONG")
- nmaxoc = JeveuxIntAttr("NMAXOC")
-
-# -----------------------------------------------------------------------------
-
-
-class AsVI(OJBVect):
- _type = "I"
-
-# -----------------------------------------------------------------------------
-
-
-class AsVS(OJBVect):
- _type = "S"
-
-# -----------------------------------------------------------------------------
-
-
-class AsVR(OJBVect):
- _type = "R"
-
-# -----------------------------------------------------------------------------
-
-
-class AsVC(OJBVect):
- _type = "C"
-
-# -----------------------------------------------------------------------------
-
-
-class AsVL(OJBVect):
- _type = "L"
-
-# -----------------------------------------------------------------------------
-
-
-class AsVK8(OJBVect):
- _type = "K"
- _ltyp = 8
-
-# -----------------------------------------------------------------------------
-
-
-class AsVK16(OJBVect):
- _type = "K"
- _ltyp = 16
-
-# -----------------------------------------------------------------------------
-
-
-class AsVK24(OJBVect):
- _type = "K"
- _ltyp = 24
-
-# -----------------------------------------------------------------------------
-
-
-class AsVK32(OJBVect):
- _type = "K"
- _ltyp = 32
-
-# -----------------------------------------------------------------------------
-
-
-class AsVK80(OJBVect):
- _type = "K"
- _ltyp = 80
-
-# Pour compatibilite
-AsObject = OJB
-AsColl = OJBCollec
-AsPn = OJBPtnom
-AsVect = OJBVect
diff --git a/Noyau/basetype.py b/Noyau/basetype.py
deleted file mode 100644
index 57ab8251..00000000
--- a/Noyau/basetype.py
+++ /dev/null
@@ -1,161 +0,0 @@
-# coding=utf-8
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-
-"""
-
-Description des types de base aster
------------------------------------
-
-version 2 - réécrite pour essayer de simplifier
-le problème des instances/types et instances/instances.
-
-Le type de base `Type` permet de représenter une structure
-de donnée. Une instance de `Type` comme attribut d'une classe
-dérivée de `Type` représente une sous-structure nommée.
-
-Une instance de `Type` 'libre' représente une instance de la
-structure de donnée complète.
-
-C'est ce comportement qui est capturé dans la classe BaseType
-
-La classe `Type` hérite de BaseType et y associe la métaclasse MetaType.
-
-"""
-
-import cPickle
-
-__docformat__ = "restructuredtext"
-
-
-class MetaType(type):
-
- """Métaclasse d'un type représentant une structure de données.
- Les méthodes spéciales __new__ et __call__ sont réimplémentées
- """
- def __new__(mcs, name, bases, classdict):
- """Création d'une nouvelle 'classe' dérivant de Type.
-
- Cette méthode permet de calculer certains attributs automatiquement:
-
- - L'attribut _subtypes qui contient la liste des sous-structures
- de type 'Type' attributs (directs ou hérités) de cette classe.
-
- Pour chaque attribut de classe héritant de Type, on recrée une nouvelle
- instance des attributs hérités pour pouvoir maintenir une structure de
- parentée entre l'attribut de classe et sa nouvelle classe.
-
- L'effet obtenu est que tous les attributs de classe ou des classes parentes
- de cette classe sont des attributs associés à la classe feuille. Ces attributs
- ont eux-meme un attribut parent qui pointe sur la classe qui les contient.
- """
- new_cls = type.__new__(mcs, name, bases, classdict)
- new_cls._subtypes = []
- for b in bases:
- if hasattr(b, '_subtypes'):
- new_cls._subtypes += b._subtypes
- # affecte la classe comme parent des attributs de classe
- # et donne l'occasion aux attributs de se renommer à partir
- # du nom utilisé.
- for k, v in classdict.items():
- if not isinstance(v, BaseType):
- continue
- v.reparent(new_cls, k)
- new_cls._subtypes.append(k)
- return new_cls
-
- def dup_attr(cls, inst):
- """Duplique les attributs de la classe `cls` pour qu'ils deviennent
- des attributs de l'instance `inst`.
- """
- # reinstantiate and reparent subtypes
- for nam in cls._subtypes:
- obj = getattr(cls, nam)
- # permet de dupliquer completement l'instance
- cpy = cPickle.dumps(obj)
- newobj = cPickle.loads(cpy)
- newobj.reparent(inst, None)
- setattr(inst, nam, newobj)
-
- def __call__(cls, *args, **kwargs):
- """Instanciation d'un Type structuré.
- Lors de l'instanciation on effectue un travail similaire à la
- création de classe: Les attributs sont re-parentés à l'instance
- et réinstanciés pour obtenir une instanciation de toute la structure
- et de ses sous-structures.
-
- Les attributs de classe deviennent des attributs d'instance.
- """
- inst = cls.__new__(cls, *args, **kwargs)
- # reinstantiate and reparent subtypes
- cls.dup_attr(inst)
- type(inst).__init__(inst, *args, **kwargs)
- return inst
-
- def mymethod(cls):
- pass
-
-
-class BaseType(object):
- # Le parent de la structure pour les sous-structures
- _parent = None
- _name = None
-
- def __init__(self, *args, **kwargs):
- self._initargs = args
- self._initkwargs = kwargs
- self._name = None
- self._parent = None
-
- def reparent(self, parent, new_name):
- self._parent = parent
- self._name = new_name
- for nam in self._subtypes:
- obj = getattr(self, nam)
- obj.reparent(self, nam)
-
- def supprime(self, delete=False):
- """Permet de casser les boucles de références pour que les ASSD
- puissent être détruites.
- Si `delete` vaut True, on supprime l'objet lui-même et pas
- seulement les références remontantes."""
- self._parent = None
- self._name = None
- for nam in self._subtypes:
- obj = getattr(self, nam)
- obj.supprime(delete)
- # XXX MC : avec ce code, j'ai l'impression qu'on supprime aussi
- # des attributs de classe, ce qui pose problème pour une
- # instanciation future...
- # Supprimer les références remontantes devrait suffir.
- # if delete:
- # while len(self._subtypes):
- # nam = self._subtypes.pop(0)
- # try:
- # delattr(self, nam)
- # except AttributeError:
- # pass
-
- def base(self):
- if self._parent is None:
- return self
- return self._parent.base()
-
-
-class Type(BaseType):
- __metaclass__ = MetaType
diff --git a/Noyau/context.py b/Noyau/context.py
index 7fa6bf39..8ad129bd 100644
--- a/Noyau/context.py
+++ b/Noyau/context.py
@@ -19,40 +19,38 @@
#
# ======================================================================
+from __future__ import absolute_import
_root = None
_cata = None
debug = 0
-from Noyau.N_info import message, SUPERV
-# Le "current step" est l'étape courante.
-# Une macro se déclare étape courante dans sa méthode Build avant de construire
-# ses étapes filles ou dans BuildExec avant de les exécuter.
-# Les étapes simples le font aussi : dans Execute et BuildExec.
-# (Build ne fait rien pour une étape)
+# Le "current step" est l'etape courante.
+# Une macro se declare etape courante dans sa methode Build avant de construire
+# ses etapes filles ou dans BuildExec avant de les executer.
+# Les etapes simples le font aussi : dans Execute et BuildExec.
+# (Build ne fait rien pour une etape)
def set_current_step(step):
"""
- Fonction qui permet de changer la valeur de l'étape courante
+ Fonction qui permet de changer la valeur de l'etape courante
"""
global _root
if _root:
raise Exception("Impossible d'affecter _root. Il devrait valoir None")
_root = step
- # message.debug(SUPERV, "current_step = %s", step and step.nom,
- # stack_id=-1)
def get_current_step():
"""
- Fonction qui permet d'obtenir la valeur de l'étape courante
+ Fonction qui permet d'obtenir la valeur de l'etape courante
"""
return _root
def unset_current_step():
"""
- Fonction qui permet de remettre à None l'étape courante
+ Fonction qui permet de remettre a None l'etape courante
"""
global _root
_root = None
@@ -77,7 +75,7 @@ def get_current_cata():
def unset_current_cata():
"""
- Fonction qui permet de remettre à None le catalogue courant
+ Fonction qui permet de remettre a None le catalogue courant
"""
global _cata
_cata = None
diff --git a/Noyau/nommage.py b/Noyau/nommage.py
index b65e9fe5..d402efeb 100644
--- a/Noyau/nommage.py
+++ b/Noyau/nommage.py
@@ -34,14 +34,21 @@
"""
# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import range
+except :
+ pass
import re
-import string
import linecache
from functools import partial
# Modules EFICAS
-import N_utils
-from strfunc import get_encoding
+from . import N_utils
+from .strfunc import get_encoding
+import six
+from six.moves import range
regex1 = '=?\s*%s\s*\('
# commentaire standard precede d'un nombre quelconque de blancs (pas
@@ -70,7 +77,7 @@ def _GetNomConceptResultat(ope, level=2):
lineno = f.f_lineno # XXX Too bad if -O is used
# lineno = f_lineno(f) # Ne marche pas toujours
co = f.f_code
- filename = unicode(co.co_filename, get_encoding())
+ filename = six.text_type(co.co_filename, get_encoding())
name = co.co_name
# pattern pour identifier le debut de la commande
pattern_oper = re.compile(regex1 % ope)
@@ -87,7 +94,7 @@ def _GetNomConceptResultat(ope, level=2):
list.reverse()
# On suppose que le concept resultat a bien ete
# isole en tete de la ligne de source
- m = evalnom(string.strip(l[0]), f.f_locals)
+ m = evalnom(l[0].strip(), f.f_locals)
# print "NOMS ",m
if m != []:
return m[-1]
diff --git a/Noyau/strfunc.py b/Noyau/strfunc.py
index 9127b8c5..3339a852 100644
--- a/Noyau/strfunc.py
+++ b/Noyau/strfunc.py
@@ -22,7 +22,13 @@ de chaines de caractères
"""
# module identique à Execution/strfunc.py pour usage dans Eficas
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
import locale
+import six
_encoding = None
@@ -41,11 +47,11 @@ def get_encoding():
def to_unicode(string):
"""Try to convert string into a unicode string."""
- if type(string) is unicode:
+ if type(string) is six.text_type:
return string
elif type(string) is dict:
new = {}
- for k, v in string.items():
+ for k, v in list(string.items()):
new[k] = to_unicode(v)
return new
elif type(string) is list:
@@ -57,54 +63,54 @@ def to_unicode(string):
assert type(string) is str, u"unsupported object: %s" % string
for encoding in ('utf-8', 'iso-8859-15', 'cp1252'):
try:
- s = unicode(string, encoding)
+ s = six.text_type(string, encoding)
return s
except UnicodeDecodeError:
pass
- return unicode(string, 'utf-8', 'replace')
-
-
-def from_unicode(ustring, encoding, errors='replace'):
- """Try to encode a unicode string using encoding."""
- try:
- return ustring.encode(encoding)
- except UnicodeError:
- pass
- return ustring.encode(encoding, errors)
-
-
-def convert(content, encoding=None, errors='replace'):
- """Convert content using encoding or default encoding if None."""
- if type(content) not in (str, unicode):
- content = unicode(content)
- if type(content) == str:
- content = to_unicode(content)
- return from_unicode(content, encoding or get_encoding(), errors)
+ return six.text_type(string, 'utf-8', 'replace')
-def ufmt(uformat, *args):
- """Helper function to format a string by converting all its arguments to unicode"""
- if type(uformat) is not unicode:
- uformat = to_unicode(uformat)
- if len(args) == 1 and type(args[0]) is dict:
- arguments = to_unicode(args[0])
- else:
- nargs = []
- for arg in args:
- if type(arg) in (str, unicode, list, tuple, dict):
- nargs.append(to_unicode(arg))
- elif type(arg) not in (int, long, float):
- nargs.append(to_unicode(str(arg)))
- else:
- nargs.append(arg)
- arguments = tuple(nargs)
- formatted_string=""
- try:
- formatted_string = uformat % arguments
- #except UnicodeDecodeError:
- # print type(uformat), uformat
- # print type(arguments), arguments
- #raise
- except :
- pass
- return formatted_string
+#def from_unicode(ustring, encoding, errors='replace'):
+# """Try to encode a unicode string using encoding."""
+# try:
+# return ustring.encode(encoding)
+# except UnicodeError:
+# pass
+# return ustring.encode(encoding, errors)
+#
+#
+#def convert(content, encoding=None, errors='replace'):
+# """Convert content using encoding or default encoding if None."""
+# if type(content) not in (str, six.text_type):
+# content = six.text_type(content)
+# if type(content) == str:
+# content = to_unicode(content)
+# return from_unicode(content, encoding or get_encoding(), errors)
+#
+#
+#def ufmt(uformat, *args):
+# """Helper function to format a string by converting all its arguments to unicode"""
+# if type(uformat) is not six.text_type:
+# uformat = to_unicode(uformat)
+# if len(args) == 1 and type(args[0]) is dict:
+# arguments = to_unicode(args[0])
+# else:
+# nargs = []
+# for arg in args:
+# if type(arg) in (str, six.text_type, list, tuple, dict):
+# nargs.append(to_unicode(arg))
+# elif type(arg) not in (int, int, float):
+# nargs.append(to_unicode(str(arg)))
+# else:
+# nargs.append(arg)
+# arguments = tuple(nargs)
+# formatted_string=""
+# try:
+# formatted_string = uformat % arguments
+# #except UnicodeDecodeError:
+# # print type(uformat), uformat
+# # print type(arguments), arguments
+# #raise
+# except :
+# pass
+# return formatted_string
diff --git a/UiQT5/desPBMT.ui b/UiQT5/desPBMT.ui
new file mode 100644
index 00000000..a147b615
--- /dev/null
+++ b/UiQT5/desPBMT.ui
@@ -0,0 +1,50 @@
+
+
+ Form
+
+
+
+ 0
+ 0
+ 441
+ 194
+
+
+
+ Form
+
+
+
+
+ 50
+ 60
+ 231
+ 71
+
+
+
+ background-color : rgb(168, 227, 142);
+/*border-style : outset;*/
+border-radius : 20px;
+border-width : 30 px;
+border-color : beige;
+text-align : left
+
+
+ DIRECTION
+
+
+
+ ../monCode/images/essaiAster.png../monCode/images/essaiAster.png
+
+
+
+ 48
+ 48
+
+
+
+
+
+
+
diff --git a/UiQT5/desWidgetPlusieursInto.ui b/UiQT5/desWidgetPlusieursInto.ui
index 086b3bdd..c7a05165 100644
--- a/UiQT5/desWidgetPlusieursInto.ui
+++ b/UiQT5/desWidgetPlusieursInto.ui
@@ -262,8 +262,7 @@
-
-
+ ..
@@ -357,14 +356,23 @@
0
0
300
- 127
+ 125
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
+
0
-
@@ -452,7 +460,16 @@
0
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
@@ -530,9 +547,6 @@
-
- true
-
-
diff --git a/UiQT5/makefile b/UiQT5/makefile
index f4da904f..c5c3eafb 100644
--- a/UiQT5/makefile
+++ b/UiQT5/makefile
@@ -14,7 +14,7 @@ PY_FILES = myMain.py desBaseWidget.py desChoixCata.py desChoixCode.py desChoixCo
desWidgetMatrice.py desWidgetParam.py desWidgetPlusieursBase.py desWidgetPlusieursInto.py \
desWidgetPlusieursIntoOrdonne.py desWidgetPlusieursTuple.py desWidgetRadioButton.py \
desWidget4a6RadioButton.py desWidgetSimpBase.py desWidgetSDCOInto.py desWidgetSimpBool.py \
- desWidgetSimpSalome.py \
+ desWidgetSimpSalome.py desPBMT.py\
desWidgetSimpComplexe.py desWidgetSimpFichier.py desWidgetSimpTxt.py desWidgetTuple2.py \
desWidgetTuple3.py desWidgetVide.py desWidgetUniqueSDCO.py desWidgetPlusieursPlie.py
diff --git a/UiQT5/myMain.ui b/UiQT5/myMain.ui
index 847bf6f2..d4d9ec9d 100644
--- a/UiQT5/myMain.ui
+++ b/UiQT5/myMain.ui
@@ -59,7 +59,16 @@ QMenuBar {
QComboBox{combobox-popup:0;}
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
@@ -121,7 +130,7 @@ QMenuBar {
0
0
1676
- 24
+ 25
diff --git a/Validation/V_AU_MOINS_UN.py b/Validation/V_AU_MOINS_UN.py
index 735b7162..9837a780 100644
--- a/Validation/V_AU_MOINS_UN.py
+++ b/Validation/V_AU_MOINS_UN.py
@@ -20,33 +20,38 @@
# ======================================================================
-class AU_MOINS_UN:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class AU_MOINS_UN(object):
"""
- La règle AU_MOINS_UN vérifie que l'on trouve au moins un des mots-clés
- de la règle parmi les arguments d'un OBJECT.
+ La regle AU_MOINS_UN verifie que l'on trouve au moins un des mots-cles
+ de la regle parmi les arguments d'un OBJECT.
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La méthode verif vérifie que l'on trouve au moins un des mos-clés
- de la liste self.mcs parmi les éléments de args
+ La methode verif verifie que l'on trouve au moins un des mos-cles
+ de la liste self.mcs parmi les elements de args
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on compte le nombre de mots cles presents
text = ''
count = 0
args = self.liste_to_dico(args)
for mc in self.mcs:
- if args.has_key(mc):
+ if mc in args :
count = count + 1
if count == 0:
- text = u"- Il faut au moins un mot-clé parmi : " + `self.mcs`+'\n'
+ text = "- Il faut au moins un mot-cle parmi : " + repr(self.mcs)+'\n'
return text, 0
return text, 1
diff --git a/Validation/V_AU_PLUS_UN.py b/Validation/V_AU_PLUS_UN.py
index 324608c0..eb801aab 100644
--- a/Validation/V_AU_PLUS_UN.py
+++ b/Validation/V_AU_PLUS_UN.py
@@ -18,24 +18,29 @@
# ======================================================================
-class AU_PLUS_UN:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class AU_PLUS_UN(object):
"""
- La règle vérifie que l'on trouve 1 (au plus) des mots-clés
- de la règle parmi les arguments d'un OBJECT.
+ La regle verifie que l'on trouve 1 (au plus) des mots-cles
+ de la regle parmi les arguments d'un OBJECT.
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La méthode verif vérifie que l'on trouve 1 (au plus) des mos-clés
- de la liste self.mcs parmi les éléments de args
+ La methode verif verifie que l'on trouve 1 (au plus) des mos-cles
+ de la liste self.mcs parmi les elements de args
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on compte le nombre de mots cles presents
text = ''
@@ -44,8 +49,8 @@ class AU_PLUS_UN:
for mc in self.mcs:
count = count + args.get(mc, 0)
if count > 1:
- text = u"- Il ne faut qu'un mot-clé (au plus) parmi : " + \
- `self.mcs`+'\n'
+ text = "- Il ne faut qu'un mot-cle (au plus) parmi : " + \
+ repr(self.mcs)+'\n'
return text, 0
return text, 1
@@ -58,5 +63,4 @@ class AU_PLUS_UN:
dico[arg] = dico.get(arg, 0) + 1
return dico
else:
- raise Exception(
- "Erreur ce n'est ni un dictionnaire ni une liste %s" % args)
+ raise Exception( "Erreur ce n'est ni un dictionnaire ni une liste %s" % args)
diff --git a/Validation/V_A_CLASSER.py b/Validation/V_A_CLASSER.py
index a5e62298..32955947 100644
--- a/Validation/V_A_CLASSER.py
+++ b/Validation/V_A_CLASSER.py
@@ -19,38 +19,39 @@
#
# ======================================================================
-from Noyau.strfunc import convert, ufmt
-class A_CLASSER:
+from __future__ import print_function
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
+
+class A_CLASSER(object):
"""
- La règle A_CLASSER vérifie que ...
+ La regle A_CLASSER verifie que ...
"""
def __init__(self, *args):
if len(args) > 2:
- print convert(
- ufmt(_(u"Erreur à la création de la règle A_CLASSER(%s)"),
- args))
+ print ("Erreur a la creation de la regle A_CLASSER(%s)" % str(args))
return
self.args = args
- if type(args[0]) == tuple:
- self.args0 = args[0]
- elif type(args[0]) == str:
- self.args0 = (args[0],)
+ if type(args[0]) == tuple: self.args0 = args[0]
+ elif type(args[0]) == str: self.args0 = (args[0],)
else:
- print convert(ufmt(_(u"Le premier argument de : %s doit etre un "
- u"tuple ou une chaine"), args))
+ print ( "Le premier argument de : %s doit etre un tuple ou une chaine" % str(args))
if type(args[1]) == tuple:
self.args1 = args[1]
elif type(args[1]) == str:
self.args1 = (args[1],)
else:
- print convert(ufmt(_(u"Le deuxième argument de :%s doit etre un "
- u"tuple ou une chaine"), args))
- # création de la liste des mcs
+ print ("Le deuxieme argument de : %s doit etre un tuple ou une chaine" % str(args))
+ # creation de la liste des mcs
liste = []
liste.extend(self.args0)
liste.extend(self.args1)
@@ -58,8 +59,8 @@ class A_CLASSER:
self.init_couples_permis()
def init_couples_permis(self):
- """ Crée la liste des couples permis parmi les self.args, cà d pour chaque élément
- de self.args0 crée tous les couples possibles avec un élément de self.args1"""
+ """ Cree la liste des couples permis parmi les self.args, cad pour chaque element
+ de self.args0 cree tous les couples possibles avec un element de self.args1"""
liste = []
for arg0 in self.args0:
for arg1 in self.args1:
@@ -68,10 +69,10 @@ class A_CLASSER:
def verif(self, args):
"""
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
- # création de la liste des couples présents dans le fichier de
+ # creation de la liste des couples presents dans le fichier de
# commandes
l_couples = []
couple = []
@@ -85,14 +86,12 @@ class A_CLASSER:
couple = [nom, ]
if len(couple) > 0:
l_couples.append(tuple(couple))
- # l_couples peut etre vide si l'on n'a pas réussi à trouver au moins un
- # élément de self.mcs
+ # l_couples peut etre vide si l'on n'a pas reussi a trouver au moins un
+ # element de self.mcs
if len(l_couples) == 0:
- message = ufmt(_(u"- Il faut qu'au moins un objet de la liste : %r"
- u" soit suivi d'au moins un objet de la liste : %r"),
- self.args0, self.args1)
+ message = "- Il faut qu'au moins un objet de la liste : %s soit suivi d'au moins un objet de la liste %s : " % (self.args0,self.args1)
return message, 0
- # A ce stade, on a trouvé des couples : il faut vérifier qu'ils sont
+ # A ce stade, on a trouve des couples : il faut verifier qu'ils sont
# tous licites
num = 0
for couple in l_couples:
@@ -100,22 +99,16 @@ class A_CLASSER:
if len(couple) == 1:
# on a un 'faux' couple
if couple[0] not in self.args1:
- text = text + ufmt(
- _(u"- L'objet : %s doit être suivi d'un objet de la liste : %r\n"),
- couple[0], self.args1)
+ text = text + "- L'objet : %s doit etre suivi d'un objet de la liste : %r\n" %(couple[0], self.args1)
test = 0
else:
if num > 1:
# ce n'est pas le seul couple --> licite
break
else:
- text = text + ufmt(
- _(u"- L'objet : %s doit être précédé d'un objet de la liste : %r\n"),
- couple[0], self.args0)
+ text = text + "- L'objet : %s doit etre precede d'un objet de la liste : %r\n" %(couple[0], self.args0)
test = 0
elif couple not in self.liste_couples:
- text = text + ufmt(
- _(u"- L'objet : %s ne peut être suivi de : %s\n"),
- couple[0], couple[1])
+ text = text + "- L'objet : %s ne peut etre suivi de : %s\n" %(couple[0], couple[1])
test = 0
return text, test
diff --git a/Validation/V_ENSEMBLE.py b/Validation/V_ENSEMBLE.py
index b062ba58..5bdc61cb 100644
--- a/Validation/V_ENSEMBLE.py
+++ b/Validation/V_ENSEMBLE.py
@@ -20,22 +20,27 @@
# ======================================================================
-class ENSEMBLE:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class ENSEMBLE(object):
"""
- La règle vérifie que si un mot-clé de self.mcs est present
+ La regle verifie que si un mot-cle de self.mcs est present
parmi les elements de args tous les autres doivent etre presents.
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La methode verif effectue la verification specifique à la règle.
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ La methode verif effectue la verification specifique a la regle.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on compte le nombre de mots cles presents, il doit etre egal a la liste
# figurant dans la regle
@@ -44,14 +49,14 @@ class ENSEMBLE:
args = self.liste_to_dico(args)
pivot = None
for mc in self.mcs:
- if args.has_key(mc):
+ if mc in args:
pivot = mc
break
if pivot:
for mc in self.mcs:
if mc != pivot:
- if not args.has_key(mc):
- text = text + "- " + pivot + u" étant présent, " + \
- mc + u" doit être présent" + '\n'
+ if not mc in args :
+ text = text + "- " + pivot + " etant present, " + \
+ mc + " doit etre present" + '\n'
test = 0
return text, test
diff --git a/Validation/V_ETAPE.py b/Validation/V_ETAPE.py
index c9cc11e0..957104d9 100644
--- a/Validation/V_ETAPE.py
+++ b/Validation/V_ETAPE.py
@@ -1,5 +1,4 @@
# coding=utf-8
-# person_in_charge: mathieu.courtois at edf.fr
# ======================================================================
# COPYRIGHT (C) 1991 - 2015 EDF R&D WWW.CODE-ASTER.ORG
# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
@@ -21,13 +20,16 @@
"""
- Ce module contient la classe mixin ETAPE qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type ETAPE
- dérivé de OBJECT.
+ Ce module contient la classe mixin ETAPE qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type ETAPE
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
+from __future__ import print_function
+from __future__ import absolute_import
+
# Modules Python
import types
import sys
@@ -35,11 +37,10 @@ import traceback
import re
# Modules EFICAS
-import V_MCCOMPO
+from . import V_MCCOMPO
from Noyau import MAXSIZE, MAXSIZE_MSGCHK
from Noyau.N_Exception import AsException
from Noyau.N_utils import AsType
-from Noyau.strfunc import ufmt
from Extensions.i18n import tr
@@ -61,8 +62,7 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
text_erreurs, test_regles = self.verif_regles()
if not test_regles:
if cr == 'oui':
- self.cr.fatal(
- _(u"Règle(s) non respectée(s) : %s"), text_erreurs)
+ self.cr.fatal( "Regle(s) non respectee(s) : %s" % text_erreurs)
return 0
return 1
@@ -70,27 +70,16 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
""" Cette methode teste la validite du nom du concept produit par l'etape """
valid = 1
if self.sd.nom != None:
- if self.jdc and self.jdc.definition.code == 'ASTER' and len(self.sd.nom) > 8:
- # le nom de la sd doit avoir une longueur <= 8 caractères pour
- # ASTER
- if cr == 'oui':
- self.cr.fatal(
- _(u"Le nom de concept %s est trop long (8 caractères maxi)"),
- self.sd.nom)
- valid = 0
if self.sd.nom.find('sansnom') != -1:
# la SD est 'sansnom' : --> erreur
if cr == 'oui':
- #self.cr.fatal(_(u"Pas de nom pour le concept retourné"))
- self.cr.fatal(_("object must have a name"))
+ self.cr.fatal(("object must have a name"))
valid = 0
elif re.search('^SD_[0-9]*$', self.sd.nom):
- # la SD est 'SD_' cad son nom = son id donc pas de nom donné
+ # la SD est 'SD_' cad son nom = son id donc pas de nom donne
# par utilisateur : --> erreur
if cr == 'oui':
- self.cr.fatal(
- #_(u"Nom de concept invalide ('SD_' est réservé)"))
- _("invalid name ('SD_' is a reserved keyword)"))
+ self.cr.fatal( ("invalid name ('SD_' is a reserved keyword)"))
valid = 0
return valid
@@ -110,23 +99,23 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
def isvalid(self, sd='oui', cr='non'):
"""
- Methode pour verifier la validité de l'objet ETAPE. Cette méthode
- peut etre appelée selon plusieurs modes en fonction de la valeur
+ Methode pour verifier la validite de l'objet ETAPE. Cette methode
+ peut etre appelee selon plusieurs modes en fonction de la valeur
de sd et de cr.
- Si cr vaut oui elle crée en plus un compte-rendu.
+ Si cr vaut oui elle cree en plus un compte-rendu.
- Cette méthode a plusieurs fonctions :
+ Cette methode a plusieurs fonctions :
- - mettre à jour l'état de self (update)
+ - mettre a jour l'etat de self (update)
- - retourner un indicateur de validité 0=non, 1=oui
+ - retourner un indicateur de validite 0=non, 1=oui
- produire un compte-rendu : self.cr
"""
if CONTEXT.debug:
- print "ETAPE.isvalid ", self.nom
+ print(("ETAPE.isvalid ", self.nom))
if self.state == 'unchanged':
return self.valid
else:
@@ -136,14 +125,13 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
if self.reste_val != {}:
if cr == 'oui':
self.cr.fatal(
- #_(u"Mots clés inconnus : %s"), ','.join(self.reste_val.keys()))
- _("unknown keywords : %s"), ','.join(self.reste_val.keys()))
+ "unknown keywords : %s" % ','.join(list(self.reste_val.keys())))
valid = 0
if sd == "non":
- # Dans ce cas, on ne teste qu'une validité partielle (sans tests sur le concept produit)
- # Conséquence : on ne change pas l'état ni l'attribut valid, on retourne simplement
- # l'indicateur de validité valid
+ # Dans ce cas, on ne teste qu'une validite partielle (sans tests sur le concept produit)
+ # Consequence : on ne change pas l'etat ni l'attribut valid, on retourne simplement
+ # l'indicateur de validite valid
return valid
if self.definition.reentrant == 'n' and self.reuse:
@@ -151,14 +139,13 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
# reentrant
if cr == 'oui':
self.cr.fatal(
- _(u'Opérateur non réentrant : ne pas utiliser reuse'))
+ 'Operateur non reentrant : ne pas utiliser reuse')
valid = 0
if self.sd == None:
# Le concept produit n'existe pas => erreur
if cr == 'oui':
- # self.cr.fatal(_(u"Concept retourné non défini"))
- self.cr.fatal(_("Concept is not defined"))
+ self.cr.fatal(("Concept is not defined"))
valid = 0
else:
valid = valid * self.valid_sdnom(cr)
@@ -172,23 +159,23 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
def update_sdprod(self, cr='non'):
"""
- Cette méthode met à jour le concept produit en fonction des conditions initiales :
+ Cette methode met a jour le concept produit en fonction des conditions initiales :
- 1. Il n'y a pas de concept retourné (self.definition.sd_prod == None)
+ 1. Il n'y a pas de concept retourne (self.definition.sd_prod == None)
- 2. Le concept retourné n existait pas (self.sd == None)
+ 2. Le concept retourne n existait pas (self.sd == None)
- 3. Le concept retourné existait. On change alors son type ou on le supprime
+ 3. Le concept retourne existait. On change alors son type ou on le supprime
- En cas d'erreur (exception) on retourne un indicateur de validité de 0 sinon de 1
+ En cas d'erreur (exception) on retourne un indicateur de validite de 0 sinon de 1
"""
sd_prod = self.definition.sd_prod
- if type(sd_prod) == types.FunctionType: # Type de concept retourné calculé
+ if type(sd_prod) == types.FunctionType: # Type de concept retourne calcule
d = self.cree_dict_valeurs(self.mc_liste)
try:
- sd_prod = apply(sd_prod, (), d)
+ sd_prod = sd_prod(*(), **d)
except:
- # Erreur pendant le calcul du type retourné
+ # Erreur pendant le calcul du type retourne
if CONTEXT.debug:
traceback.print_exc()
self.sd = None
@@ -197,49 +184,46 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
sys.exc_info()[1],
sys.exc_info()[2])
self.cr.fatal(
- #_(u'Impossible d affecter un type au résultat\n %s'), ' '.join(l[2:]))
- _('unable to affect type to concept\n %s'), ' '.join(l[2:]))
+ 'unable to affect type to concept\n %s' % ' '.join(l[2:]))
return 0
- # on teste maintenant si la SD est r\351utilis\351e ou s'il faut la
- # cr\351er
+ # on teste maintenant si la SD est reutilisee ou s'il faut la
+ # creer
valid = 1
if self.reuse:
if AsType(self.reuse) != sd_prod:
if cr == 'oui':
self.cr.fatal(
- _(u'Type de concept réutilisé incompatible avec type produit'))
+ ('Type de concept reutilise incompatible avec type produit'))
valid = 0
if self.sdnom != '':
if self.sdnom[0] != '_' and self.reuse.nom != self.sdnom:
# Le nom de la variable de retour (self.sdnom) doit etre le
# meme que celui du concept reutilise (self.reuse.nom)
if cr == 'oui':
- self.cr.fatal(_(u'Concept réutilisé : le nom de la variable de '
- u'retour devrait être %s et non %s'),
- self.reuse.nom, self.sdnom)
+ self.cr.fatal('Concept reutilise : le nom de la variable de retour devrait etre %s et non %s' % ( self.reuse.nom, self.sdnom))
valid = 0
if valid:
self.sd = self.reuse
else:
- if sd_prod == None: # Pas de concept retourné
+ if sd_prod == None: # Pas de concept retourne
# Que faut il faire de l eventuel ancien sd ?
self.sd = None
else:
if self.sd:
# Un sd existe deja, on change son type
if CONTEXT.debug:
- print "changement de type:", self.sd, sd_prod
+ print(("changement de type:", self.sd, sd_prod))
if self.sd.__class__ != sd_prod:
self.sd.change_type(sd_prod)
else:
- # Le sd n existait pas , on ne le crée pas
+ # Le sd n existait pas , on ne le cree pas
if cr == 'oui':
- self.cr.fatal(_(u"Concept retourné non défini"))
+ self.cr.fatal("Concept retourne non defini")
valid = 0
if self.definition.reentrant == 'o':
if cr == 'oui':
self.cr.fatal(
- _(u'Commande obligatoirement réentrante : spécifier reuse=concept'))
+ ('Commande obligatoirement reentrante : specifier reuse=concept'))
valid = 0
return valid
@@ -247,29 +231,22 @@ class ETAPE(V_MCCOMPO.MCCOMPO):
"""
Methode pour generation d un rapport de validite
"""
- #self.cr = self.CR(debut=u'Etape : ' + self.nom
- # + u' ligne : ' + `self.appel[0]`
- # + u' fichier : ' + `self.appel[1]`,
- # fin=u'Fin Etape : ' + self.nom)
- self.cr = self.CR(debut=u'Command : ' + tr(self.nom)
- + u' line : ' + `self.appel[0]`
- + u' file : ' + `self.appel[1]`,
- fin=u'End Command : ' + tr(self.nom))
+ self.cr = self.CR(debut='Command : ' + tr(self.nom)
+ + ' line : ' + repr(self.appel[0])
+ + ' file : ' + repr(self.appel[1]),
+ fin='End Command : ' + tr(self.nom))
self.state = 'modified'
try:
self.isvalid(cr='oui')
- except AsException, e:
+ except AsException as e:
if CONTEXT.debug:
traceback.print_exc()
- #self.cr.fatal(_(u'Etape : %s ligne : %r fichier : %r %s'),
- # self.nom, self.appel[0], self.appel[1], e)
- self.cr.fatal(_(u'Command : %s line : %r file : %r %s'),
- tr(self.nom), self.appel[0], self.appel[1], e)
+ self.cr.fatal('Command : %s line : %r file : %r %s' % (tr(self.nom), self.appel[0], self.appel[1], e))
i = 0
for child in self.mc_liste:
i += 1
if i > MAXSIZE:
- print(MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mc_liste)))
+ print (MAXSIZE_MSGCHK.format(MAXSIZE, len(self.mc_liste)))
break
self.cr.add(child.report())
return self.cr
diff --git a/Validation/V_EXCLUS.py b/Validation/V_EXCLUS.py
index da3b602b..52d7182a 100644
--- a/Validation/V_EXCLUS.py
+++ b/Validation/V_EXCLUS.py
@@ -20,31 +20,36 @@
# ======================================================================
-class EXCLUS:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class EXCLUS(object):
"""
- La règle vérifie qu'un seul mot-clé de self.mcs est present
+ La regle verifie qu'un seul mot-cle de self.mcs est present
parmi les elements de args.
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La methode verif effectue la verification specifique à la règle.
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ La methode verif effectue la verification specifique a la regle.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on compte le nombre de mots cles presents
text = ''
count = 0
args = self.liste_to_dico(args)
for mc in self.mcs:
- if args.has_key(mc):
+ if mc in args:
count = count + 1
if count > 1:
- text = u"- Il ne faut qu un mot clé parmi : " + `self.mcs`+'\n'
+ text = "- Il ne faut qu un mot cle parmi : " + repr(self.mcs)+'\n'
return text, 0
return text, 1
diff --git a/Validation/V_JDC.py b/Validation/V_JDC.py
index 0837aabc..fc13c39f 100644
--- a/Validation/V_JDC.py
+++ b/Validation/V_JDC.py
@@ -21,18 +21,18 @@
"""
- Ce module contient la classe mixin JDC qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type JDC
- dérivé de OBJECT.
+ Ce module contient la classe mixin JDC qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type JDC
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
+from __future__ import absolute_import
# Modules EFICAS
-import V_MCCOMPO
+from . import V_MCCOMPO
from Noyau.N_Exception import AsException
from Noyau.N_utils import AsType
-from Noyau.strfunc import ufmt
class JDC(V_MCCOMPO.MCCOMPO):
@@ -58,10 +58,10 @@ class JDC(V_MCCOMPO.MCCOMPO):
def isvalid(self, cr='non'):
"""
- Méthode booléenne qui retourne 0 si le JDC est invalide, 1 sinon
+ Methode booleenne qui retourne 0 si le JDC est invalide, 1 sinon
"""
- # FR : on prend en compte l'état du JDC ('unchanged','modified','undetermined')
- # afin d'accélérer le test de validité du JDC
+ # FR : on prend en compte l'etat du JDC ('unchanged','modified','undetermined')
+ # afin d'accelerer le test de validite du JDC
if self.state == 'unchanged':
return self.valid
else:
@@ -85,7 +85,7 @@ class JDC(V_MCCOMPO.MCCOMPO):
def verif_regles(self):
"""
- Effectue la vérification de validité des règles du jeu de commandes
+ Effectue la verification de validite des regles du jeu de commandes
"""
noms_etapes = [etape.nom for etape in self.etapes]
texte_global = ''
diff --git a/Validation/V_MACRO_ETAPE.py b/Validation/V_MACRO_ETAPE.py
index ff41fa7c..c857024a 100644
--- a/Validation/V_MACRO_ETAPE.py
+++ b/Validation/V_MACRO_ETAPE.py
@@ -21,24 +21,25 @@
"""
- Ce module contient la classe mixin MACRO_ETAPE qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type MACRO_ETAPE
- dérivé de OBJECT.
+ Ce module contient la classe mixin MACRO_ETAPE qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type MACRO_ETAPE
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
+from __future__ import print_function
+from __future__ import absolute_import
# Modules Python
import types
import sys
import traceback
# Modules EFICAS
-import V_MCCOMPO
-import V_ETAPE
+from . import V_MCCOMPO
+from . import V_ETAPE
from Noyau.N_Exception import AsException
from Noyau.N_utils import AsType
-from Noyau.strfunc import ufmt
class MACRO_ETAPE(V_ETAPE.ETAPE):
@@ -48,23 +49,23 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
def isvalid(self, sd='oui', cr='non'):
"""
- Methode pour verifier la validité de l'objet ETAPE. Cette méthode
- peut etre appelée selon plusieurs modes en fonction de la valeur
+ Methode pour verifier la validite de l'objet ETAPE. Cette methode
+ peut etre appelee selon plusieurs modes en fonction de la valeur
de sd et de cr.
- Si cr vaut oui elle crée en plus un compte-rendu.
+ Si cr vaut oui elle cree en plus un compte-rendu.
- Cette méthode a plusieurs fonctions :
+ Cette methode a plusieurs fonctions :
- - mettre à jour l'état de self (update)
+ - mettre a jour l'etat de self (update)
- - retourner un indicateur de validité 0=non, 1=oui
+ - retourner un indicateur de validite 0=non, 1=oui
- produire un compte-rendu : self.cr
"""
if CONTEXT.debug:
- print "ETAPE.isvalid ", self.nom
+ print(("ETAPE.isvalid ", self.nom))
if self.state == 'unchanged':
return self.valid
else:
@@ -82,8 +83,7 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
# Pb: La macro-commande a passe le concept a une commande
# (macro ?) mal definie
if cr == 'oui':
- self.cr.fatal(_(u"Macro-commande mal définie : le concept n'a pas été typé par "
- u"un appel à type_sdprod pour %s"), c.nom)
+ self.cr.fatal("Macro-commande mal definie : le concept n'a pas ete type par un appel a type_sdprod pour %s" % c.nom)
valid = 0
valid = valid * self.valid_child()
@@ -92,12 +92,11 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
if self.reste_val != {}:
if cr == 'oui':
self.cr.fatal(
- #_(u"Mots clés inconnus : %s"), ','.join(self.reste_val.keys()))
- _(u"unknown keyword : %s"), ','.join(self.reste_val.keys()))
+ "unknown keyword : %s" %','.join(list(self.reste_val.keys())))
valid = 0
if sd == "non":
- # Dans ce cas, on ne calcule qu'une validite partielle, on ne modifie pas l'état de self
+ # Dans ce cas, on ne calcule qu'une validite partielle, on ne modifie pas l'etat de self
# on retourne simplement l'indicateur valid
return valid
@@ -107,9 +106,8 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
if self.definition.reentrant == 'n' and self.reuse:
# Il ne peut y avoir de concept reutilise avec une MACRO non
# reentrante
- if cr == 'oui':
- self.cr.fatal(
- _(u'Macro-commande non réentrante : ne pas utiliser reuse'))
+ if cr == 'oui': self.cr.fatal(
+ 'Macro-commande non reentrante : ne pas utiliser reuse')
valid = 0
if valid:
@@ -127,32 +125,32 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
def update_sdprod(self, cr='non'):
"""
- Cette méthode met à jour le concept produit en fonction des conditions initiales :
+ Cette methode met a jour le concept produit en fonction des conditions initiales :
- 1. Il n'y a pas de concept retourné (self.definition.sd_prod == None)
+ 1. Il n'y a pas de concept retourne (self.definition.sd_prod == None)
- 2. Le concept retourné n existait pas (self.sd == None)
+ 2. Le concept retourne n existait pas (self.sd == None)
- 3. Le concept retourné existait. On change alors son type ou on le supprime
+ 3. Le concept retourne existait. On change alors son type ou on le supprime
- En cas d'erreur (exception) on retourne un indicateur de validité de 0 sinon de 1
+ En cas d'erreur (exception) on retourne un indicateur de validite de 0 sinon de 1
"""
sd_prod = self.definition.sd_prod
- # On memorise le type retourné dans l attribut typret
+ # On memorise le type retourne dans l attribut typret
self.typret = None
if type(sd_prod) == types.FunctionType:
- # Type de concept retourné calculé
+ # Type de concept retourne calcule
d = self.cree_dict_valeurs(self.mc_liste)
try:
# la sd_prod d'une macro a l'objet lui meme en premier argument
- # contrairement à une ETAPE ou PROC_ETAPE
- # Comme sd_prod peut invoquer la méthode type_sdprod qui ajoute
- # les concepts produits dans self.sdprods, il faut le mettre Ã
- # zéro
+ # contrairement a une ETAPE ou PROC_ETAPE
+ # Comme sd_prod peut invoquer la methode type_sdprod qui ajoute
+ # les concepts produits dans self.sdprods, il faut le mettre a
+ # zero
self.sdprods = []
- sd_prod = apply(sd_prod, (self,), d)
+ sd_prod = sd_prod(*(self,), **d)
except:
- # Erreur pendant le calcul du type retourné
+ # Erreur pendant le calcul du type retourne
if CONTEXT.debug:
traceback.print_exc()
self.sd = None
@@ -160,8 +158,7 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
l = traceback.format_exception(sys.exc_info()[0],
sys.exc_info()[1],
sys.exc_info()[2])
- self.cr.fatal(
- _(u'Impossible d affecter un type au résultat\n%s'), ' '.join(l[2:]))
+ self.cr.fatal( 'Impossible d affecter un type au resultat\n%s' % ' '.join(l[2:]))
return 0
# on teste maintenant si la SD est r\351utilis\351e ou s'il faut la
# cr\351er
@@ -171,42 +168,40 @@ class MACRO_ETAPE(V_ETAPE.ETAPE):
if AsType(self.reuse) != sd_prod:
if cr == 'oui':
self.cr.fatal(
- _(u'Type de concept réutilisé incompatible avec type produit'))
+ 'Type de concept reutilise incompatible avec type produit')
valid = 0
if self.sdnom != '':
if self.sdnom[0] != '_' and self.reuse.nom != self.sdnom:
# Le nom de la variable de retour (self.sdnom) doit etre le
# meme que celui du concept reutilise (self.reuse.nom)
if cr == 'oui':
- self.cr.fatal(_(u'Concept réutilisé : le nom de la variable de '
- u'retour devrait être %s et non %s'),
- self.reuse.nom, self.sdnom)
+ self.cr.fatal('Concept reutilise : le nom de la variable de retour devrait etre %s et non %s' % (self.reuse.nom, self.sdnom))
valid = 0
if valid:
self.sd = self.reuse
else:
# Cas d'un concept non reutilise
- if sd_prod == None: # Pas de concept retourné
+ if sd_prod == None: # Pas de concept retourne
# Que faut il faire de l eventuel ancien sd ?
self.sd = None
else:
if self.sd:
# Un sd existe deja, on change son type
if CONTEXT.debug:
- print "changement de type:", self.sd, sd_prod
+ print(("changement de type:", self.sd, sd_prod))
if self.sd.__class__ != sd_prod:
self.sd.change_type(sd_prod)
self.typret = sd_prod
else:
- # Le sd n existait pas , on ne le crée pas
+ # Le sd n existait pas , on ne le cree pas
self.typret = sd_prod
if cr == 'oui':
- self.cr.fatal(_(u"Concept retourné non défini"))
+ self.cr.fatal("Concept retourne non defini")
valid = 0
if self.definition.reentrant == 'o':
if cr == 'oui':
self.cr.fatal(
- _(u'Commande obligatoirement réentrante : spécifier reuse=concept'))
+ 'Commande obligatoirement reentrante : specifier reuse=concept')
valid = 0
return valid
diff --git a/Validation/V_MCBLOC.py b/Validation/V_MCBLOC.py
index 32a1ef49..5607daba 100644
--- a/Validation/V_MCBLOC.py
+++ b/Validation/V_MCBLOC.py
@@ -21,16 +21,16 @@
"""
- Ce module contient la classe mixin MCBLOC qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type MCBLOC
- dérivé de OBJECT.
+ Ce module contient la classe mixin MCBLOC qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type MCBLOC
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
+from __future__ import absolute_import
# Modules EFICAS
-import V_MCCOMPO
-from Noyau.strfunc import ufmt
+from . import V_MCCOMPO
class MCBLOC(V_MCCOMPO.MCCOMPO):
@@ -38,19 +38,19 @@ class MCBLOC(V_MCCOMPO.MCCOMPO):
"""
Cette classe a un attribut de classe :
- - txt_nat qui sert pour les comptes-rendus liés à cette classe
+ - txt_nat qui sert pour les comptes-rendus lies a cette classe
"""
txt_nat = u"Bloc :"
def isvalid(self, sd='oui', cr='non'):
"""
- Methode pour verifier la validité du MCBLOC. Cette méthode
- peut etre appelée selon plusieurs modes en fonction de la valeur
+ Methode pour verifier la validite du MCBLOC. Cette methode
+ peut etre appelee selon plusieurs modes en fonction de la valeur
de sd et de cr.
- Si cr vaut oui elle crée en plus un compte-rendu
- sd est présent pour compatibilité de l'interface mais ne sert pas
+ Si cr vaut oui elle cree en plus un compte-rendu
+ sd est present pour compatibilite de l'interface mais ne sert pas
"""
if self.state == 'unchanged':
return self.valid
@@ -64,13 +64,12 @@ class MCBLOC(V_MCCOMPO.MCCOMPO):
if not child.isvalid():
valid = 0
break
- # Après avoir vérifié la validité de tous les sous-objets, on vérifie
- # la validité des règles
+ # Apres avoir verifie la validite de tous les sous-objets, on verifie
+ # la validite des regles
text_erreurs, test_regles = self.verif_regles()
if not test_regles:
if cr == 'oui':
- self.cr.fatal(
- _(u"Règle(s) non respectée(s) : %s"), text_erreurs)
+ self.cr.fatal( "Regle(s) non respectee(s) : %s" % text_erreurs)
valid = 0
self.valid = valid
self.state = 'unchanged'
diff --git a/Validation/V_MCCOMPO.py b/Validation/V_MCCOMPO.py
index 84530105..2739b017 100644
--- a/Validation/V_MCCOMPO.py
+++ b/Validation/V_MCCOMPO.py
@@ -21,10 +21,17 @@
"""
- Ce module contient la classe de base MCCOMPO qui sert à factoriser
+ Ce module contient la classe de base MCCOMPO qui sert a factoriser
les traitements des objets composites de type OBJECT
"""
+from __future__ import print_function
# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
import os
import traceback
@@ -32,13 +39,12 @@ import traceback
from Noyau import MAXSIZE, MAXSIZE_MSGCHK
from Noyau import N_CR
from Noyau.N_Exception import AsException
-from Noyau.strfunc import ufmt, to_unicode
-class MCCOMPO:
+class MCCOMPO(object):
"""
- L'attribut mc_liste a été créé par une classe dérivée de la
+ L'attribut mc_liste a ete cree par une classe derivee de la
classe MCCOMPO du Noyau
"""
@@ -46,12 +52,12 @@ class MCCOMPO:
def __init__(self):
self.state = 'undetermined'
- # défini dans les classes dérivées
+ # defini dans les classes derivees
self.txt_nat = ''
def init_modif_up(self):
"""
- Propage l'état modifié au parent s'il existe et n'est pas l'objet
+ Propage l'etat modifie au parent s'il existe et n'est pas l'objet
lui-meme
"""
if self.parent and self.parent != self:
@@ -59,12 +65,11 @@ class MCCOMPO:
def report(self):
"""
- Génère le rapport de validation de self
+ Genere le rapport de validation de self
"""
self.cr = self.CR()
self.cr.debut = self.txt_nat + self.nom
- #self.cr.fin = u"Fin " + self.txt_nat + self.nom
- self.cr.fin = u"END " + self.txt_nat + self.nom
+ self.cr.fin = "END " + self.txt_nat + self.nom
i = 0
for child in self.mc_liste:
i += 1
@@ -75,7 +80,7 @@ class MCCOMPO:
self.state = 'modified'
try:
self.isvalid(cr='oui')
- except AsException, e:
+ except AsException as e:
if CONTEXT.debug:
traceback.print_exc()
self.cr.fatal(' '.join((self.txt_nat, self.nom, str(e))))
@@ -83,16 +88,16 @@ class MCCOMPO:
def verif_regles(self):
"""
- A partir du dictionnaire des mots-clés présents, vérifie si les règles
+ A partir du dictionnaire des mots-cles presents, verifie si les regles
de self sont valides ou non.
- Retourne une chaine et un booléen :
+ Retourne une chaine et un booleen :
- - texte = la chaine contient le message d'erreur de la (les) règle(s) violée(s) ('' si aucune)
+ - texte = la chaine contient le message d'erreur de la (les) regle(s) violee(s) ('' si aucune)
- - testglob = booléen 1 si toutes les règles OK, 0 sinon
+ - testglob = booleen 1 si toutes les regles OK, 0 sinon
"""
- # On verifie les regles avec les defauts affectés
+ # On verifie les regles avec les defauts affectes
dictionnaire = self.dict_mc_presents(restreint='non')
texte = ['']
testglob = 1
@@ -100,21 +105,21 @@ class MCCOMPO:
erreurs, test = r.verif(dictionnaire)
testglob = testglob * test
if erreurs != '':
- texte.append(to_unicode(erreurs))
+ texte.append(str(erreurs))
texte = os.linesep.join(texte)
return texte, testglob
def dict_mc_presents(self, restreint='non'):
"""
- Retourne le dictionnaire {mocle : objet} construit à partir de self.mc_liste
- Si restreint == 'non' : on ajoute tous les mots-clés simples du catalogue qui ont
- une valeur par défaut
- Si restreint == 'oui' : on ne prend que les mots-clés effectivement entrés par
- l'utilisateur (cas de la vérification des règles)
+ Retourne le dictionnaire {mocle : objet} construit a partir de self.mc_liste
+ Si restreint == 'non' : on ajoute tous les mots-cles simples du catalogue qui ont
+ une valeur par defaut
+ Si restreint == 'oui' : on ne prend que les mots-cles effectivement entres par
+ l'utilisateur (cas de la verification des regles)
"""
dico = {}
- # on ajoute les couples {nom mot-clé:objet mot-clé} effectivement
- # présents
+ # on ajoute les couples {nom mot-cle:objet mot-cle} effectivement
+ # presents
for v in self.mc_liste:
if v == None:
continue
@@ -123,14 +128,14 @@ class MCCOMPO:
if restreint == 'oui':
return dico
# Si restreint != 'oui',
- # on ajoute les couples {nom mot-clé:objet mot-clé} des mots-clés simples
- # possibles pour peu qu'ils aient une valeur par défaut
- for k, v in self.definition.entites.items():
+ # on ajoute les couples {nom mot-cle:objet mot-cle} des mots-cles simples
+ # possibles pour peu qu'ils aient une valeur par defaut
+ for k, v in list(self.definition.entites.items()):
if v.label != 'SIMP':
continue
if not v.defaut:
continue
- if not dico.has_key(k):
+ if not k in dico :
dico[k] = v(nom=k, val=None, parent=self)
# on ajoute l'objet detenteur de regles pour des validations plus
# sophistiquees (a manipuler avec precaution)
diff --git a/Validation/V_MCFACT.py b/Validation/V_MCFACT.py
index 6a1337d8..0e2d3cf6 100644
--- a/Validation/V_MCFACT.py
+++ b/Validation/V_MCFACT.py
@@ -21,16 +21,16 @@
"""
- Ce module contient la classe mixin MCFACT qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type MCFACT
- dérivé de OBJECT.
+ Ce module contient la classe mixin MCFACT qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type MCFACT
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
+from __future__ import absolute_import
# Modules EFICAS
-import V_MCCOMPO
-from Noyau.strfunc import ufmt
+from . import V_MCCOMPO
class MCFACT(V_MCCOMPO.MCCOMPO):
@@ -38,19 +38,19 @@ class MCFACT(V_MCCOMPO.MCCOMPO):
"""
Cette classe a un attribut de classe :
- - txt_nat qui sert pour les comptes-rendus liés à cette classe
+ - txt_nat qui sert pour les comptes-rendus lies a cette classe
"""
- txt_nat = u"Mot clé Facteur :"
+ txt_nat = "Mot cle Facteur :"
def isvalid(self, sd='oui', cr='non'):
"""
- Methode pour verifier la validité du MCFACT. Cette méthode
- peut etre appelée selon plusieurs modes en fonction de la valeur
+ Methode pour verifier la validite du MCFACT. Cette methode
+ peut etre appelee selon plusieurs modes en fonction de la valeur
de sd et de cr.
- Si cr vaut oui elle crée en plus un compte-rendu
- sd est présent pour compatibilité de l'interface mais ne sert pas
+ Si cr vaut oui elle cree en plus un compte-rendu
+ sd est present pour compatibilite de l'interface mais ne sert pas
"""
if self.state == 'unchanged':
return self.valid
@@ -64,31 +64,25 @@ class MCFACT(V_MCCOMPO.MCCOMPO):
if not child.isvalid():
valid = 0
break
- # Après avoir vérifié la validité de tous les sous-objets, on vérifie
- # la validité des règles
+ # Apres avoir verifie la validite de tous les sous-objets, on verifie
+ # la validite des regles
text_erreurs, test_regles = self.verif_regles()
if not test_regles:
if cr == 'oui':
- self.cr.fatal(
- _(u"Règle(s) non respectée(s) : %s"), text_erreurs)
+ self.cr.fatal("Regle(s) non respectee(s) : %s" % text_erreurs)
valid = 0
#
# On verifie les validateurs s'il y en a
#
if self.definition.validators and not self.definition.validators.verif(self.valeur):
if cr == 'oui':
- #self.cr.fatal(_(u"Mot-clé : %s devrait avoir %s"),
- # self.nom, self.definition.validators.info())
- self.cr.fatal(_(u"Keyword : %s should have %s"),
- self.nom, self.definition.validators.info())
+ self.cr.fatal("Keyword : %s should have %s" %( self.nom, self.definition.validators.info()))
valid = 0
# fin des validateurs
#
if self.reste_val != {}:
if cr == 'oui':
- self.cr.fatal(
- #_(u"Mots clés inconnus : %s"), ','.join(self.reste_val.keys()))
- _(u"unknow keyword : %s"), ','.join(self.reste_val.keys()))
+ self.cr.fatal("unknow keyword : %s" % ','.join(list(self.reste_val.keys())))
valid = 0
self.valid = valid
self.state = 'unchanged'
diff --git a/Validation/V_MCLIST.py b/Validation/V_MCLIST.py
index 948d82b7..a58f75ca 100644
--- a/Validation/V_MCLIST.py
+++ b/Validation/V_MCLIST.py
@@ -21,46 +21,52 @@
"""
- Ce module contient la classe mixin MCList qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type MCList
- dérivé de OBJECT.
+ Ce module contient la classe mixin MCList qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type MCList
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
# Modules Python
+from __future__ import print_function
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
import traceback
# Modules EFICAS
+from Extensions.i18n import tr
from Noyau import MAXSIZE, MAXSIZE_MSGCHK
from Noyau import N_CR
from Noyau.N_Exception import AsException
-from Noyau.strfunc import ufmt
-class MCList:
+class MCList(object):
"""
Cette classe a deux attributs de classe :
- - CR qui sert à construire l'objet compte-rendu
+ - CR qui sert a construire l'objet compte-rendu
- - txt_nat qui sert pour les comptes-rendus liés à cette classe
+ - txt_nat qui sert pour les comptes-rendus lies a cette classe
"""
CR = N_CR.CR
- txt_nat = u"Mot clé Facteur Multiple :"
+ txt_nat = "Mot cle Facteur Multiple :"
def isvalid(self, cr='non'):
"""
- Methode pour verifier la validité du MCList. Cette méthode
- peut etre appelée selon plusieurs modes en fonction de la valeur
+ Methode pour verifier la validite du MCList. Cette methode
+ peut etre appelee selon plusieurs modes en fonction de la valeur
de cr.
- Si cr vaut oui elle crée en plus un compte-rendu.
+ Si cr vaut oui elle cree en plus un compte-rendu.
- On n'utilise pas d'attribut pour stocker l'état et on ne remonte pas
- le changement d'état au parent (pourquoi ??)
+ On n'utilise pas d'attribut pour stocker l'etat et on ne remonte pas
+ le changement d'etat au parent (pourquoi ??)
MCLIST est une liste de MCFACT. Les MCFACT ont le meme parent
que le MCLIST qui les contient. Il n'est donc pas necessaire de
remonter le changement d'etat au parent. C'est deja fait
@@ -75,54 +81,48 @@ class MCList:
if definition.min is not None and len(self.data) < definition.min:
valid = 0
if cr == 'oui':
- self.cr.fatal(
- _(u"Nombre de mots clés facteurs insuffisant minimum : %s"),
- definition.min)
+ self.cr.fatal( "Nombre de mots cles facteurs insuffisant minimum : %s" % definition.min)
if definition.max is not None and len(self.data) > definition.max:
valid = 0
if cr == 'oui':
self.cr.fatal(
- _(u"Nombre de mots clés facteurs trop grand maximum : %s"),
- definition.max)
+ "Nombre de mots cles facteurs trop grand maximum : %s" % definition.max)
num = 0
for i in self.data:
num = num + 1
if not i.isvalid():
valid = 0
if cr == 'oui' and len(self) > 1:
- self.cr.fatal(
- _(u"L'occurrence numéro %d du mot-clé facteur : %s n'est pas valide"),
- num, self.nom)
+ self.cr.fatal( "L'occurrence numero %d du mot-cle facteur : %s n'est pas valide" % (num, self.nom))
return valid
def report(self):
"""
- Génère le rapport de validation de self
+ Genere le rapport de validation de self
"""
if len(self) > 1:
# Mot cle facteur multiple
- self.cr = self.CR(
- debut=u"Mot-clé facteur multiple : " + self.nom,
- fin=u"Fin Mot-clé facteur multiple : " + self.nom)
+ self.cr = self.CR( debut="Mot-cle facteur multiple : " + tr(self.nom),
+ fin="Fin Mot-cle facteur multiple : " + tr(self.nom))
j = 0
for i in self.data:
j += 1
if j > MAXSIZE:
- print(MAXSIZE_MSGCHK.format(MAXSIZE, len(self.data)))
+ print (MAXSIZE_MSGCHK.format(MAXSIZE, len(self.data)))
break
self.cr.add(i.report())
elif len(self) == 1:
# Mot cle facteur non multiple
self.cr = self.data[0].report()
else:
- self.cr = self.CR(debut=u"Mot-clé facteur : " + self.nom,
- fin=u"Fin Mot-clé facteur : " + self.nom)
+ self.cr = self.CR(debut="Mot-cle facteur : " + tr(self.nom) ,
+ fin="Fin Mot-cle facteur : " + tr(self.nom))
try:
self.isvalid(cr='oui')
- except AsException, e:
+ except AsException as e:
if CONTEXT.debug:
traceback.print_exc()
- self.cr.fatal(_(u"Mot-clé facteur multiple : %s, %s"), self.nom, e)
+ self.cr.fatal(" %s Mot-cle facteur multiple : %s" %( self.nom, e))
return self.cr
diff --git a/Validation/V_MCSIMP.py b/Validation/V_MCSIMP.py
index b19540b5..5ee9c284 100644
--- a/Validation/V_MCSIMP.py
+++ b/Validation/V_MCSIMP.py
@@ -20,14 +20,19 @@
# ======================================================================
"""
- Ce module contient la classe mixin MCSIMP qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type MCSIMP
- dérivé de OBJECT.
+ Ce module contient la classe mixin MCSIMP qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type MCSIMP
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except : pass
import traceback
# Modules EFICAS
@@ -35,28 +40,27 @@ from Noyau import N_CR
from Noyau.N_Exception import AsException
from Noyau.N_VALIDATOR import ValError, TypeProtocol, CardProtocol, IntoProtocol
from Noyau.N_VALIDATOR import listProto
-from Noyau.strfunc import ufmt
from Extensions.i18n import tr
-class MCSIMP:
+class MCSIMP(object):
"""
COMMENTAIRE CCAR:
- Cette classe est quasiment identique à la classe originale d'EFICAS
- a part quelques changements cosmétiques et des chagements pour la
- faire fonctionner de facon plus autonome par rapport à l'environnement
+ Cette classe est quasiment identique a la classe originale d'EFICAS
+ a part quelques changements cosmetiques et des chagements pour la
+ faire fonctionner de facon plus autonome par rapport a l'environnement
EFICAS
- A mon avis, il faudrait aller plus loin et réduire les dépendances
- amont au strict nécessaire.
+ A mon avis, il faudrait aller plus loin et reduire les dependances
+ amont au strict necessaire.
- - Est il indispensable de faire l'évaluation de la valeur dans le contexte
+ - Est il indispensable de faire l'evaluation de la valeur dans le contexte
du jdc dans cette classe.
- - Ne pourrait on pas doter les objets en présence des méthodes suffisantes
- pour éviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
- d'ailleurs modifié la classe pour éviter l'import de GEOM
+ - Ne pourrait on pas doter les objets en presence des methodes suffisantes
+ pour eviter les tests un peu particuliers sur GEOM, PARAMETRE et autres. J'ai
+ d'ailleurs modifie la classe pour eviter l'import de GEOM
"""
CR = N_CR.CR
@@ -85,14 +89,14 @@ class MCSIMP:
def isvalid(self, cr='non'):
"""
- Cette méthode retourne un indicateur de validité de l'objet de type MCSIMP
+ Cette methode retourne un indicateur de validite de l'objet de type MCSIMP
- 0 si l'objet est invalide
- 1 si l'objet est valide
- Le paramètre cr permet de paramétrer le traitement. Si cr == 'oui'
- la méthode construit également un comte-rendu de validation
- dans self.cr qui doit avoir été créé préalablement.
+ Le parametre cr permet de parametrer le traitement. Si cr == 'oui'
+ la methode construit egalement un comte-rendu de validation
+ dans self.cr qui doit avoir ete cree prealablement.
"""
if self.state == 'unchanged':
return self.valid
@@ -100,11 +104,9 @@ class MCSIMP:
valid = 1
v = self.valeur
# verification presence
- if self.isoblig() and v == None:
+ if self.isoblig() and (v == None or v == "" ):
if cr == 'oui':
- self.cr.fatal(
- _(u"Mandatory keyword : %s has no value"), tr(self.nom))
- #_(u"Mot-clé : %s obligatoire non valorisé"), self.nom)
+ self.cr.fatal( "Mandatory keyword : %s has no value" % tr(self.nom))
valid = 0
lval = listProto.adapt(v)
@@ -119,8 +121,7 @@ class MCSIMP:
if lval is None:
valid = 0
if cr == 'oui':
- self.cr.fatal(_(u"None is not a valid value"))
- #self.cr.fatal(_(u"None n'est pas une valeur autorisée"))
+ self.cr.fatal("None is not a valid value")
else:
# type,into ...
# typeProto=TypeProtocol("type",typ=self.definition.type)
@@ -133,35 +134,33 @@ class MCSIMP:
intoProto = self.intoProto
cardProto = self.cardProto
if cr == 'oui':
- # un cr est demandé : on collecte tous les types d'erreur
+ # un cr est demande : on collecte tous les types d'erreur
try:
for val in lval:
typeProto.adapt(val)
- except ValError, e:
+ except ValError as e:
valid = 0
- self.cr.fatal(*e)
+ self.cr.fatal(str(e))
try:
for val in lval:
intoProto.adapt(val)
- except ValError, e:
+ except ValError as e:
valid = 0
- self.cr.fatal(*e)
+ self.cr.fatal(str(e))
try:
cardProto.adapt(lval)
- except ValError, e:
+ except ValError as e:
valid = 0
- self.cr.fatal(*e)
+ self.cr.fatal(str(e))
#
# On verifie les validateurs s'il y en a et si necessaire (valid == 1)
#
if valid and self.definition.validators:
try:
self.definition.validators.convert(lval)
- except ValError, e:
+ except ValError as e:
self.cr.fatal(
- #_(u"Mot-clé %s invalide : %s\nCritère de validité: %s"),
- _(u"invalid keyword %s : %s\nCriteria : %s"),
- tr(self.nom), str(e), self.definition.validators.info())
+ "invalid keyword %s : %s\nCriteria : %s" % (tr(self.nom)), str(e), self.definition.validators.info())
valid = 0
else:
# si pas de cr demande, on sort a la toute premiere erreur
@@ -174,38 +173,35 @@ class MCSIMP:
if hasattr(self.definition.validators, 'set_MCSimp'):
self.definition.validators.set_MCSimp(self)
self.definition.validators.convert(lval)
- except ValError, e:
+ except ValError as e:
valid = 0
self.set_valid(valid)
return self.valid
def isoblig(self):
- """ indique si le mot-clé est obligatoire
+ """ indique si le mot-cle est obligatoire
"""
return self.definition.statut == 'o'
def init_modif_up(self):
"""
- Propage l'état modifié au parent s'il existe et n'est l'objet
+ Propage l'etat modifie au parent s'il existe et n'est l'objet
lui-meme
"""
if self.parent and self.parent != self:
self.parent.state = 'modified'
def report(self):
- """ génère le rapport de validation de self """
+ """ genere le rapport de validation de self """
self.cr = self.CR()
- #self.cr.debut = u"Mot-clé simple : " + self.nom
- self.cr.debut = u"Simple Keyword : " + tr(self.nom)
- #self.cr.fin = u"Fin Mot-clé simple : " + self.nom
- self.cr.fin = u"End Simple Keyword: " + tr(self.nom)
+ self.cr.debut = "Simple Keyword : " + tr(self.nom)
+ self.cr.fin = "End Simple Keyword: " + tr(self.nom)
self.state = 'modified'
try:
self.isvalid(cr='oui')
- except AsException, e:
+ except AsException as e:
if CONTEXT.debug:
traceback.print_exc()
- #self.cr.fatal(_(u"Mot-clé simple : %s %s"), self.nom, e)
- self.cr.fatal(_(u"Simple Keyword : %s %s"), tr(self.nom), e)
+ self.cr.fatal("Simple Keyword : %s %s" % (tr(self.nom), e))
return self.cr
diff --git a/Validation/V_MEME_NOMBRE.py b/Validation/V_MEME_NOMBRE.py
index a18b74de..7a590a4a 100644
--- a/Validation/V_MEME_NOMBRE.py
+++ b/Validation/V_MEME_NOMBRE.py
@@ -18,24 +18,29 @@
# person_in_charge: mathieu.courtois at edf.fr
-class MEME_NOMBRE:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class MEME_NOMBRE(object):
"""
- La règle MEME_NOMBRE vérifie que l'on trouve au moins un des mots-clés
- de la règle parmi les arguments d'un OBJECT.
+ La regle MEME_NOMBRE verifie que l'on trouve au moins un des mots-cles
+ de la regle parmi les arguments d'un OBJECT.
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La méthode verif vérifie que l'on trouve au moins un des mos-clés
- de la liste self.mcs parmi les éléments de args
+ La methode verif verifie que l'on trouve au moins un des mos-cles
+ de la liste self.mcs parmi les elements de args
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on compte le nombre de mots cles presents
text = ''
@@ -43,8 +48,8 @@ class MEME_NOMBRE:
size = -1
for mc in self.mcs:
- if mc not in args.keys():
- text = u"Une clé dans la règle n'existe pas %s" % mc
+ if mc not in args:
+ text = "Une cle dans la regle n'existe pas %s" % mc
return text, 0
val = args[mc].valeur
@@ -57,6 +62,6 @@ class MEME_NOMBRE:
if size == -1:
size = len_val
elif size != len_val:
- text = u"Pas la même longeur"
+ text = "Pas la même longeur"
return text, 0
return text, 1
diff --git a/Validation/V_PRESENT_ABSENT.py b/Validation/V_PRESENT_ABSENT.py
index d89b3ff7..516ab33a 100644
--- a/Validation/V_PRESENT_ABSENT.py
+++ b/Validation/V_PRESENT_ABSENT.py
@@ -20,23 +20,28 @@
# ======================================================================
-class PRESENT_ABSENT:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class PRESENT_ABSENT(object):
"""
- La règle vérifie que si le premier mot-clé de self.mcs est present
- parmi les elements de args les autres mots clés de self.mcs
+ La regle verifie que si le premier mot-cle de self.mcs est present
+ parmi les elements de args les autres mots cles de self.mcs
doivent etre absents
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La methode verif effectue la verification specifique à la règle.
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ La methode verif effectue la verification specifique a la regle.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on verifie que si le premier de la liste est present,
# les autres sont absents
@@ -44,10 +49,10 @@ class PRESENT_ABSENT:
test = 1
args = self.liste_to_dico(args)
mc0 = self.mcs[0]
- if args.has_key(mc0):
+ if mc0 in args :
for mc in self.mcs[1:len(self.mcs)]:
- if args.has_key(mc):
- text = text + u"- Le mot clé " + `mc0`+ u" étant présent, il faut que : " +\
+ if mc in args :
+ text = text + "- Le mot cle " + repr(mc0)+ " etant present, il faut que : " +\
mc + " soit absent" + '\n'
test = 0
return text, test
diff --git a/Validation/V_PRESENT_PRESENT.py b/Validation/V_PRESENT_PRESENT.py
index 9d5fbed8..1eb8b432 100644
--- a/Validation/V_PRESENT_PRESENT.py
+++ b/Validation/V_PRESENT_PRESENT.py
@@ -20,22 +20,27 @@
# ======================================================================
-class PRESENT_PRESENT:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class PRESENT_PRESENT(object):
"""
- La règle vérifie que si le premier mot-clé de self.mcs est present
+ La regle verifie que si le premier mot-cle de self.mcs est present
parmi les elements de args les autres doivent l'etre aussi
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La methode verif effectue la verification specifique à la règle.
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ La methode verif effectue la verification specifique a la regle.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on verifie que si le premier de la liste est present,
# les autres le sont aussi
@@ -43,11 +48,11 @@ class PRESENT_PRESENT:
text = ''
test = 1
args = self.liste_to_dico(args)
- if args.has_key(mc0):
+ if mc0 in args :
for mc in self.mcs[1:len(self.mcs)]:
- if not args.has_key(mc):
- text = text + u"- Le mot clé " + `mc0`+ \
- u" étant présent, il faut que : " + \
- mc + u" soit présent" + '\n'
+ if not mc in args :
+ text = text + "- Le mot cle " + repr(mc0)+ \
+ " etant present, il faut que : " + \
+ mc + " soit present" + '\n'
test = 0
return text, test
diff --git a/Validation/V_PROC_ETAPE.py b/Validation/V_PROC_ETAPE.py
index 7229f6cb..db880ffd 100644
--- a/Validation/V_PROC_ETAPE.py
+++ b/Validation/V_PROC_ETAPE.py
@@ -18,46 +18,47 @@
# ======================================================================
"""
- Ce module contient la classe mixin PROC_ETAPE qui porte les méthodes
- nécessaires pour réaliser la validation d'un objet de type PROC_ETAPE
- dérivé de OBJECT.
+ Ce module contient la classe mixin PROC_ETAPE qui porte les methodes
+ necessaires pour realiser la validation d'un objet de type PROC_ETAPE
+ derive de OBJECT.
Une classe mixin porte principalement des traitements et est
- utilisée par héritage multiple pour composer les traitements.
+ utilisee par heritage multiple pour composer les traitements.
"""
+from __future__ import print_function
+from __future__ import absolute_import
# Modules EFICAS
-import V_ETAPE
+from . import V_ETAPE
from Noyau.N_Exception import AsException
from Noyau.N_utils import AsType
-from Noyau.strfunc import ufmt
from Extensions.i18n import tr
class PROC_ETAPE(V_ETAPE.ETAPE):
"""
- On réutilise les méthodes report,verif_regles
- de ETAPE par héritage.
+ On reutilise les methodes report,verif_regles
+ de ETAPE par heritage.
"""
def isvalid(self, sd='oui', cr='non'):
"""
- Methode pour verifier la validité de l'objet PROC_ETAPE. Cette méthode
- peut etre appelée selon plusieurs modes en fonction de la valeur
- de sd et de cr (sd n'est pas utilisé).
+ Methode pour verifier la validite de l'objet PROC_ETAPE. Cette methode
+ peut etre appelee selon plusieurs modes en fonction de la valeur
+ de sd et de cr (sd n'est pas utilise).
- Si cr vaut oui elle crée en plus un compte-rendu.
+ Si cr vaut oui elle cree en plus un compte-rendu.
- Cette méthode a plusieurs fonctions :
+ Cette methode a plusieurs fonctions :
- - retourner un indicateur de validité 0=non, 1=oui
+ - retourner un indicateur de validite 0=non, 1=oui
- produire un compte-rendu : self.cr
- - propager l'éventuel changement d'état au parent
+ - propager l'eventuel changement d'etat au parent
"""
if CONTEXT.debug:
- print "ETAPE.isvalid ", self.nom
+ print(("ETAPE.isvalid ", self.nom))
if self.state == 'unchanged':
return self.valid
else:
@@ -66,8 +67,7 @@ class PROC_ETAPE(V_ETAPE.ETAPE):
if self.reste_val != {}:
if cr == 'oui':
self.cr.fatal(
- #_(tr(u"Mots clefs inconnus : %s")), ','.join(self.reste_val.keys()))
- _(tr(u"unknown keywords : %s")), ','.join(self.reste_val.keys()))
+ tr("unknown keywords : %s") % ','.join(list(self.reste_val.keys())))
valid = 0
self.set_valid(valid)
return self.valid
diff --git a/Validation/V_UN_PARMI.py b/Validation/V_UN_PARMI.py
index e5375546..dafb15a7 100644
--- a/Validation/V_UN_PARMI.py
+++ b/Validation/V_UN_PARMI.py
@@ -20,34 +20,39 @@
# ======================================================================
-class UN_PARMI:
+from __future__ import absolute_import
+try :
+ from builtins import object
+except : pass
+
+class UN_PARMI(object):
"""
- La règle vérifie que l'on trouve un des mots-clés
- de la règle parmi les arguments d'un OBJECT.
+ La regle verifie que l'on trouve un des mots-cles
+ de la regle parmi les arguments d'un OBJECT.
- Ces arguments sont transmis à la règle pour validation sous la forme
- d'une liste de noms de mots-clés ou d'un dictionnaire dont
- les clés sont des noms de mots-clés.
+ Ces arguments sont transmis a la regle pour validation sous la forme
+ d'une liste de noms de mots-cles ou d'un dictionnaire dont
+ les cles sont des noms de mots-cles.
"""
def verif(self, args):
"""
- La méthode verif vérifie que l'on trouve un des mos-clés
- de la liste self.mcs parmi les éléments de args
+ La methode verif verifie que l'on trouve un des mos-cles
+ de la liste self.mcs parmi les elements de args
- args peut etre un dictionnaire ou une liste. Les éléments de args
- sont soit les éléments de la liste soit les clés du dictionnaire.
+ args peut etre un dictionnaire ou une liste. Les elements de args
+ sont soit les elements de la liste soit les cles du dictionnaire.
"""
# on compte le nombre de mots cles presents
text = ''
count = 0
args = self.liste_to_dico(args)
for mc in self.mcs:
- if args.has_key(mc):
+ if mc in args :
count = count + 1
if count != 1:
- text = u"- Il faut un et un seul mot-clé parmi : " + \
- `self.mcs`+'\n'
+ text = "- Il faut un et un seul mot-cle parmi : " + \
+ repr(self.mcs)+'\n'
return text, 0
return text, 1
diff --git a/convert/__init__.py b/convert/__init__.py
index 95791870..c4dad241 100644
--- a/convert/__init__.py
+++ b/convert/__init__.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce package contient tous les convertisseurs de formats d'entrée
- en objets compréhensibles par EFICAS.
+ Ce package contient tous les convertisseurs de formats d'entree
+ en objets comprehensibles par EFICAS.
- Ces convertisseurs sont implémentés sous forme de plugins
+ Ces convertisseurs sont implementes sous forme de plugins
"""
+from __future__ import absolute_import
from Extensions import pluginloader
import convert
diff --git a/convert/autre_parseur.py b/convert/autre_parseur.py
index b86e77a1..0f35c27a 100644
--- a/convert/autre_parseur.py
+++ b/convert/autre_parseur.py
@@ -17,11 +17,23 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import sys,string,re,tokenize
-import cStringIO
-
-
-class ENTITE_JDC :
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from future import standard_library
+ standard_library.install_aliases()
+except :
+ pass
+try :
+ from builtins import str
+except :
+ pass
+from builtins import object
+import sys,re,tokenize
+import io
+
+
+class ENTITE_JDC(object) :
def __init__(self):
self.texte = ''
@@ -37,34 +49,34 @@ class COMMENTAIRE(ENTITE_JDC):
def __str__(self):
"""
- Retourne une chaîne de caractères représentant self
- sous une forme interprétable par EFICAS
+ Retourne une chaine de caracteres representant self
+ sous une forme interpretable par EFICAS
"""
t=repr(self.texte)
return "COMMENTAIRE(u"+t+")\n"
def append_text(self,texte):
"""
- Ajoute texte à self.texte en enlevant le # initial
+ Ajoute texte a self.texte en enlevant le # initial
"""
if texte[0] == '#':
self.texte = self.texte+texte[1:]
else:
- # le dièse n'est pas sur le premier caractère
- amont,aval = string.split(texte,'#',1) # on découpe suivant la première occurrence de #
+ # le diese n'est pas sur le premier caractere
+ amont,aval = texte.split('#',1) # on decoupe suivant la premiere occurrence de #
self.texte = self.texte +amont + aval
class AFFECTATION(ENTITE_JDC):
def append_text(self,texte):
"""
- Ajoute texte à self.texte en enlevant tout retour chariot et tout point virgule
+ Ajoute texte a self.texte en enlevant tout retour chariot et tout point virgule
"""
self.texte = self.texte+texte
def __str__(self):
"""
- Retourne une expression de l'affectation compréhensible par ACCAS
+ Retourne une expression de l'affectation comprehensible par ACCAS
et exploitable par EFICAS
"""
#t=repr(self.texte)
@@ -75,15 +87,15 @@ class COMMANDE_COMMENTARISEE(ENTITE_JDC):
def append_text(self,texte):
"""
- Ajoute texte à self.texte en enlevant les doubles commentaires
+ Ajoute texte a self.texte en enlevant les doubles commentaires
"""
- texte = string.strip(texte)
- texte = string.strip(texte[2:])
+ texte = texte.strip()
+ texte = texte[2:].strip()
self.texte = self.texte+(len(self.texte)>0)*'\n'+texte
def __str__(self):
"""
- Retourne une expression de la commande commentarisée compréhensible par ACCAS
+ Retourne une expression de la commande commentarisee comprehensible par ACCAS
et exploitable par EFICAS
"""
return "COMMANDE_COMM(texte="+repr(self.texte)+")\n"
@@ -98,15 +110,15 @@ next['else'] = next['finally'] = next['def'] = next['class'] = 'end'
next['end'] = ()
start = 'if', 'while', 'for', 'try', 'def', 'class'
-class PARSEUR_PYTHON:
+class PARSEUR_PYTHON(object):
"""
- Cette classe sert à créer un objet PARSEUR_PYTHON qui réalise l'analyse d'un texte
- représentant un JDC Python en distinguant :
+ Cette classe sert a creer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte
+ representant un JDC Python en distinguant :
- les commentaires inter commandes
- les affectations
- les commandes
"""
- # au moins 1 caractère non blanc ou non tabulation
+ # au moins 1 caractere non blanc ou non tabulation
#pattern_ligne_non_blanche = re.compile(r'^[\w\t]+')
pattern_ligne_non_blanche = re.compile(r'[^ \t]+')
kwprog = re.compile(
@@ -123,7 +135,7 @@ class PARSEUR_PYTHON:
def __init__(self,texte):
# on verifie que le texte fourni se compile correctement
compile(texte,"",'exec')
- self.texte = cStringIO.StringIO(texte)
+ self.texte = io.StringIO(texte)
self.line=''
self.out=""
self.lastcol = 0
@@ -240,7 +252,7 @@ class PARSEUR_PYTHON:
def NL(self, tstring):
if self.affectation:
if self.paren_level == 0:
- # affectation en cours mais complète
+ # affectation en cours mais complete
self.out= self.out+ str(self.affectation_courante)
self.affectation_courante=None
self.please_indent=1
@@ -270,7 +282,7 @@ class PARSEUR_PYTHON:
elif self.paren_level > 0:
self.output(tstring)
elif self.comment_flag and not self.pattern_ligne_non_blanche.search(before):
- # il s'agit d'une commande commentarisée
+ # il s'agit d'une commande commentarisee
if self.objet_courant == None:
if not self.buffer:self.buffer_indent=self.indent_list[-1]
self.objet_courant=COMMANDE_COMMENTARISEE()
@@ -293,14 +305,14 @@ class PARSEUR_PYTHON:
else:
# On a un commentaire simple
- new_line = string.split(self.line,'#')[0]
+ new_line = self.line.split('#')[0]
if self.affectation:
# affectation en cours, on ignore
pass
elif self.paren_level > 0:
self.output(tstring)
elif self.comment_flag and not self.pattern_ligne_non_blanche.search(new_line):
- # commentaire précédé de blancs
+ # commentaire precede de blancs
if self.objet_courant == None:
if not self.buffer:self.buffer_indent=self.indent_list[-1]
self.objet_courant=COMMENTAIRE()
@@ -322,7 +334,7 @@ class PARSEUR_PYTHON:
return
def ERRORTOKEN(self, tstring):
- print ("ERRORTOKEN", tstring)
+ print("ERRORTOKEN", tstring)
def NAME(self, tstring):
if self.buffer:
@@ -462,7 +474,7 @@ class PARSEUR_PYTHON:
if __name__ == "__main__" :
import sys
- import cStringIO
+ import io
text="""
#
# comment
diff --git a/convert/convert_TELEMAC.py b/convert/convert_TELEMAC.py
index 14806ce9..250a5604 100644
--- a/convert/convert_TELEMAC.py
+++ b/convert/convert_TELEMAC.py
@@ -16,11 +16,20 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-import re, string
+from __future__ import absolute_import
+
+
+import re
from Extensions.i18n import tr
-from convert_python import PythonParser
+from .convert_python import PythonParser
+import six
+from six.moves import range
+try:
+ basestring
+except NameError:
+ basestring = str
pattern_comment_slash = re.compile(r"^\s*/")
pattern_eta = re.compile(r".*&ETA.*")
@@ -63,8 +72,6 @@ except :
from Extensions import localisation
-from determine import monEnvQT5
-
def entryPoint():
@@ -72,7 +79,7 @@ def entryPoint():
Return a dictionary containing the description needed to load the plugin
"""
return {
- 'name' : 'TELEMAC3',
+ 'name' : 'TELEMAC',
'factory' : TELEMACParser
}
@@ -94,13 +101,13 @@ class TELEMACParser(PythonParser):
if appli.langue=='fr' :
from enumDicoTelemac import DicoEnumCasFrToEnumCasEn
- for k in DicoEnumCasFrToEnumCasEn.keys() :
+ for k in DicoEnumCasFrToEnumCasEn :
TelemacdicoEn[k]=DicoEnumCasFrToEnumCasEn[k]
text=""
self.dictSimp={}
- l_lignes_texte_all = string.split(self.text,'\n')
+ l_lignes_texte_all = self.text.split('\n')
l_lignes_texte = []
for l in l_lignes_texte_all :
if not(pattern_comment_slash.match(l)): l_lignes_texte.append(l)
@@ -191,17 +198,17 @@ class TELEMACParser(PythonParser):
finLigne=m.group('reste')
self.dictSimp[simpCas]=valeur
- if 'TITLE' not in self.dictSimp.keys() :
+ if 'TITLE' not in self.dictSimp :
import os
#self.dictSimp['TITLE']=os.path.basename(self.filename)
dicoParMC={}
- for simp in self.dictSimp.keys():
- if simp in TELEMACParser.__dict__.keys() : apply(TELEMACParser.__dict__[simp],(self,))
+ for simp in self.dictSimp:
+ if simp in TELEMACParser.__dict__ : TELEMACParser.__dict__[simp],(self,)
- for simp in self.dictSimp.keys():
+ for simp in self.dictSimp:
if simp in ListeSupprimeCasToEficas: continue
- if simp not in self.dicoInverse.keys() :
+ if simp not in self.dicoInverse :
#print ( "************")
print ("pb avec dans dicoInverse", simp,'------')
#print ("************")
@@ -217,19 +224,19 @@ class TELEMACParser(PythonParser):
while i < len(listeGeneaReverse[0:-1]) :
mot=listeGeneaReverse[i]
i=i+1
- if mot not in dicoTravail.keys(): dicoTravail[mot]={}
+ if mot not in dicoTravail: dicoTravail[mot]={}
dicoTravail=dicoTravail[mot]
dicoTravail[simp]=self.dictSimp[simp]
self.textePy=""
- listeMC=self.tri(dicoParMC.keys())
+ listeMC=self.tri(list(dicoParMC.keys()))
for k in listeMC :
self.textePy += str(k )+ "("
self.traiteMC(dicoParMC[k])
self.textePy += ");\n"
- appli.listeTelemac=self.dictSimp.keys()
+ appli.listeTelemac=self.dictSimp
return self.textePy
@@ -249,9 +256,9 @@ class TELEMACParser(PythonParser):
def traiteMC(self,dico) :
from Accas import A_BLOC, A_FACT, A_SIMP
- for k in dico.keys() :
+ for k in dico :
valeur= dico[k]
- if k not in self.dicoMC.keys() : kA=self.dicoFrancaisAnglais[k]
+ if k not in self.dicoMC : kA=self.dicoFrancaisAnglais[k]
else : kA=k
obj=self.dicoMC[kA]
if isinstance(obj,A_FACT.FACT): self.convertFACT(obj,kA,valeur)
@@ -261,8 +268,8 @@ class TELEMACParser(PythonParser):
def convertFACT(self,obj,nom,valeur):
- if nom in TELEMACParser.__dict__.keys() :
- apply(TELEMACParser.__dict__[nom],(self,))
+ if nom in TELEMACParser.__dict__ :
+ TELEMACParser.__dict__[nom],(self,)
return
self.textePy += nom + "=_F( "
self.traiteMC(valeur)
@@ -303,7 +310,7 @@ class TELEMACParser(PythonParser):
try : valeur=eval(valeur,{})
except : pass
- if nom in TelemacdicoEn.keys():
+ if nom in TelemacdicoEn:
try :
valeur=TelemacdicoEn[nom][valeur]
self.textePy += nom + "= '" + str(valeur) +"',"
@@ -362,7 +369,7 @@ class TELEMACParser(PythonParser):
# Attention : on attend une liste mais on a une seule valeur!
try : oldValeur=eval(oldValeur,{})
except : pass
- if nom in TelemacdicoEn.keys() :
+ if nom in TelemacdicoEn :
v=TelemacdicoEn[nom][oldValeur]
self.textePy += nom + "= ('" + str(v) +"',),"
else :
@@ -375,7 +382,7 @@ class TELEMACParser(PythonParser):
for v in valeur :
try : v=eval(v,{})
except : pass
- if nom in TelemacdicoEn.keys():
+ if nom in TelemacdicoEn:
try : v=TelemacdicoEn[nom][v]
except : pass
newVal.append(v)
@@ -402,17 +409,17 @@ class TELEMACParser(PythonParser):
def LIQUID_BOUNDARIES(self):
texte_Boundaries="LIQUID_BOUNDARIES=( "
- if 'PRESCRIBED_ELEVATIONS' in self.dictSimp.keys():
+ if 'PRESCRIBED_ELEVATIONS' in self.dictSimp:
valeursPE=self.dictSimp["PRESCRIBED_ELEVATIONS"]
if not type(valeursPE)==list : valeursPE = (valeursPE,)
longueur=len(self.dictSimp["PRESCRIBED_ELEVATIONS"])
else : valeursPE=None
- if 'PRESCRIBED_FLOWRATES' in self.dictSimp.keys():
+ if 'PRESCRIBED_FLOWRATES' in self.dictSimp:
valeursPF=self.dictSimp["PRESCRIBED_FLOWRATES"]
if not type(valeursPF)==list : valeursPF = (valeursPF,)
longueur=len(self.dictSimp["PRESCRIBED_FLOWRATES"])
else : valeursPF=None
- if 'PRESCRIBED_VELOCITIES' in self.dictSimp.keys():
+ if 'PRESCRIBED_VELOCITIES' in self.dictSimp:
valeursPV=self.dictSimp["PRESCRIBED_VELOCITIES"]
if not type(valeursPV)==list : valeursPV = (valeursPV,)
longueur=len(self.dictSimp["PRESCRIBED_VELOCITIES"])
diff --git a/convert/convert_map.py b/convert/convert_map.py
index 2128a3d1..64deb8dc 100644
--- a/convert/convert_map.py
+++ b/convert/convert_map.py
@@ -20,8 +20,8 @@
"""
"""
-import parseur_python
-from convert_python import *
+from __future__ import absolute_import
+from .convert_python import PythonParser
def entryPoint():
"""
diff --git a/convert/convert_pyth.py b/convert/convert_pyth.py
index 98a6faab..3f191ed0 100644
--- a/convert/convert_pyth.py
+++ b/convert/convert_pyth.py
@@ -47,7 +47,14 @@
Ce convertisseur supporte le format de sortie dict
"""
-import sys,string,traceback
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
+
+import sys,traceback
from Noyau import N_CR
from Extensions.i18n import tr
@@ -66,7 +73,7 @@ def entryPoint():
}
-class PythParser:
+class PythParser(object):
"""
Ce convertisseur lit un fichier au format pyth avec la
methode readfile : convertisseur.readfile(nom_fichier)
@@ -101,11 +108,11 @@ class PythParser:
return
self.g={}
try:
- exec self.text in self.g
+ exec(self.text, self.g)
except EficasException as e:
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
- s= string.join(l[2:])
- s= string.replace(s,'""','"<%s>"'%self.filename)
+ s= ''.join(l[2:])
+ s= s.replace('""','"<%s>"'%self.filename)
self.cr.fatal(tr("Erreur a l'evaluation :\n %s", s))
def convert(self,outformat,appli=None):
@@ -116,6 +123,6 @@ class PythParser:
def getdict(self):
d={}
- for k,v in self.g.items():
+ for k,v in list(self.g.items()):
if k[0] != '_':d[k]=v
return d
diff --git a/convert/convert_python.py b/convert/convert_python.py
index 59826fcb..133b9932 100644
--- a/convert/convert_python.py
+++ b/convert/convert_python.py
@@ -47,9 +47,15 @@
Ce convertisseur supporte le format de sortie exec
"""
-import sys,string,traceback
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except :
+ pass
+import sys,traceback
-import parseur_python
+from .parseur_python import PARSEUR_PYTHON
from Noyau import N_CR
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
@@ -67,7 +73,7 @@ def entryPoint():
}
-class PythonParser:
+class PythonParser(object):
"""
Ce convertisseur lit un fichier au format python avec la
methode readfile : convertisseur.readfile(nom_fichier)
@@ -108,13 +114,14 @@ class PythonParser:
def convert(self,outformat,appli=None):
if outformat == 'exec':
try:
- return parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli)
+ #return parseur_python.PARSEUR_PYTHON(self.text).get_texte(appli)
+ return PARSEUR_PYTHON(self.text).get_texte(appli)
except EficasException:
# Erreur lors de la conversion
l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],
sys.exc_info()[2])
self.cr.exception(tr("Impossible de convertir le fichier Python qui doit contenir des erreurs.\n\
- On retourne le fichier non converti. Prevenir la maintenance.\n\n %s", string.join(l)))
+ On retourne le fichier non converti. Prevenir la maintenance.\n\n %s", ''.join(l)))
# On retourne neanmoins le source initial non converti (au cas ou)
return self.text
elif outformat == 'execnoparseur':
diff --git a/convert/parseur_python.py b/convert/parseur_python.py
index c42fa7f7..453809a7 100644
--- a/convert/parseur_python.py
+++ b/convert/parseur_python.py
@@ -17,18 +17,33 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+ from builtins import object
+except :
+ pass
import sys,string,re
import traceback
from Extensions.i18n import tr
+from six.moves import range
escapedQuotesRE = re.compile(r"(\\\\|\\\"|\\\')")
stringsAndCommentsRE = \
re.compile(u"(\"\"\".*?\"\"\"|'''.*?'''|\"[^\"]*\"|\'[^\']*\'|#.*?\n)", re.DOTALL)
#stringsAndCommentsRE = \
# re.compile(u"(\"\"\".*\"\"\"|'''.*'''|\"[^\"]*\"|\'[^\']*\'|#.*\n)", re.DOTALL)
-allchars = string.maketrans(u"", "")
-allcharsExceptNewline = allchars[: allchars.index('\n')]+allchars[allchars.index('\n')+1:]
-allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
+import six
+if six.PY2 :
+ allchars = string.maketrans(u"", "")
+ allcharsExceptNewline = allchars[: allchars.index('\n')]+allchars[allchars.index('\n')+1:]
+ allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
+else :
+ allchars=bytes.maketrans(b"",b"")
+ allcharsExceptNewline = allchars[: allchars.index(b'\n')]+allchars[allchars.index(b'\n')+1:]
+ allcharsExceptNewlineTranstable = bytes.maketrans(allcharsExceptNewline, b'*'*len(allcharsExceptNewline))
#if sys.platform[0:5]=="linux" :
# allcharsExceptNewlineTranstable = string.maketrans(allcharsExceptNewline, '*'*len(allcharsExceptNewline))
@@ -47,12 +62,13 @@ def maskStringsAndComments(src):
# supprime toutes les chaines ou commentaires ,y compris multiligne i
# entre 3 ou 1 simples ou doubles quotes (ouvrantes fermantes) ou #
# laisse les non fermantes ou non ouvrantes
- #src = escapedQuotesRE.sub(u"**", src)
- # le u met le bazar dans le translate
+# on prend 1 sur 2 en raison du split qui donne python, commentaire, python, commentaire...
+
src = escapedQuotesRE.sub("**", src)
allstrings = stringsAndCommentsRE.split(src)
- # every odd element is a string or comment
- for i in xrange(1, len(allstrings), 2):
+
+ # on a une liste d elements constituee successivement de (string, comment)
+ for i in range(1, len(allstrings), 2):
if allstrings[i].startswith(u"'''")or allstrings[i].startswith('"""'):
allstrings[i] = allstrings[i][:3]+ \
allstrings[i][3:-3].translate(allcharsExceptNewlineTranstable)+ \
@@ -133,9 +149,9 @@ def construit_genea(texte,liste_mc):
return d
-class ENTITE_JDC :
- """Classe de base pour tous les objets créés lors de la conversion
- Tout objet dérivé est enregistré aupres de son pere a sa création
+class ENTITE_JDC(object) :
+ """Classe de base pour tous les objets crees lors de la conversion
+ Tout objet derive est enregistre aupres de son pere a sa creation
"""
def __init__(self,pere):
self.texte = ''
@@ -158,8 +174,8 @@ class COMMENTAIRE(ENTITE_JDC):
def __str__(self):
"""
- Retourne une chaine de caracteres représentants self
- sous une forme interprétable par EFICAS
+ Retourne une chaine de caracteres representants self
+ sous une forme interpretable par EFICAS
"""
t=repr(self.texte)
return "COMMENTAIRE(u"+t+")\n"
@@ -176,7 +192,7 @@ class COMMENTAIRE(ENTITE_JDC):
self.texte = self.texte+texte[1:]
else:
# le diese n'est pas sur le premier caractere
- amont,aval = string.split(texte,'#',1) # on découpe suivant la premiere occurrence de #
+ amont,aval = texte.split('#',1) # on decoupe suivant la premiere occurrence de #
self.texte = self.texte +amont + aval
class COMMANDE(ENTITE_JDC):
@@ -189,17 +205,19 @@ class COMMANDE(ENTITE_JDC):
def get_nb_par(self):
"""
- Retourne la différence entre le nombre de parentheses ouvrantes
- et le nombre de parentheses fermantes présentes dans self.texte
- Peut donc retourner un entier négatif
+ Retourne la difference entre le nombre de parentheses ouvrantes
+ et le nombre de parentheses fermantes presentes dans self.texte
+ Peut donc retourner un entier negatif
"""
# faire attention aux commentaires contenus dans self.texte
# qui peuvent eux-memes contenir des parentheses !!!!
- l_lignes = string.split(self.texte,'\n')
+ l_lignes = self.texte.split('\n')
nb = 0
for ligne in l_lignes:
- ligne = string.split(ligne,'#')[0]
- nb = nb + (string.count(ligne,'(')-string.count(ligne,')'))
+ ligne = ligne.split('#')[0]
+ #nb = nb + (string.count(ligne,'(')-string.count(ligne,')'))
+
+ nb = nb + ( ligne.count('(') - ligne.count(')') )
return nb
class AFFECTATION(ENTITE_JDC):
@@ -209,18 +227,18 @@ class AFFECTATION(ENTITE_JDC):
Ajoute texte a self.texte en enlevant tout retour chariot et tout point virgule
PN et tout commentaire
"""
- if texte[-1] == '\n' : texte = string.rstrip(texte[0:-1])
- if texte[-1] == ';' : texte = string.rstrip(texte[0:-1])
+ if texte[-1] == '\n' : texte = texte[0:-1].rstrip()
+ if texte[-1] == ';' : texte = texte[0:-1].rstrip()
self.texte = self.texte+texte+'\n'
def __str__(self):
"""
- Retourne une expression de l'affectation compréhensible par ACCAS
+ Retourne une expression de l'affectation comprehensible par ACCAS
et exploitable par EFICAS
"""
- nom,valeur = string.split(self.texte,'=',1)
- n = string.rstrip(nom)
- nom = string.lstrip(n)
+ nom,valeur = self.texte.split('=',1)
+ n = nom.rstrip()
+ nom = n.lstrip()
if valeur[-1] == '\n': valeur = valeur[:-1]
return n + ' = PARAMETRE(nom=\''+nom+'\',valeur='+valeur+')\n'
@@ -230,13 +248,13 @@ class COMMANDE_COMMENTARISEE(ENTITE_JDC):
"""
Ajoute texte a self.texte en enlevant les doubles commentaires
"""
- texte = string.strip(texte)
- texte = string.strip(texte[2:])
+ texte = texte.strip()
+ texte = texte[2:].strip()
self.texte = self.texte+(len(self.texte)>0)*'\n'+texte
def __str__(self):
"""
- Retourne une expression de la commande commentarisée compréhensible par ACCAS
+ Retourne une expression de la commande commentarisee comprehensible par ACCAS
et exploitable par EFICAS
"""
return "COMMANDE_COMM(texte="+repr(self.texte)+")\n"
@@ -253,19 +271,19 @@ class AFFECTATION_EVAL(ENTITE_JDC):
def __str__(self):
"""
- Retourne une expression du parametre EVAL compréhensible par ACCAS
+ Retourne une expression du parametre EVAL comprehensible par ACCAS
et exploitable par EFICAS
"""
- nom,valeur = string.split(self.texte,'=',1)
- nom = string.strip(nom)
+ nom,valeur = self.texte.split('=',1)
+ nom = nom.strip()
if valeur[-1] == '\n': valeur = valeur[:-1]
- valeur = string.strip(valeur)
+ valeur = valeur.strip()
return nom+' = PARAMETRE_EVAL(nom=\''+nom+'\',valeur=\''+valeur+'\')\n\n'
-class PARSEUR_PYTHON:
+class PARSEUR_PYTHON(object):
"""
- Cette classe sert a générer un objet PARSEUR_PYTHON qui réalise l'analyse d'un texte
- représentant un JDC Python en distinguant :
+ Cette classe sert a generer un objet PARSEUR_PYTHON qui realise l'analyse d'un texte
+ representant un JDC Python en distinguant :
- les commentaires inter commandes
- les affectations
- les commandes
@@ -282,19 +300,21 @@ class PARSEUR_PYTHON:
def is_affectation(self,texte):
"""
- Méthode booléenne qui retourne 1 si le texte est celui d'une affectation dans un jeu de commandes
+ Methode booleenne qui retourne 1 si le texte est celui d'une affectation dans un jeu de commandes
Aster, 0 sinon
"""
if '=' not in texte : return 0
if self.pattern_commande.match(texte):
- # cas d'une procédure ...
+ # cas d'une procedure ...
return 0
- amont,aval = string.split(texte,'=',1)
- aval = string.strip(aval)
+ amont,aval = texte.split('=',1)
+ aval = aval.strip()
+
+
if self.pattern_commande.match(aval):
return 0
else:
- s= string.strip(amont)
+ s= amont.strip()
m= self.pattern_name.match(s)
if m is None : return 0
if m.start() != 0 :return 0
@@ -303,15 +323,15 @@ class PARSEUR_PYTHON:
def is_eval(self,texte):
"""
- Méthode booléenne qui retourne 1 si le texte est celui d'une affectation de type EVAL
+ Methode booleenne qui retourne 1 si le texte est celui d'une affectation de type EVAL
dans un jeu de commandes Aster, 0 sinon
"""
if '=' not in texte : return 0
if self.pattern_commande.match(texte):
- # cas d'une procédure ...
+ # cas d'une procedure ...
return 0
- amont,aval = string.split(texte,'=',1)
- aval = string.strip(aval)
+ amont,aval = texte.split('=',1)
+ aval = aval.strip()
if not self.pattern_commande.match(aval) : return 0
if self.pattern_eval.match(aval):
return 1
@@ -320,18 +340,18 @@ class PARSEUR_PYTHON:
def is_commande(self,texte):
"""
- Méthode booléenne qui retourne 1 si le texte est celui d'une commande dans un jeu de commandes
+ Methode booleenne qui retourne 1 si le texte est celui d'une commande dans un jeu de commandes
Aster, 0 sinon
"""
if self.pattern_commande.match(texte):
- # cas d'une procédure ...
+ # cas d'une procedure ...
return 1
# A ce stade il faut avoir un OPER ou une MACRO, bref un '=' !
if '=' not in texte : return 0
# on a un texte de la forme xxxx = yyyyy
# --> reste a analyser yyyy
- amont,aval = string.split(texte,'=',1)
- aval = string.strip(aval)
+ amont,aval = texte.split('=',1)
+ aval = aval.strip()
if self.pattern_commande.match(aval):
return 1
else:
@@ -344,9 +364,9 @@ class PARSEUR_PYTHON:
def analyse(self):
"""
Eclate la chaine self.texte en self.l_objets une liste lignes d'instructions
- et de commentaires (parmi lesquels des instructions "commentarisées").
+ et de commentaires (parmi lesquels des instructions "commentarisees").
"""
- l_lignes = string.split(self.texte,'\n')
+ l_lignes = self.texte.split('\n')
commentaire_courant = None
commande_courante = None
affectation_courante = None
@@ -382,30 +402,30 @@ class PARSEUR_PYTHON:
if hangingBraces[0] < 0 or hangingBraces[1] < 0 or hangingBraces[2] < 0:
raise ParserException()
- if string.strip(ligne) == '':
+ if ligne.strip() == '':
# il s'agit d'un saut de ligne
# --> on l'ignore
continue
if pattern_2comments.match(ligne):
- #on a trouvé une commande commentarisée : double commentaire sans rien devant a part des blancs
+ #on a trouve une commande commentarisee : double commentaire sans rien devant a part des blancs
if commentaire_courant:
#Si un commentaire ordinaire est en cours on le termine
commentaire_courant = None
if commande_courante :
- # on a un objet commentarisé a l'intérieur d'une commande
- # --> non traité pour l'instant : on l'ajoute simplement a la commande courante comme
+ # on a un objet commentarise a l'interieur d'une commande
+ # --> non traite pour l'instant : on l'ajoute simplement a la commande courante comme
# un commentaire ordinaire
commande_courante.append_text(ligne)
elif commande_commentarisee_courante :
# commande_commentarisee en cours : on ajoute la ligne
commande_commentarisee_courante.append_text(ligne)
- # on a 2 commandes commentarisées de suite
+ # on a 2 commandes commentarisees de suite
if pattern_finComments.match(ligne) :
commande_commentarisee_courante = None
else:
- # debut de commande commentarisée : on crée un objet commande_commentarisee_courante
+ # debut de commande commentarisee : on cree un objet commande_commentarisee_courante
commande_commentarisee_courante = COMMANDE_COMMENTARISEE(self)
commande_commentarisee_courante.append_text(ligne)
@@ -419,7 +439,7 @@ class PARSEUR_PYTHON:
commande_commentarisee_courante = None
if commande_courante :
- # il s'agit d'un commentaire a l'intérieur d'une commande --> on ne fait rien de special
+ # il s'agit d'un commentaire a l'interieur d'une commande --> on ne fait rien de special
#on l'ajoute au texte de la commande
commande_courante.append_text(ligne)
elif commentaire_courant :
@@ -428,20 +448,20 @@ class PARSEUR_PYTHON:
commentaire_courant.append_text(ligne)
else :
# il s'agit d'un nouveau commentaire entre deux commandes
- # --> on le crée et il devient le commentaire courant
+ # --> on le cree et il devient le commentaire courant
commentaire_courant = COMMENTAIRE(self)
commentaire_courant.append_text(ligne)
#on passe a la ligne suivante
continue
- # la ligne contient des données autre qu'un éventuel commentaire
+ # la ligne contient des donnees autre qu'un eventuel commentaire
if commentaire_courant :
- # on clot un éventuel commentaire courant
+ # on clot un eventuel commentaire courant
commentaire_courant = None
if commande_commentarisee_courante :
- # on clot une éventuelle commande commentarisee courante
+ # on clot une eventuelle commande commentarisee courante
commande_commentarisee_courante = None
if commande_courante :
@@ -450,7 +470,7 @@ class PARSEUR_PYTHON:
if not linecontinueRE.search(line) \
and (hangingBraces == emptyHangingBraces) \
and not hangingComments:
- #la commande est terminée
+ #la commande est terminee
self.analyse_reel(commande_courante.texte)
commande_courante = None
@@ -463,7 +483,7 @@ class PARSEUR_PYTHON:
if not linecontinueRE.search(line) \
and (hangingBraces == emptyHangingBraces) \
and not hangingComments:
- #L'affectation est terminée
+ #L'affectation est terminee
affectation_courante=None
#on passe a la ligne suivante
continue
@@ -479,7 +499,7 @@ class PARSEUR_PYTHON:
continue
if self.is_affectation(ligne):
- # --> affectation
+ #print( '--> affectation')
text=ligne
#traitement des commentaires en fin de ligne
compos=line.find(u"#")
@@ -493,7 +513,7 @@ class PARSEUR_PYTHON:
if inspos > 2:
#on garde seulement la premiere partie de la ligne
#si on a que des blancs apres le point virgule
- if string.strip(text[inspos:]) == ";":
+ if text[inspos:].strip() == ";":
text=text[:inspos]
else:
raise FatalError(tr("Eficas ne peut pas traiter plusieurs instructions \
@@ -504,13 +524,14 @@ class PARSEUR_PYTHON:
if not linecontinueRE.search(line) \
and (hangingBraces == emptyHangingBraces) \
and not hangingComments:
- #L'affectation est terminée
+ #L'affectation est terminee
affectation_courante=None
#on passe a la ligne suivante
continue
if self.is_commande(ligne):
# --> nouvelle commande
+ #print ('nouvelle commande')
affectation_courante = None
commande_courante = COMMANDE(self)
commande_courante.append_text(ligne)
@@ -658,7 +679,7 @@ class PARSEUR_PYTHON:
return txt
def test():
- import parseur_python
+ #import parseur_python
import doctest
doctest.testmod(parseur_python)
@@ -666,17 +687,12 @@ def test():
if __name__ == "__main__" :
import time
#fichier = 'D:/Eficas_dev/Tests/zzzz100a.comm'
- fichier = 'U:/Eficas_dev/Tests/test_eval.comm'
- fichier = '/local/chris/ASTER/Eficas/Eficas1_10/EficasV1/Tests/testcomm/b.comm'
- fichier = '/local/chris/ASTER/instals/STA8.2/astest/forma12c.comm'
- fichier = 'titi.comm'
- fichier = '../Aster/sdls300a.comm'
- fichier = '../Aster/az.comm'
+ #fichier = 'U:/Eficas_dev/Tests/test_eval.comm'
texte = open(fichier,'r').read()
- class appli:
+ class appli(object):
dict_reels={}
liste_simp_reel=["VALE","VALE_C","GROUP_MA","RAYON"]
a=appli()
compile(txt, '', 'exec')
- print (a.dict_reels)
+ print((a.dict_reels))
diff --git a/generator/Formatage.py b/generator/Formatage.py
index 31edf1ab..7a1b59c8 100644
--- a/generator/Formatage.py
+++ b/generator/Formatage.py
@@ -22,12 +22,17 @@
liste de chaines de caractères dans une syntaxe représentative d'un
jeu de commandes en un texte présentable
"""
-import types,string,re
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import object
+except : pass
+import types,re
from Extensions.i18n import tr
filePattern="'[^\(\)]([^\(\)]*\([^\(\)]*\))*[^\(\)]*'"
filePattern2='"[^\(\)]([^\(\)]*\([^\(\)]*\))*[^\(\)]*"'
-class Formatage :
+class Formatage (object):
"""
Cette classe contient toutes les méthodes nécessaires au formatage
de la chaine de caracteres issue d'un generator en un fichier
@@ -69,7 +74,8 @@ class Formatage :
for etape in self.l_jdc:
self.count = self.count+1
self.texte_etape = ''
- if type(etape)==types.ListType:
+ #if type(etape)==types.ListType:
+ if type(etape)==list:
# L'etape est sous la forme d'une liste dont le premier element est une chaine
self.indent=[]
self.indent.append(len(etape[0]))
@@ -135,7 +141,8 @@ class Formatage :
self.indent_courant = self.indent[length]
# on écrit ses fils
self.formate_etape(element[1:])
- elif type(element) == types.StringType:
+ #elif type(element) == types.StringType:
+ elif type(element) == bytes:
# il s'agit d'un mot-clé simple ou de ')' ou ');' ou '),' ou ');\n'
@@ -163,7 +170,7 @@ class Formatage :
self.indent_courant=self.indent[length-2]
else :
self.indent_courant=self.indent[0]
- self.texte_etape = self.texte_etape + string.strip(s_etape)
+ self.texte_etape = self.texte_etape + s_etape.strip()
def traite_mcfact(self,s_mcfact,ind) :
"""
@@ -173,7 +180,7 @@ class Formatage :
L'attribut self.indent est modifié par le traitement
L'attribut self.indent_courant est modifié par le traitement
"""
- self.texte_etape = self.texte_etape + string.strip(s_mcfact)
+ self.texte_etape = self.texte_etape + s_mcfact.strip()
length = len(self.indent)
if length > 1:
last = self.indent[length-1]
@@ -207,16 +214,17 @@ class Formatage :
else :
bool_fonction=0
longueur = self.longueur(self.texte_etape)
- increment = len((u'\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp))
+ increment = len((u'\n'+self.indent_courant*' ')*ind + s_mcsimp.strip())
if (bool_fonction == 1 ) :
self.texte_etape = self.texte_etape+'\n'+self.indent_courant*' ' +s_mcsimp
elif ( ((1-ind)*longueur+increment) <= self.l_max ) :
- self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp)
+ self.texte_etape = self.texte_etape + ('\n'+self.indent_courant*' ')*ind +s_mcsimp.strip()
else :
# il faut couper ...
- nom,valeur = string.split(s_mcsimp,self.sep,1)
+ #nom,valeur = string.split(s_mcsimp,self.sep,1)
+ nom,valeur = str.split(s_mcsimp,self.sep,1)
chaine = self.creer_chaine(nom,valeur,'\n'+self.indent_courant*' ',ind)
- #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + string.strip(s_mcsimp)
+ #self.jdc_fini = self.jdc_fini + ('\n'+self.indent_courant*' ')*ind + s_mcsimp.strip()
self.texte_etape = self.texte_etape + chaine
return
@@ -226,7 +234,7 @@ class Formatage :
texte est une string qui peut contenir des retours chariots
Cette méthode retourne la longueur de la dernière ligne de texte
"""
- liste = string.split(texte,'\n')
+ liste = texte.split('\n')
return len(liste[-1])
def creer_chaine(self,nom,valeur,increment,ind):
@@ -258,10 +266,10 @@ class Formatage :
s=s+valeur
return s
# il s'agit d'une liste
- liste = string.split(valeur,',')
+ liste = valeur.split(',')
i=0
for arg in liste :
- ajout = string.strip(arg)
+ ajout = arg.strip()
if len(ajout) == 0 : continue
longueur = self.longueur(texte = (texte + label)) + len(ajout +',') + (1-i)*len(increment)
if longueur <= self.l_max:
diff --git a/generator/__init__.py b/generator/__init__.py
index 818ac587..ccd9bd77 100644
--- a/generator/__init__.py
+++ b/generator/__init__.py
@@ -18,12 +18,13 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
"""
- Ce package contient tous les générateurs de formats de sortie
- à partir des objets d' EFICAS.
+ Ce package contient tous les generateurs de formats de sortie
+ a partir des objets d' EFICAS.
- Ces générateurs sont implémentés sous forme de plugins
+ Ces generateurs sont implementes sous forme de plugins
"""
+from __future__ import absolute_import
from Extensions import pluginloader
import generator
diff --git a/generator/generator_GroupMA.py b/generator/generator_GroupMA.py
index 179ad0d2..50e30f34 100644
--- a/generator/generator_GroupMA.py
+++ b/generator/generator_GroupMA.py
@@ -20,20 +20,21 @@
"""
Ce module contient le plugin generateur d une liste des GroupNo et GroupMA
"""
+from __future__ import absolute_import
import traceback
-import types,string,re
+import types,re
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
def entryPoint():
"""
- Retourne les informations nécessaires pour le chargeur de plugins
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournées dans un dictionnaire
+ Ces informations sont retournees dans un dictionnaire
"""
return {
# Le nom du plugin
'name' : 'GroupMA',
- # La factory pour créer une instance du plugin
+ # La factory pour creer une instance du plugin
'factory' : GroupMAGenerator,
}
@@ -45,7 +46,7 @@ class GroupMAGenerator(PythonGenerator):
un texte au format homard
"""
- # Les extensions de fichier préconisées
+ # Les extensions de fichier preconisees
extensions=('.comm',)
def __init__(self):
@@ -63,7 +64,7 @@ class GroupMAGenerator(PythonGenerator):
if not type(obj.valeur) in (list, tuple):
aTraiter=(obj.valeur,)
else :
- aTraiter=obj.valeur
+ aTraiter=obj.valeur
for group in aTraiter :
if group not in self.listeMA :
self.listeMA.append(group)
@@ -71,7 +72,7 @@ class GroupMAGenerator(PythonGenerator):
if not type(obj.valeur) in (list, tuple):
aTraiter=(obj.valeur,)
else :
- aTraiter=obj.valeur
+ aTraiter=obj.valeur
for group in aTraiter :
if group not in self.listeNO :
self.listeNO.append(group)
diff --git a/generator/generator_PSEN.py b/generator/generator_PSEN.py
index 19fbcea1..2761c6b3 100755
--- a/generator/generator_PSEN.py
+++ b/generator/generator_PSEN.py
@@ -20,14 +20,18 @@
"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
"""
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
texte_debut="int main() \n{ \n init_var();\n"
texte_debut+=' format="med";\n'
import traceback
-import types,string,re,os
+import types,re,os
from Extensions.i18n import tr
-from generator_dicoImbrique import DicoImbriqueGenerator
+from .generator_dicoImbrique import DicoImbriqueGenerator
import pdb
-from numpy import zeros
def entryPoint():
"""
diff --git a/generator/generator_ProcessOutputs.py b/generator/generator_ProcessOutputs.py
index 9dd0ce71..b5499983 100755
--- a/generator/generator_ProcessOutputs.py
+++ b/generator/generator_ProcessOutputs.py
@@ -20,11 +20,11 @@
"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
"""
-import types,string,re,os
+from __future__ import absolute_import
+import types,re,os
from Extensions.i18n import tr
-from generator_python import PythonGenerator
-from generator_modification import ModificationGenerator
-from numpy import zeros
+from .generator_python import PythonGenerator
+from .generator_modification import ModificationGenerator
def entryPoint():
"""
diff --git a/generator/generator_TELEMAC.py b/generator/generator_TELEMAC.py
index 570de154..5a6ba744 100644
--- a/generator/generator_TELEMAC.py
+++ b/generator/generator_TELEMAC.py
@@ -20,19 +20,25 @@
"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+
import traceback
-import types,string,re,os
+import types,re,os
from Extensions.i18n import tr
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
extensions=('.comm',)
#if 1:
try :
from enumDicoTelemac import TelemacdicoEn
DicoEnumCasEnInverse={}
- for motClef in TelemacdicoEn.keys():
+ for motClef in TelemacdicoEn():
d={}
- for valTelemac in TelemacdicoEn[motClef].keys():
+ for valTelemac in TelemacdicoEn[motClef]:
valEficas= TelemacdicoEn[motClef][valTelemac]
d[valEficas]=valTelemac
DicoEnumCasEnInverse[motClef]=d
@@ -74,7 +80,7 @@ class TELEMACGenerator(PythonGenerator):
self.dicoCataToCas={}
self.dicoCasToCata=appli.readercata.dicoCasToCata
- for motClef in self.dicoCasToCata.keys():
+ for motClef in self.dicoCasToCata:
self.dicoCataToCas[self.dicoCasToCata[motClef]]=motClef
@@ -116,7 +122,7 @@ class TELEMACGenerator(PythonGenerator):
if self.statut == 'Leger' : extension = ".Lcas"
else : extension = ".cas"
fileDico = fn[:fn.rfind(".")] + extension
- f = open( str(fileDico), 'wb')
+ f = open( str(fileDico), 'w')
f.write( self.texteDico )
f.close()
@@ -138,7 +144,7 @@ class TELEMACGenerator(PythonGenerator):
self.texteDico += '/\t\t\t'+obj.nom +'\n'
self.texteDico += '/------------------------------------------------------/\n'
s=PythonGenerator.generPROC_ETAPE(self,obj)
- if obj.nom in TELEMACGenerator.__dict__.keys() : apply(TELEMACGenerator.__dict__[obj.nom],(self,obj))
+ if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom](*(self,obj))
return s
@@ -152,7 +158,7 @@ class TELEMACGenerator(PythonGenerator):
# ajouter le statut ?
if self.statut == 'Leger' :
if hasattr(obj.definition,'defaut') and (obj.definition.defaut == obj.valeur) and (obj.nom not in self.listeTelemac) : return s
- if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == types.TupleType or type(obj.valeur) == types.ListType) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s
+ if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == tuple or type(obj.valeur) == list) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s
#nomMajuscule=obj.nom.upper()
@@ -163,17 +169,17 @@ class TELEMACGenerator(PythonGenerator):
sTelemac=s[0:-1]
- if not( type(obj.valeur) in (types.TupleType,types.ListType) ):
- if obj.nom in DicoEnumCasEnInverse.keys():
+ if not( type(obj.valeur) in (tuple,list) ):
+ if obj.nom in DicoEnumCasEnInverse:
try : sTelemac=str(DicoEnumCasEnInverse[obj.nom][obj.valeur])
- except : print ("generMCSIMP Pb valeur avec ", obj.nom, obj.valeur)
- if type(obj.valeur) in (types.TupleType,types.ListType) :
- if obj.nom in DicoEnumCasEnInverse.keys():
+ except : print(("generMCSIMP Pb valeur avec ", obj.nom, obj.valeur))
+ if type(obj.valeur) in (tuple,list) :
+ if obj.nom in DicoEnumCasEnInverse:
#sT = "'"
sT=''
for v in obj.valeur:
try : sT +=str(DicoEnumCasEnInverse[obj.nom][v]) +";"
- except : print ("generMCSIMP Pb Tuple avec ", obj.nom, v, obj.valeur)
+ except : print(("generMCSIMP Pb Tuple avec ", obj.nom, v, obj.valeur))
#sTelemac=sT[0:-1]+"'"
sTelemac=sT[0:-1]
else :
@@ -214,7 +220,7 @@ class TELEMACGenerator(PythonGenerator):
"""
"""
s=PythonGenerator.generMCFACT(self,obj)
- if obj.nom in TELEMACGenerator.__dict__.keys() : apply(TELEMACGenerator.__dict__[obj.nom],(self,obj))
+ if obj.nom in TELEMACGenerator.__dict__ : TELEMACGenerator.__dict__[obj.nom],(self,obj)
return s
@@ -255,8 +261,8 @@ class TELEMACGenerator(PythonGenerator):
def NAME_OF_TRACER(self,obj):
- print (dir(obj) )
- print (obj.get_genealogie_precise())
+ print((dir(obj) ))
+ print((obj.get_genealogie_precise()))
def Validation(self,obj):
self.texteDico += "VALIDATION : True \n"
diff --git a/generator/generator_ZCracks.py b/generator/generator_ZCracks.py
index e7246088..157894b5 100644
--- a/generator/generator_ZCracks.py
+++ b/generator/generator_ZCracks.py
@@ -19,13 +19,19 @@
#
"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+
import pickle
texte_debut="#include \n int main() \n{ \n init_var();\n"
texte_debut+=' format="med";\n'
import traceback
-import types,string,re,os
+import types,re,os
from Extensions.i18n import tr
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
#ListeConcatene=('ridge_names','topo_names','geom_names','elset_names','faset_names','liset_names','nset_names','center','normal','dir')
ListeConcatene=('ridge_names','topo_names','geom_names','elset_names','faset_names','liset_names','nset_names')
ListeConcatene2=('center','normal','dir')
@@ -80,7 +86,7 @@ class ZCrackGenerator(PythonGenerator):
def writeDefault(self,fn) :
fileZcrack = fn[:fn.rfind(".")] + '.z7p'
f = open( str(fileZcrack), 'wb')
- print (self.textePourRun)
+ print((self.textePourRun))
self.ajoutRun()
self.textePourRunAvecDouble=self.textePourRun.replace("'",'"')
diff --git a/generator/generator_aplat.py b/generator/generator_aplat.py
index d54299b0..452b0d33 100644
--- a/generator/generator_aplat.py
+++ b/generator/generator_aplat.py
@@ -22,8 +22,13 @@
aplat pour EFICAS.
"""
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
import traceback
-import types,string,re
+import types,re
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
@@ -36,35 +41,35 @@ from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
def entryPoint():
"""
- Retourne les informations nécessaires pour le chargeur de plugins
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournées dans un dictionnaire
+ Ces informations sont retournees dans un dictionnaire
"""
return {
# Le nom du plugin
'name' : 'aplat',
- # La factory pour créer une instance du plugin
+ # La factory pour creer une instance du plugin
'factory' : AplatGenerator,
}
-class AplatGenerator:
+class AplatGenerator(object):
"""
Ce generateur parcourt un objet de type JDC et produit
un fichier au format aplat
- L'acquisition et le parcours sont réalisés par la méthode
+ L'acquisition et le parcours sont realises par la methode
generator.gener(objet_jdc,format)
- L'écriture du fichier au format ini par appel de la méthode
+ L'ecriture du fichier au format ini par appel de la methode
generator.writefile(nom_fichier)
- Ses caractéristiques principales sont exposées dans des attributs
+ Ses caracteristiques principales sont exposees dans des attributs
de classe :
- - extensions : qui donne une liste d'extensions de fichier préconisées
+ - extensions : qui donne une liste d'extensions de fichier preconisees
"""
- # Les extensions de fichier préconisées
+ # Les extensions de fichier preconisees
extensions=('.*',)
def __init__(self,cr=None):
@@ -75,9 +80,9 @@ class AplatGenerator:
self.cr=N_CR.CR(debut='CR generateur format aplat pour eficas',
fin='fin CR format aplat pour eficas')
self.init=''
- # Le séparateur utiisé
+ # Le separateur utiise
self.sep='//'
- # Le texte au format aplat est stocké dans l'attribut text
+ # Le texte au format aplat est stocke dans l'attribut text
self.text=''
def writefile(self,filename):
@@ -87,7 +92,7 @@ class AplatGenerator:
def gener(self,obj,format='brut',config=None,appli=None):
"""
- Retourne une représentation du JDC obj sous une forme qui est paramétrée par format.
+ Retourne une representation du JDC obj sous une forme qui est parametree par format.
Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
"""
liste= self.generator(obj)
@@ -104,10 +109,10 @@ class AplatGenerator:
def generator(self,obj):
"""
Cette methode joue un role d'aiguillage en fonction du type de obj
- On pourrait utiliser les méthodes accept et visitxxx à la
- place (dépend des gouts !!!)
+ On pourrait utiliser les methodes accept et visitxxx a la
+ place (depend des gouts !!!)
"""
- # ATTENTION a l'ordre des tests : il peut avoir de l'importance (héritage)
+ # ATTENTION a l'ordre des tests : il peut avoir de l'importance (heritage)
if isinstance(obj,PROC_ETAPE):
return self.generPROC_ETAPE(obj)
elif isinstance(obj,MACRO_ETAPE):
@@ -130,7 +135,7 @@ class AplatGenerator:
return self.generETAPE_NIVEAU(obj)
elif isinstance(obj,COMMENTAIRE):
return self.generCOMMENTAIRE(obj)
- # Attention doit etre placé avant PARAMETRE (raison : héritage)
+ # Attention doit etre place avant PARAMETRE (raison : heritage)
elif isinstance(obj,PARAMETRE_EVAL):
return self.generPARAMETRE_EVAL(obj)
elif isinstance(obj,PARAMETRE):
@@ -149,8 +154,8 @@ class AplatGenerator:
def generJDC(self,obj):
"""
- Cette méthode convertit un objet JDC en une chaine de
- caractères à la syntaxe aplat
+ Cette methode convertit un objet JDC en une chaine de
+ caracteres a la syntaxe aplat
"""
text=''
if obj.definition.l_niveaux == ():
@@ -165,10 +170,10 @@ class AplatGenerator:
def generCOMMANDE_COMM(self,obj):
"""
- Cette méthode convertit un COMMANDE_COMM
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit un COMMANDE_COMM
+ en une chaine de caracteres a la syntaxe aplat
"""
- l_lignes = string.split(obj.valeur,'\n')
+ l_lignes = obj.valeur.split('\n')
txt=''
for ligne in l_lignes:
txt = txt + '##'+ligne+'\n'
@@ -176,17 +181,17 @@ class AplatGenerator:
def generEVAL(self,obj):
"""
- Cette méthode convertit un EVAL
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit un EVAL
+ en une chaine de caracteres a la syntaxe aplat
"""
return 'EVAL("""'+ obj.valeur +'""")'
def generCOMMENTAIRE(self,obj):
"""
- Cette méthode convertit un COMMENTAIRE
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit un COMMENTAIRE
+ en une chaine de caracteres a la syntaxe aplat
"""
- l_lignes = string.split(obj.valeur,'\n')
+ l_lignes = obj.valeur.split('\n')
txt=''
for ligne in l_lignes:
txt = txt + '#'+ligne+'\n'
@@ -194,8 +199,8 @@ class AplatGenerator:
def generPARAMETRE_EVAL(self,obj):
"""
- Cette méthode convertit un PARAMETRE_EVAL
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit un PARAMETRE_EVAL
+ en une chaine de caracteres a la syntaxe aplat
"""
if obj.valeur == None:
return obj.nom + ' = None ;\n'
@@ -204,10 +209,10 @@ class AplatGenerator:
def generPARAMETRE(self,obj):
"""
- Cette méthode convertit un PARAMETRE
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit un PARAMETRE
+ en une chaine de caracteres a la syntaxe aplat
"""
- if type(obj.valeur) == types.StringType:
+ if type(obj.valeur) == bytes:
# PN pour corriger le bug a='3+4' au lieu de a= 3+4
#return obj.nom + " = '" + obj.valeur + "';\n"
return obj.nom + " = " + obj.valeur + ";\n"
@@ -216,8 +221,8 @@ class AplatGenerator:
def generETAPE_NIVEAU(self,obj):
"""
- Cette méthode convertit une étape niveau
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit une etape niveau
+ en une chaine de caracteres a la syntaxe aplat
"""
text=''
if obj.etapes_niveaux == []:
@@ -230,8 +235,8 @@ class AplatGenerator:
def gener_etape(self,obj):
"""
- Cette méthode est utilisé pour convertir les objets etape
- en une chaine de caractères à la syntaxe aplat
+ Cette methode est utilise pour convertir les objets etape
+ en une chaine de caracteres a la syntaxe aplat
"""
text=''
for v in obj.mc_liste:
@@ -243,8 +248,8 @@ class AplatGenerator:
def generETAPE(self,obj):
"""
- Cette méthode convertit une étape
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit une etape
+ en une chaine de caracteres a la syntaxe aplat
"""
try:
sdname= self.generator(obj.sd)
@@ -255,8 +260,8 @@ class AplatGenerator:
def generMACRO_ETAPE(self,obj):
"""
- Cette méthode convertit une macro-étape
- en une chaine de caractères à la syntaxe aplat
+ Cette methode convertit une macro-etape
+ en une chaine de caracteres a la syntaxe aplat
"""
try:
if obj.sd == None:
@@ -275,14 +280,14 @@ class AplatGenerator:
def generASSD(self,obj):
"""
- Convertit un objet dérivé d'ASSD en une chaine de caractères à la
+ Convertit un objet derive d'ASSD en une chaine de caracteres a la
syntaxe aplat
"""
return obj.get_name()
def generMCList(self,obj):
"""
- Convertit un objet MCList en une chaine de caractères à la
+ Convertit un objet MCList en une chaine de caracteres a la
syntaxe aplat
"""
i=0
@@ -291,36 +296,36 @@ class AplatGenerator:
old_init=self.init
for data in obj.data :
i=i+1
- self.init = init + self.sep + "occurrence n°"+`i`
+ self.init = init + self.sep + "occurrence n"+repr(i)
text = text + self.generator(data)
self.init=old_init
return text
def generMCSIMP(self,obj) :
"""
- Convertit un objet MCSIMP en une chaine de caractères à la
+ Convertit un objet MCSIMP en une chaine de caracteres a la
syntaxe aplat
"""
- if type(obj.valeur) in (types.TupleType,types.ListType) :
- # On est en présence d'une liste de valeur
+ if type(obj.valeur) in (tuple,list) :
+ # On est en presence d'une liste de valeur
rep = '('
for val in obj.valeur:
if type(val) == types.InstanceType :
rep = rep + self.generator(val) +','
else:
- rep = rep + `val`+','
+ rep = rep + repr(val)+','
rep = rep + ')'
elif type(obj.valeur) == types.InstanceType :
- # On est en présence d'une valeur unique de type instance
+ # On est en presence d'une valeur unique de type instance
rep = self.generator(obj.valeur)
else :
- # On est en présence d'une valeur unique
- rep = `obj.valeur`
+ # On est en presence d'une valeur unique
+ rep = repr(obj.valeur)
return self.init + self.sep + obj.nom + ' :' + rep + '\n'
def generMCCOMPO(self,obj):
"""
- Convertit un objet MCCOMPO en une chaine de caractères à la
+ Convertit un objet MCCOMPO en une chaine de caracteres a la
syntaxe aplat
"""
text = ''
diff --git a/generator/generator_dico.py b/generator/generator_dico.py
index bb50e370..bf935fba 100644
--- a/generator/generator_dico.py
+++ b/generator/generator_dico.py
@@ -20,10 +20,16 @@
"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
"""
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+except : pass
+
import traceback
-import types,string,re,os
+import types,re,os
from Extensions.i18n import tr
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
def entryPoint():
"""
@@ -75,7 +81,7 @@ class DicoGenerator(PythonGenerator):
fileDico = fn[:fn.rfind(".")] + '.py'
f = open( str(fileDico), 'wb')
f.write( self.texteDico )
- print (self.texteDico)
+ print((self.texteDico))
f.close()
#----------------------------------------------------------------------------------------
diff --git a/generator/generator_dicoImbrique.py b/generator/generator_dicoImbrique.py
index a4b92c52..72af2ad5 100644
--- a/generator/generator_dicoImbrique.py
+++ b/generator/generator_dicoImbrique.py
@@ -20,10 +20,15 @@
"""Ce module contient le plugin generateur de fichier au format Code_Carmel3D pour EFICAS.
"""
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
import traceback
-import types,string,re,os
+import types,re,os
from Extensions.i18n import tr
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
def entryPoint():
"""
@@ -99,12 +104,12 @@ class DicoImbriqueGenerator(PythonGenerator):
if hasattr(obj.etape,'sdnom') and obj.etape.sdnom != None and obj.etape.sdnom != "" :
nom = nom+ obj.etape.sdnom
- if not(self.Dico.has_key(nom)) : dicoCourant={}
+ if not(nom in self.Dico) : dicoCourant={}
else : dicoCourant=self.Dico [nom]
nomFeuille=liste[-1]
- if dicoCourant.has_key(nomFeuille) or self.DicoDejaLa.has_key(nomFeuille) :
- if self.DicoDejaLa.has_key(nomFeuille):
+ if nomFeuille in dicoCourant or nomFeuille in self.DicoDejaLa:
+ if nomFeuille in self.DicoDejaLa:
nomTravail= nomFeuille +'_'+str(self.DicoDejaLa[nomFeuille])
self.DicoDejaLa[nomFeuille]=self.DicoDejaLa[nomFeuille]+1
nomFeuille=nomTravail
@@ -118,7 +123,7 @@ class DicoImbriqueGenerator(PythonGenerator):
if hasattr(obj.valeur,'nom'): dicoCourant[nomFeuille]=obj.valeur.nom
else :
- if type(obj.valeur) in (types.ListType,types.TupleType):
+ if type(obj.valeur) in (list,tuple):
try :
#PNPNPN a remplacer par plus propre
if obj.definition.validators.typeDesTuples[0] !='R' :
diff --git a/generator/generator_file_from_template.py b/generator/generator_file_from_template.py
index 7b965464..d60ad8d5 100644
--- a/generator/generator_file_from_template.py
+++ b/generator/generator_file_from_template.py
@@ -17,10 +17,16 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
import os
+
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
+import six
def entryPoint():
"""
@@ -58,7 +64,7 @@ class FileFromTemplateGenerator(PythonGenerator):
if not os.path.isfile(templateFileName):
raise EficasException(tr("Fichier patron %s n'existe pas.",
str( templateFileName)))
- f = file(templateFileName, "r")
+ f = open(templateFileName, "r")
template = f.read()
f.close()
self.output_text = self.replace_keywords(template)
@@ -79,7 +85,7 @@ class FileFromTemplateGenerator(PythonGenerator):
def replace_keywords(self, template_string):
result = template_string
- for item in self.kw_dict.iteritems():
+ for item in six.iteritems(self.kw_dict):
replace_str = "%" + item[0] + "%"
result = result.replace(replace_str, str(item[1]))
return result
diff --git a/generator/generator_ini.py b/generator/generator_ini.py
index 182c1f0c..06c5f9f8 100644
--- a/generator/generator_ini.py
+++ b/generator/generator_ini.py
@@ -20,11 +20,15 @@
"""
Ce module contient le plugin generateur de fichier
au format ini pour EFICAS.
-
-
"""
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
import traceback
-import types,string
+import types
from Extensions.i18n import tr
from Extensions.eficas_exception import EficasException
@@ -34,32 +38,32 @@ from Accas import MCSIMP,MCFACT,MCList
def entryPoint():
"""
- Retourne les informations nécessaires pour le chargeur de plugins
- Ces informations sont retournées dans un dictionnaire
+ Retourne les informations necessaires pour le chargeur de plugins
+ Ces informations sont retournees dans un dictionnaire
"""
return {
# Le nom du plugin
'name' : 'ini',
- # La factory pour créer une instance du plugin
+ # La factory pour creer une instance du plugin
'factory' : IniGenerator,
}
-class IniGenerator:
+class IniGenerator(object):
"""
Ce generateur parcourt un objet de type MCFACT et produit
un fichier au format ini
- L'acquisition et le parcours sont réalisés par le méthode
+ L'acquisition et le parcours sont realises par le methode
generator.gener(objet_mcfact)
- L'écriture du fichier au format ini par appel de la méthode
+ L'ecriture du fichier au format ini par appel de la methode
generator.writefile(nom_fichier)
- Ses caractéristiques principales sont exposées dans des attributs
+ Ses caracteristiques principales sont exposees dans des attributs
de classe :
- - extensions : qui donne une liste d'extensions de fichier préconisées
+ - extensions : qui donne une liste d'extensions de fichier preconisees
"""
- # Les extensions de fichier préconisées
+ # Les extensions de fichier preconisees
extensions=('.ini','.conf')
def __init__(self,cr=None):
@@ -69,7 +73,7 @@ class IniGenerator:
else:
self.cr=N_CR.CR(debut='CR generateur format ini',
fin='fin CR format ini')
- # Le texte au format ini est stocké dans l'attribut text
+ # Le texte au format ini est stocke dans l'attribut text
self.text=''
def writefile(self,filename):
@@ -79,9 +83,9 @@ class IniGenerator:
def gener(self,obj,config=None):
"""
- Tous les mots-clés simples du niveau haut sont mis dans la section DEFAUT
- Tous les mots-clés facteurs sont convertis en sections
- Un mot-clé facteur ne peut contenir que des mots-clés simples. Sinon => erreur
+ Tous les mots-cles simples du niveau haut sont mis dans la section DEFAUT
+ Tous les mots-cles facteurs sont convertis en sections
+ Un mot-cle facteur ne peut contenir que des mots-cles simples. Sinon => erreur
"""
liste_mcfact=[]
sect_defaut=''
@@ -102,34 +106,34 @@ class IniGenerator:
elif isinstance(mocle,MCSIMP):
sect_defaut=sect_defaut+self.generMCSIMP(mocle)
else:
- self.cr.fatal(tr("Entite inconnue ou interdite :%s",`mocle`))
+ self.cr.fatal(tr("Entite inconnue ou interdite :%s",repr(mocle)))
self.text=''
if sect_defaut != '':
self.text="[DEFAULT]\n"+sect_defaut
- self.text=self.text + string.join(liste_mcfact,'\n')
+ self.text=self.text + ''.join(liste_mcfact,'\n')
return self.text
def generMCFACT(self,obj):
"""
- Cette méthode convertit un mot-clé facteur ne contenant que des mots-clés
- simples en une chaine de caractères
+ Cette methode convertit un mot-cle facteur ne contenant que des mots-cles
+ simples en une chaine de caracteres
"""
sect_text='[%s]\n' % obj.nom
for mocle in obj.mc_liste:
if isinstance(mocle,MCSIMP):
sect_text=sect_text+self.generMCSIMP(mocle)
else:
- self.cr.fatal(tr("Entite inconnue ou interdite :%s. Elle est ignoree",`mocle`))
+ self.cr.fatal(tr("Entite inconnue ou interdite :%s. Elle est ignoree",repr(mocle)))
return sect_text
def generMCSIMP(self,obj):
"""
- Cette méthode convertit un mot-clé simple en une chaine de caractères
+ Cette methode convertit un mot-cle simple en une chaine de caracteres
au format ini
"""
s=''
- if type(obj.valeur) == types.TupleType :
+ if type(obj.valeur) == tuple :
self.cr.fatal(tr("Les tuples ne sont pas supportes pour le format ini :%s ", obj.nom))
s="%s = %s\n" % (obj.nom,"ERREUR")
else :
diff --git a/generator/generator_map.py b/generator/generator_map.py
index e3f3a91e..9ba7fbd7 100644
--- a/generator/generator_map.py
+++ b/generator/generator_map.py
@@ -22,11 +22,17 @@
CARMEL3D pour EFICAS.
"""
+from __future__ import print_function
+from __future__ import absolute_import
+try :
+ from builtins import str
+except : pass
+
import traceback
-import types,string,re,os
+import types,re,os
import Accas
-from generator_python import PythonGenerator
+from .generator_python import PythonGenerator
def entryPoint():
"""
diff --git a/generator/generator_modification.py b/generator/generator_modification.py
index ac773472..0c451605 100644
--- a/generator/generator_modification.py
+++ b/generator/generator_modification.py
@@ -1,41 +1,47 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-"""
- Ce module sert pour charger les parametres de configuration d'EFICAS
-"""
-# Modules Python
-import os, sys, string, types, re
-from Extensions.i18n import tr
-
-class ModificationGenerator:
- def generTexteModif(self,obj):
- texteModification=""
- for t in obj.editor.dicoNouveauxMC.keys() :
- # 'ajoutDefinitionMC',etape,listeAvant,nomDuMC,typ,args
- fonction,Etape,Genea,nomSIMP,typeSIMP,arguments = obj.editor.dicoNouveauxMC[t]
- texteModification += "MODIFICATION_CATALOGUE(Fonction = '" + str(fonction)+ "',\n"
- texteModification += " Etape = '" + str(Etape) + "',\n"
- texteModification += " Genea = " + str(Genea) + ",\n"
- texteModification += " NomSIMP = '" + str(nomSIMP) + "',\n"
- texteModification += " TypeSIMP = '" + str(typeSIMP)+ "',\n"
- texteModification += " PhraseArguments = " +'"' + str(arguments)+ '"'+ ",);\n"
-
-
- return texteModification
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2013 EDF R&D
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+"""
+ Ce module sert pour charger les parametres de configuration d'EFICAS
+"""
+# Modules Python
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
+import os, sys, types, re
+from Extensions.i18n import tr
+
+class ModificationGenerator(object):
+ def generTexteModif(self,obj):
+ texteModification=""
+ for t in list(obj.editor.dicoNouveauxMC.keys()) :
+ # 'ajoutDefinitionMC',etape,listeAvant,nomDuMC,typ,args
+ fonction,Etape,Genea,nomSIMP,typeSIMP,arguments = obj.editor.dicoNouveauxMC[t]
+ texteModification += "MODIFICATION_CATALOGUE(Fonction = '" + str(fonction)+ "',\n"
+ texteModification += " Etape = '" + str(Etape) + "',\n"
+ texteModification += " Genea = " + str(Genea) + ",\n"
+ texteModification += " NomSIMP = '" + str(nomSIMP) + "',\n"
+ texteModification += " TypeSIMP = '" + str(typeSIMP)+ "',\n"
+ texteModification += " PhraseArguments = " +'"' + str(arguments)+ '"'+ ",);\n"
+
+
+ return texteModification
diff --git a/generator/generator_pyth.py b/generator/generator_pyth.py
index 40d4b435..b122fa92 100644
--- a/generator/generator_pyth.py
+++ b/generator/generator_pyth.py
@@ -22,8 +22,13 @@
"""
+try :
+ from builtins import str
+ from builtins import object
+except : pass
+
import traceback
-import types,string
+import types
from Noyau import N_CR
from Accas import MCSIMP,MCFACT,MCList
@@ -33,35 +38,35 @@ from Extensions.eficas_exception import EficasException
def entryPoint():
"""
- Retourne les informations nécessaires pour le chargeur de plugins
+ Retourne les informations necessaires pour le chargeur de plugins
- Ces informations sont retournées dans un dictionnaire
+ Ces informations sont retournees dans un dictionnaire
"""
return {
# Le nom du plugin
'name' : 'pyth',
- # La factory pour créer une instance du plugin
+ # La factory pour creer une instance du plugin
'factory' : PythGenerator,
}
-class PythGenerator:
+class PythGenerator(object):
"""
Ce generateur parcourt un objet de type MCFACT et produit
un fichier au format pyth
- L'acquisition et le parcours sont réalisés par la méthode
+ L'acquisition et le parcours sont realises par la methode
generator.gener(objet_mcfact)
- L'écriture du fichier au format ini par appel de la méthode
+ L'ecriture du fichier au format ini par appel de la methode
generator.writefile(nom_fichier)
- Ses caractéristiques principales sont exposées dans des attributs
+ Ses caracteristiques principales sont exposees dans des attributs
de classe :
- - extensions : qui donne une liste d'extensions de fichier préconisées
+ - extensions : qui donne une liste d'extensions de fichier preconisees
"""
- # Les extensions de fichier préconisées
+ # Les extensions de fichier preconisees
extensions=('.py','.comm')
def __init__(self,cr=None):
@@ -71,7 +76,7 @@ class PythGenerator:
else:
self.cr=N_CR.CR(debut='CR generateur format ini',
fin='fin CR format ini')
- # Le texte au format pyth est stocké dans l'attribut text
+ # Le texte au format pyth est stocke dans l'attribut text
self.text=''
def writefile(self,filename):
@@ -81,11 +86,11 @@ class PythGenerator:
def gener(self,obj,format='standard',config=None):
"""
- Tous les mots-clés simples du niveau haut sont transformés en variables
+ Tous les mots-cles simples du niveau haut sont transformes en variables
- Tous les mots-clés facteurs sont convertis en dictionnaires
+ Tous les mots-cles facteurs sont convertis en dictionnaires
- Les mots-clés multiples ne sont pas traités
+ Les mots-cles multiples ne sont pas traites
"""
s=''
if isinstance(obj,MCList):
@@ -108,15 +113,15 @@ class PythGenerator:
valeur = self.generMCSIMP(mocle)
s=s+"%s = %s\n" % (mocle.nom,valeur)
else:
- self.cr.fatal("Entite inconnue ou interdite : "+`mocle`)
+ self.cr.fatal("Entite inconnue ou interdite : "+repr(mocle))
self.text=s
return self.text
def generMCFACT(self,obj):
"""
- Cette méthode convertit un mot-clé facteur
- en une chaine de caractères représentative d'un dictionnaire
+ Cette methode convertit un mot-cle facteur
+ en une chaine de caracteres representative d'un dictionnaire
"""
s = '{'
for mocle in obj.mc_liste:
@@ -127,21 +132,21 @@ class PythGenerator:
valeur=self.generMCFACT(mocle)
s=s+"'%s' : %s,\n" % (mocle.nom,valeur)
else:
- self.cr.fatal(tr("Entite inconnue ou interdite : %s. Elle est ignoree", `mocle`))
+ self.cr.fatal(tr("Entite inconnue ou interdite : %s. Elle est ignoree", repr(mocle)))
s=s+'}'
return s
def generMCSIMP(self,obj):
"""
- Cette méthode convertit un mot-clé simple en une chaine de caractères
+ Cette methode convertit un mot-cle simple en une chaine de caracteres
au format pyth
"""
try:
s="%s" % obj.valeur
except Exception as e :
self.cr.fatal(tr("Type de valeur non supporte par le format pyth : n %(exception)s", \
- {'nom': obj.nom, 'exception': unicode(e)}))
+ {'nom': obj.nom, 'exception': str(e)}))
s="ERREUR"
diff --git a/generator/generator_python.py b/generator/generator_python.py
index e49ca579..4cd1a786 100644
--- a/generator/generator_python.py
+++ b/generator/generator_python.py
@@ -22,16 +22,23 @@
python pour EFICAS.
"""
+from __future__ import absolute_import
+try :
+ from builtins import str
+ from builtins import object
+ from builtins import range
+except : pass
+
import traceback
-import types,string,re
+import types,re
from Noyau import N_CR
from Noyau.N_utils import repr_float
import Accas
import Extensions
from Extensions.parametre import ITEM_PARAMETRE
-from Formatage import Formatage
-from Formatage import FormatageLigne
+from .Formatage import Formatage
+from .Formatage import FormatageLigne
from Extensions.param2 import Formula
from Extensions.eficas_exception import EficasException
from Extensions.i18n import tr
@@ -51,7 +58,7 @@ def entryPoint():
}
-class PythonGenerator:
+class PythonGenerator(object):
"""
Ce generateur parcourt un objet de type JDC et produit
un fichier au format python
@@ -100,7 +107,7 @@ class PythonGenerator:
if format == 'brut':
self.text=liste
elif format == 'standard':
- self.text=string.join(liste)
+ self.text=''.join(liste)
elif format == 'beautifie':
jdc_formate = Formatage(liste,mode='.py')
self.text=jdc_formate.formate_jdc()
@@ -177,9 +184,9 @@ class PythonGenerator:
l.extend(self.generator(etape_niveau))
if l != [] :
# Si au moins une etape, on ajoute le retour chariot sur la derniere etape
- if type(l[-1])==types.ListType:
+ if type(l[-1])==list:
l[-1][-1] = l[-1][-1]+'\n'
- elif type(l[-1])==types.StringType:
+ elif type(l[-1])==bytes:
l[-1] = l[-1]+'\n'
return l
@@ -201,7 +208,7 @@ class PythonGenerator:
Cette methode convertit un COMMANDE_COMM
en une liste de chaines de caracteres a la syntaxe python
"""
- l_lignes = string.split(obj.valeur,'\n')
+ l_lignes = obj.valeur.split('\n')
txt=''
for ligne in l_lignes:
txt = txt + '##'+ligne+'\n'
@@ -224,7 +231,7 @@ class PythonGenerator:
# Dans la chaine de caracteres obj.valeur, on supprime le dernier
# saut de ligne
sans_saut = re.sub("\n$","",obj.valeur)
- l_lignes = string.split(sans_saut,'\n')
+ l_lignes = sans_saut.split('\n')
txt=''
i=1
for ligne in l_lignes:
@@ -284,7 +291,7 @@ class PythonGenerator:
"""
try:
sdname= self.generator(obj.sd)
- if string.find(sdname,'SD_') != -1: sdname='sansnom'
+ if sdname.find('SD_') != -1: sdname='sansnom'
except:
sdname='sansnom'
l=[]
@@ -380,6 +387,7 @@ class PythonGenerator:
l.append(mocle)
elif isinstance(v,Accas.MCSIMP) :
text=self.generator(v)
+ if text==None : text= ""
l.append(v.nom+'='+text)
else:
# MCFACT ou MCList
@@ -420,6 +428,7 @@ class PythonGenerator:
else:
# on est en presence d'un MCSIMP : on recupere une string
text =self.generator(v)
+ if text== None : text =""
if v.nom != "Consigne" : l.append(v.nom+'='+text)
# il faut etre plus subtil dans l'ajout de la virgule en differenciant
# le cas ou elle est obligatoire (si self a des freres cadets
@@ -469,7 +478,8 @@ class PythonGenerator:
l.append(mocle)
else:
data=self.generator(v)
- if type(data) == types.ListType:
+ if data==None : data= ""
+ if type(data) == list:
data[0]=v.nom+'='+data[0]
else:
data=v.nom+'='+data
@@ -478,7 +488,7 @@ class PythonGenerator:
def format_item(self,valeur,etape,obj,vientDeListe=0):
- if (type(valeur) == types.FloatType or 'R' in obj.definition.type) and not(isinstance(valeur,Accas.PARAMETRE)) :
+ if (type(valeur) == float or 'R' in obj.definition.type) and not(isinstance(valeur,Accas.PARAMETRE)) :
# Pour un flottant on utilise str ou repr si on vient d une liste
# ou la notation scientifique
# On ajoute un . si il n y en a pas dans la valeur
@@ -486,11 +496,11 @@ class PythonGenerator:
if vientDeListe and repr(valeur) != str(valeur) : s=repr(valeur)
if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.0'
clefobj=etape.get_sdname()
- if self.appli.appliEficas and self.appli.appliEficas.dict_reels.has_key(clefobj):
- if self.appli.appliEficas.dict_reels[clefobj].has_key(valeur):
+ if self.appli.appliEficas and clefobj in self.appli.appliEficas.dict_reels:
+ if valeur in self.appli.appliEficas.dict_reels[clefobj]:
s=self.appli.appliEficas.dict_reels[clefobj][valeur]
- elif type(valeur) == types.StringType :
+ elif type(valeur) == bytes :
if valeur.find('\n') == -1:
# pas de retour chariot, on utilise repr
s = repr(valeur)
@@ -529,7 +539,7 @@ class PythonGenerator:
syntaxe python
"""
waitTuple=0
- if type(obj.valeur) in (types.TupleType,types.ListType) :
+ if type(obj.valeur) in (tuple,list) :
s = ''
for ss_type in obj.definition.type:
if repr(ss_type).find('Tuple') != -1 :
diff --git a/generator/generator_vers3DSalome.py b/generator/generator_vers3DSalome.py
index 09582f21..569e4faf 100644
--- a/generator/generator_vers3DSalome.py
+++ b/generator/generator_vers3DSalome.py
@@ -23,8 +23,15 @@
PN
"""
+from __future__ import absolute_import
+from __future__ import print_function
+from __future__ import division
+try :
+ from builtins import range
+except :
+ pass
import traceback
-import types,string,re
+import types,re
import math
from Noyau import N_CR
@@ -32,8 +39,9 @@ from Noyau.N_utils import repr_float
import Accas
import Extensions
from Extensions.parametre import ITEM_PARAMETRE
-from Formatage import Formatage
-from generator_python import PythonGenerator
+from .Formatage import Formatage
+from .generator_python import PythonGenerator
+from six.moves import range
#from Editeur.widgets import showerror
def entryPoint():
@@ -160,7 +168,7 @@ class vers3DSalomeGenerator(PythonGenerator):
self.list_commandes.append((self.commande,self.dict_attributs))
else :
#showerror("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
- print ("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element")
+ print(("Elements ne portant pas sur un Groupe de Maille","Salome ne sait pas montrer ce type d' element"))
pass
def generMCList(self,obj):
@@ -188,7 +196,7 @@ class vers3DSalomeGenerator(PythonGenerator):
def CARA(self,obj) :
self.clefs=obj.val
- if type(self.clefs) == types.StringType :
+ if type(self.clefs) == bytes :
self.clefs=(obj.val,)
def VALE(self,obj) :
@@ -200,16 +208,16 @@ class vers3DSalomeGenerator(PythonGenerator):
for k in range(len(atraiter)) :
clef=self.clefs[k]
val =atraiter[k]
- if isinstance(val, (types.TupleType, types.ListType)) and len(val) == 1:
+ if isinstance(val, (tuple, list)) and len(val) == 1:
val = val[0]
if isinstance (val, Extensions.parametre.PARAMETRE):
val=val.valeur
- print ( val.__class)
+ print(( val.__class))
context={}
if type(val) == type("aaa") :
for p in self.jdc.params:
context[p.nom]=eval(p.val,self.jdc.const_context, context)
- print (context[p.nom])
+ print((context[p.nom]))
res=eval(val,self.jdc.const_context, context)
val=res
self.dict_attributs[clef]=val
--
2.39.2