Mise à jour du plugin

This commit is contained in:
Pierre-Elliott Bécue 2015-05-18 23:28:19 +02:00
parent 8cc8770ee4
commit d23bda8bd2
2 changed files with 9 additions and 17 deletions

View file

@ -35,6 +35,7 @@ class SafeEnvironment(dict):
}, },
# Fonction de base pour imprimer quelque chose # Fonction de base pour imprimer quelque chose
"out": self.out, "out": self.out,
"_out": self._out,
# Le séparateur pour la forme: variable keysep valeur # Le séparateur pour la forme: variable keysep valeur
"keysep": "=", "keysep": "=",
# Le charactère de commentaire # Le charactère de commentaire
@ -73,12 +74,14 @@ class SafeEnvironment(dict):
"""Quand on fait un export, on utilise defvar pour incorporer la variable """Quand on fait un export, on utilise defvar pour incorporer la variable
et sa valeur dans le fichier produit""" et sa valeur dans le fichier produit"""
# On écrit mavariable = toto, en appliquant une éventuelle conversion à toto # On écrit mavariable = toto, en appliquant une éventuelle conversion à toto
self.out("%s%s%s\n" % (variable, self['keysep'], self.tostring(value))) self.out("%s%s%s" % (variable, self['keysep'], self.tostring(value)))
def out(self, string): def out(self, string=""):
"""C'est le print local. Sauf qu'on écrit dans self.stream. C'est pas """C'est le print local. Sauf qu'on écrit dans self.stream"""
indispensable, car l'évaluation du fichier se fait déjà à sys.stdout self._out("%s\n" % (string,))
pointant vers ledit stream."""
def _out(self, string=""):
"""C'est le print local sans retour à la ligne."""
self.stream.write(string) self.stream.write(string)
def tostring(self, value): def tostring(self, value):

View file

@ -122,13 +122,6 @@ class PythonFile(Debuggable):
if environment is None: if environment is None:
environment = PythonEnv.SafeEnvironment(additionnal, self) environment = PythonEnv.SafeEnvironment(additionnal, self)
# On ne réaffecte stdout que sur le premier élément de la pile
have_to_get_out = False
if sys.stdout == sys.__stdout__:
sys.stdout = environment.stream
have_to_get_out = True
# Lors de l'exécution d'un fichier, on inclut # Lors de l'exécution d'un fichier, on inclut
# toujours common (ie on l'exécute dans l'environnement) # toujours common (ie on l'exécute dans l'environnement)
environment.include("common") environment.include("common")
@ -137,12 +130,8 @@ class PythonFile(Debuggable):
exec(self.data, environment) exec(self.data, environment)
except Exception: except Exception:
sys.stderr.write('code: %r\n' % (self.data,)) sys.stderr.write('code: %r\n' % (self.data,))
sys.stdout = sys.__stdout__
raise raise
if sys.stdout != sys.__stdout__ and have_to_get_out:
sys.stdout = sys.__stdout__
have_to_get_out = False
return environment.stream.getvalue(), environment['info'] return environment.stream.getvalue(), environment['info']
#+---------------------------------------------+ #+---------------------------------------------+
@ -192,7 +181,7 @@ def compileSource(source, filename="", logger=None):
newsource.write(line) newsource.write(line)
# Et un superbe \n. # Et un superbe \n.
newsource.write('\\n")') newsource.write('")')
# %, affectation. # %, affectation.
elif linetype == "%": elif linetype == "%":