73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""Fournit quelques outils pour le plugin Python"""
|
|
|
|
import os
|
|
import logging
|
|
import cStringIO
|
|
import traceback
|
|
|
|
LOGGER = logging.getLogger('Bcfg2.Plugins.Python')
|
|
|
|
COLOR_CODE = {
|
|
'grey': 30,
|
|
'red': 31,
|
|
'green': 32,
|
|
'yellow': 33,
|
|
'blue': 34,
|
|
'purple': 35,
|
|
'cyan': 36,
|
|
}
|
|
|
|
BCFG2_DEBUG = os.getenv("BCFG2_DEBUG")
|
|
BCFG2_DEBUG_COLOR = os.getenv("BCFG2_DEBUG_COLOR")
|
|
|
|
def debug(message, logger, color=None):
|
|
"""Stocke dans un logger les messages de debug"""
|
|
if not BCFG2_DEBUG:
|
|
return
|
|
|
|
if BCFG2_DEBUG_COLOR and color:
|
|
logger.info("\033[1;%dm%s\033[0m" % (COLOR_CODE[color], message))
|
|
else:
|
|
logger.info(message)
|
|
|
|
def log_traceback(fname, section, exn, logger):
|
|
"""En cas de traceback, on le loggue sans faire planter
|
|
le serveur bcfg2"""
|
|
logger.error('Python %s error: %s: %s: %s' % (section, fname, str(exn.__class__).split('.', 2)[1], str(exn)))
|
|
|
|
stream = cStringIO.StringIO()
|
|
traceback.print_exc(file=stream)
|
|
|
|
for line in stream.getvalue().splitlines():
|
|
logger.error('Python %s error: -> %s' % (section, line))
|
|
|
|
class PythonIncludePaths(object):
|
|
"""C'est un objet qui stocke les dossier d'inclusion python"""
|
|
includes = []
|
|
|
|
@classmethod
|
|
def get(cls, index, default):
|
|
"""Retourne includes[index] ou default"""
|
|
if len(cls.includes) > index:
|
|
return cls.includes[index]
|
|
return default
|
|
|
|
@classmethod
|
|
def append(cls, value):
|
|
"""Ajoute une valeur à la liste"""
|
|
cls.includes.append(value)
|
|
|
|
@classmethod
|
|
def remove(cls, value):
|
|
"""Retire une valeur à la liste"""
|
|
if value in cls.includes:
|
|
cls.includes.remove(value)
|
|
|
|
@classmethod
|
|
def pop(cls, index):
|
|
"""Vire un index si existant"""
|
|
if len(cls.includes) > index:
|
|
return cls.includes.pop(index)
|
|
|