[bcfg2/*/Python.py] Ajout de facilités de logging
darcs-hash:20091102205722-ffbb2-4fd8cd1cdc940cb39273b44b4d2a7dbdd24654b4.gz
This commit is contained in:
parent
a4a6b5c4d9
commit
0c5782c7b5
2 changed files with 13 additions and 11 deletions
|
@ -73,10 +73,10 @@ def include(env, incfile):
|
||||||
env.included.add(incfile)
|
env.included.add(incfile)
|
||||||
exec(includes[incfile], env)
|
exec(includes[incfile], env)
|
||||||
|
|
||||||
def load_file(filename):
|
def load_file(filename, logger):
|
||||||
'''Charge un script et affiche un message d'erreur en cas d'exception'''
|
'''Charge un script et affiche un message d'erreur en cas d'exception'''
|
||||||
try:
|
try:
|
||||||
return pygen.load(filename, os.path.dirname(filename) + "/." + os.path.basename(filename) + ".COMPILED")
|
return pygen.load(filename, os.path.dirname(filename) + "/." + os.path.basename(filename) + ".COMPILED", logger)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
log_traceback(filename, 'compilation', e)
|
log_traceback(filename, 'compilation', e)
|
||||||
return None
|
return None
|
||||||
|
@ -139,7 +139,7 @@ class Python(Bcfg2.Server.Plugin.Plugin,Bcfg2.Server.Plugin.Generator):
|
||||||
env.included = set([])
|
env.included = set([])
|
||||||
try:
|
try:
|
||||||
include(env, "common")
|
include(env, "common")
|
||||||
text = pygen.generate(code, env)
|
text = pygen.generate(code, env, logger)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
log_traceback(fname, 'exec', e)
|
log_traceback(fname, 'exec', e)
|
||||||
raise Bcfg2.Server.Plugin.PluginExecutionError
|
raise Bcfg2.Server.Plugin.PluginExecutionError
|
||||||
|
@ -181,7 +181,7 @@ class Python(Bcfg2.Server.Plugin.Plugin,Bcfg2.Server.Plugin.Generator):
|
||||||
identifier = path[len(self.include)+1:-3]
|
identifier = path[len(self.include)+1:-3]
|
||||||
if action in ['exists', 'created', 'changed']:
|
if action in ['exists', 'created', 'changed']:
|
||||||
debug("adding include file: %s" % identifier, 'green')
|
debug("adding include file: %s" % identifier, 'green')
|
||||||
includes[identifier] = load_file(path)
|
includes[identifier] = load_file(path, logger)
|
||||||
elif action == 'deleted':
|
elif action == 'deleted':
|
||||||
debug("deleting include file: %s" % identifier, 'red')
|
debug("deleting include file: %s" % identifier, 'red')
|
||||||
del includes[identifier]
|
del includes[identifier]
|
||||||
|
@ -194,10 +194,10 @@ class Python(Bcfg2.Server.Plugin.Plugin,Bcfg2.Server.Plugin.Generator):
|
||||||
identifier = path[len(self.data):]
|
identifier = path[len(self.data):]
|
||||||
if action in ['exists', 'created']:
|
if action in ['exists', 'created']:
|
||||||
debug("adding config file: %s" % identifier, 'green')
|
debug("adding config file: %s" % identifier, 'green')
|
||||||
self.codes[identifier] = load_file(path)
|
self.codes[identifier] = load_file(path, logger)
|
||||||
self.Entries['ConfigFile'][identifier] = self.BuildEntry
|
self.Entries['ConfigFile'][identifier] = self.BuildEntry
|
||||||
elif action == 'changed':
|
elif action == 'changed':
|
||||||
self.codes[identifier] = load_file(path)
|
self.codes[identifier] = load_file(path, logger)
|
||||||
elif action == 'deleted':
|
elif action == 'deleted':
|
||||||
debug("deleting config file: %s" % identifier, 'red')
|
debug("deleting config file: %s" % identifier, 'red')
|
||||||
del self.codes[identifier]
|
del self.codes[identifier]
|
||||||
|
|
|
@ -105,7 +105,7 @@ __re_special_line = re.compile(r"^([ \t]*)(@|%)(.*)$", re.MULTILINE)
|
||||||
__re_affectation = re.compile(r"([a-zA-Z_][a-zA-Z_0-9]*)[ \t]*=")
|
__re_affectation = re.compile(r"([a-zA-Z_][a-zA-Z_0-9]*)[ \t]*=")
|
||||||
__re_space_sep = re.compile(r"([^ \t]*)[ \t]+=?(.*)")
|
__re_space_sep = re.compile(r"([^ \t]*)[ \t]+=?(.*)")
|
||||||
|
|
||||||
def compileSource(source, filename=""):
|
def compileSource(source, filename="", logger = None):
|
||||||
'''Compile un script'''
|
'''Compile un script'''
|
||||||
# On commence par remplacer les lignes de la forme
|
# On commence par remplacer les lignes de la forme
|
||||||
# @xxx par out("xxx")
|
# @xxx par out("xxx")
|
||||||
|
@ -144,12 +144,14 @@ def compileSource(source, filename=""):
|
||||||
newsource.write(m.group(2))
|
newsource.write(m.group(2))
|
||||||
newsource.write("))\n")
|
newsource.write("))\n")
|
||||||
newsource.write(source[start:])
|
newsource.write(source[start:])
|
||||||
|
if logger:
|
||||||
|
logger.info(newsource.getvalue())
|
||||||
return compile(newsource.getvalue(), filename, "exec")
|
return compile(newsource.getvalue(), filename, "exec")
|
||||||
|
|
||||||
def generate(code, environment=None):
|
def generate(code, environment=None, logger = None):
|
||||||
'''Évalue un script'''
|
'''Évalue un script'''
|
||||||
if type(code) == str:
|
if type(code) == str:
|
||||||
code = compileSource(code)
|
code = compileSource(code, logger = logger)
|
||||||
if not environment:
|
if not environment:
|
||||||
environment = Environment()
|
environment = Environment()
|
||||||
environment.stream = StringIO()
|
environment.stream = StringIO()
|
||||||
|
@ -165,7 +167,7 @@ def generate(code, environment=None):
|
||||||
sys.stdout = save_stdout
|
sys.stdout = save_stdout
|
||||||
return environment.stream.getvalue()
|
return environment.stream.getvalue()
|
||||||
|
|
||||||
def load(fname, cfname=None):
|
def load(fname, cfname=None, logger=None):
|
||||||
'''Charge un script et le compile, en créant/utilisant un fichier de
|
'''Charge un script et le compile, en créant/utilisant un fichier de
|
||||||
cache'''
|
cache'''
|
||||||
if not cfname:
|
if not cfname:
|
||||||
|
@ -173,7 +175,7 @@ def load(fname, cfname=None):
|
||||||
if os.path.exists(cfname) and os.stat(fname).st_mtime <= os.stat(cfname).st_mtime:
|
if os.path.exists(cfname) and os.stat(fname).st_mtime <= os.stat(cfname).st_mtime:
|
||||||
code = marshal.load(file(cfname))
|
code = marshal.load(file(cfname))
|
||||||
else:
|
else:
|
||||||
code = compileSource(file(fname).read(), fname)
|
code = compileSource(file(fname).read(), fname, logger)
|
||||||
cfile = open(cfname, "w")
|
cfile = open(cfname, "w")
|
||||||
marshal.dump(code, cfile)
|
marshal.dump(code, cfile)
|
||||||
cfile.close()
|
cfile.close()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue