From cc4e1389c9753e8065e147a5c19dac442b137d1e Mon Sep 17 00:00:00 2001 From: Renaud Barate Date: Thu, 10 Jul 2014 13:44:25 +0000 Subject: [PATCH] Support des accents dans les noms de fichiers --- InterfaceQT4/browser.py | 19 +++++++++---------- InterfaceQT4/editor.py | 4 ++-- Noyau/N_Exception.py | 20 ++++++-------------- Noyau/N_JDC.py | 6 +++++- Noyau/N_utils.py | 7 ++++++- Noyau/nommage.py | 3 ++- Validation/V_ETAPE.py | 2 +- generator/generator_openturns_study.py | 5 ++--- 8 files changed, 33 insertions(+), 33 deletions(-) diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 535c00b0..d4c1e6ca 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -110,9 +110,8 @@ class JDCNode(QTreeWidgetItem): #if hasattr(self.editor, 'affichage_onglet' ) :self.affichage_onglet=self.editor.affichage_onglet #else : self.affichage_onglet=False - - name = self.appliEficas.trUtf8( str( item.GetLabelText()[0] ) ) - value = self.appliEficas.trUtf8( str( item.GetText() ) ) + name = self.appliEficas.trUtf8( item.GetLabelText()[0] ) + value = self.appliEficas.trUtf8( item.GetText() ) mesColonnes=QStringList() mesColonnes << name << value QTreeWidgetItem.__init__(self,treeParent,mesColonnes) @@ -178,7 +177,7 @@ class JDCNode(QTreeWidgetItem): """ 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 où l'utilisateur final cherche à désactiver # (commentariser) un commentaire. try : pos=self.treeParent.children.index(self) @@ -295,7 +294,7 @@ class JDCNode(QTreeWidgetItem): child=old_obj[-1] child.affichePanneau() except: - # Souci pour gerer les copies des AFFE d'une commande à l autre + # Souci pour gérer les copies des AFFE d'une commande à l autre try : child=self.children[index] child.affichePanneau() @@ -347,7 +346,7 @@ class JDCNode(QTreeWidgetItem): 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 détruit dans une Etape if index == 9999 : parentPosition=self.treeParent while not(isinstance(parentPosition, compojdc.Node)): @@ -476,8 +475,8 @@ class JDCNode(QTreeWidgetItem): 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 + Déclenche la copie de l'objet item avec pour cible + l'objet passé en argument : node_selected """ #print 'je passe dans doPaste' objet_a_copier = self.item.get_copie_objet() @@ -486,7 +485,7 @@ class JDCNode(QTreeWidgetItem): def doPasteCommande(self,objet_a_copier,pos='after'): """ - Réalise la copie de l'objet passé en argument qui est nécessairement + Réalise la copie de l'objet passé en argument qui est nécessairement une commande """ child=None @@ -498,7 +497,7 @@ class JDCNode(QTreeWidgetItem): def doPastePremier(self,objet_a_copier): """ - Réalise la copie de l'objet passé en argument (objet_a_copier) + Réalise la copie de l'objet passé en argument (objet_a_copier) """ objet = objet_a_copier.item.get_copie_objet() child = self.append_child(objet,pos='first') diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index 3f2c96d0..5f9b2eaa 100644 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -157,7 +157,7 @@ class JDCEditor(QSplitter): if txt_exception: self.jdc = None qApp.restoreOverrideCursor() - self.affiche_infos(tr("Erreur fatale au chargement de %s",str(fichier)),Qt.red) + self.affiche_infos(tr("Erreur fatale au chargement de %s", fichier), Qt.red) if (self.appliEficas.ssIhm == False) : QMessageBox.critical( self, tr("Erreur fatale au chargement d'un fichier"), txt_exception) else: comploader.charger_composants("QT") @@ -850,7 +850,7 @@ class JDCEditor(QSplitter): if QFileInfo(fn).exists(): abort = QMessageBox.warning(self, tr("Sauvegarde du Fichier"), - tr("Le fichier %s existe deja.",str(fn)), + tr("Le fichier %s existe deja.", unicode(fn)), tr("&Ecraser"), self.trUtf8("&Abandonner")) if abort == 1 : return (0, "") diff --git a/Noyau/N_Exception.py b/Noyau/N_Exception.py index 00eecd91..1c4b0221 100644 --- a/Noyau/N_Exception.py +++ b/Noyau/N_Exception.py @@ -1,4 +1,3 @@ -# -*- coding: iso-8859-1 -*- # Copyright (C) 2007-2013 EDF R&D # # This library is free software; you can redistribute it and/or @@ -22,19 +21,12 @@ Ce module contient la classe AsException """ -# Modules Python -import types +# Modules EFICAS +from strfunc import get_encoding class AsException(Exception): - def __str__(self): - if not self.args: - return '' - elif len(self.args) == 1: - return str(self.args[0]) - else: - s='' - for e in self.args: - if type(e) == types.StringType: s=s+ ' ' + e - else:s=s+ ' ' + str(e) - return s + def __unicode__(self): + return " ".join([unicode(x) for x in self.args]) + def __str__(self): + return unicode(self).encode(get_encoding()) diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index 02139075..463738ab 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -33,6 +33,7 @@ import N_CR from N_Exception import AsException from N_ASSD import ASSD from N_info import message, SUPERV +from strfunc import get_encoding MemoryErrorMsg = """MemoryError : @@ -141,7 +142,10 @@ NONE = None try: if self.appli != None : self.appli.affiche_infos('Compilation du fichier de commandes en cours ...') - self.proc_compile=compile(self.procedure,self.nom,'exec') + # 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 + encoded_filename = self.nom.encode(get_encoding()) + self.proc_compile = compile(self.procedure, encoded_filename, 'exec') except SyntaxError, e: if CONTEXT.debug : traceback.print_exc() l=traceback.format_exception_only(SyntaxError,e) diff --git a/Noyau/N_utils.py b/Noyau/N_utils.py index 7b909f18..0e5227ff 100644 --- a/Noyau/N_utils.py +++ b/Noyau/N_utils.py @@ -28,6 +28,7 @@ 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 SEP='_' @@ -59,7 +60,11 @@ def callee_where(niveau=4): frame=cur_frame(niveau) if frame == None: return 0,"inconnu",0,{} try: - return frame.f_lineno,frame.f_code.co_filename,frame.f_code.co_firstlineno,frame.f_locals + # 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()) + return frame.f_lineno,filename,frame.f_code.co_firstlineno,frame.f_locals except: return 0,"inconnu",0,{} diff --git a/Noyau/nommage.py b/Noyau/nommage.py index e8bb5e84..eddbc7ae 100644 --- a/Noyau/nommage.py +++ b/Noyau/nommage.py @@ -42,6 +42,7 @@ from functools import partial # Modules EFICAS import N_utils +from strfunc import get_encoding regex1='=?\s*%s\s*\(' #commentaire standard precede d'un nombre quelconque de blancs (pas multiligne) @@ -68,7 +69,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 = co.co_filename + filename = unicode(co.co_filename, get_encoding()) name = co.co_name #pattern pour identifier le debut de la commande pattern_oper=re.compile(regex1 % ope) diff --git a/Validation/V_ETAPE.py b/Validation/V_ETAPE.py index 0a38fbe0..03254488 100644 --- a/Validation/V_ETAPE.py +++ b/Validation/V_ETAPE.py @@ -222,7 +222,7 @@ class ETAPE(V_MCCOMPO.MCCOMPO): """ self.cr=self.CR(debut=u'Etape : '+self.nom \ + u' ligne : '+`self.appel[0]`\ - + u' fichier : '+`self.appel[1]`, + + u' fichier : '+ self.appel[1], fin = u'Fin Etape : '+self.nom) self.state = 'modified' try: diff --git a/generator/generator_openturns_study.py b/generator/generator_openturns_study.py index 0b0df3bd..e603d902 100644 --- a/generator/generator_openturns_study.py +++ b/generator/generator_openturns_study.py @@ -128,9 +128,8 @@ class OpenturnsGenerator(PythonGenerator): def writeDefault(self, fn): fileSTD = fn[:fn.rfind(".")] + '.py' - f = open( str(fileSTD), 'wb') - f.write( self.texteSTD ) - f.close() + with open(fileSTD, 'w') as f: + f.write(self.texteSTD) def getGenerateur (self): print "IDM: getGenerateur dans generator_openturns_study.py" -- 2.39.2