]> git.llucax.com Git - software/sercom-old.git/blob - src/sercom/util.py
Se agrega un manejador de excepciones que loguea.
[software/sercom-old.git] / src / sercom / util.py
1 # -*- encoding: iso-8859-1 -*-
2 # vim: set et sw=4 sts=4 :
3
4 # Módulos estándar
5 import os
6 import sys
7 import locale
8 import logging
9 import logging.config
10 import ConfigParser
11 # Módulos externos
12 import sqlobject
13
14 log = None
15
16 def get_logger(tipo):
17     global log
18     for log_conf in ('log.ini', os.path.expanduser('~/.sercom/log.ini'), '/etc/sercom/log.ini'):
19         if (os.access(log_conf, os.R_OK)):
20             logging.config.fileConfig(log_conf)
21             log = logging.getLogger(tipo)
22     return log
23
24 def log_exception(type, value, tb):
25     import traceback
26     e = traceback.format_exception(type, value, tb)
27     log.critical('Hubo una excepcion!\n%s', ''.join(e))
28
29 def init(tipo):
30     global log
31     # Seteo locale
32     locale.setlocale(locale.LC_ALL, '')
33     # Obtengo configuración
34     conf = ConfigParser.SafeConfigParser()
35     if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
36         print >>sys.stderr, 'No se pudo obtener configuración!'
37         sys.exit(1)
38     # Seteo umask para que el grupo pueda leer
39     os.umask(00027)
40     # Conexión a la DB
41     conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
42     # Cargo config del logger
43     log = get_logger(tipo)
44     if not log:
45         print >>sys.stderr, 'No se pudo cargar archivo de configuración de log.'
46         sys.exit(1)
47     # Cambio el manejador de excepciones por uno que loguee
48     sys.excepthook = log_exception
49     # Devuelvo cosas interesantes
50     return (conf, conn, log)
51