# Módulos externos
import sqlobject
+log = None
+
def get_logger(tipo):
- log = None
+ global log
for log_conf in ('log.ini', os.path.expanduser('~/.sercom/log.ini'), '/etc/sercom/log.ini'):
if (os.access(log_conf, os.R_OK)):
logging.config.fileConfig(log_conf)
log = logging.getLogger(tipo)
return log
+def log_exception(type, value, tb):
+ import traceback
+ e = traceback.format_exception(type, value, tb)
+ log.critical('Hubo una excepcion!\n%s', ''.join(e))
+
def init(tipo):
+ global log
# Seteo locale
locale.setlocale(locale.LC_ALL, '')
# Obtengo configuración
conf = ConfigParser.SafeConfigParser()
if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
- sys.stderr.write('No se pudo obtener configuración!\n')
+ print >>sys.stderr, 'No se pudo obtener configuración!'
sys.exit(1)
# Seteo umask para que el grupo pueda leer
os.umask(00027)
# Conexión a la DB
- conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
+ conn = sqlobject.connectionForURI(conf.get('dbo', 'database')
+ + '?timeout=5000') # Si está lockeada espera 5seg antes de tirar error
# Cargo config del logger
log = get_logger(tipo)
if not log:
print >>sys.stderr, 'No se pudo cargar archivo de configuración de log.'
sys.exit(1)
+ # Cambio el manejador de excepciones por uno que loguee
+ sys.excepthook = log_exception
# Devuelvo cosas interesantes
return (conf, conn, log)