]> git.llucax.com Git - software/sercom-old.git/blob - src/sercom/util.py
Bugfix (se corrige bien el bug del from).
[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(00022)
40     # Conexión a la DB
41     conn = sqlobject.connectionForURI(conf.get('dbo', 'database')
42         + '?timeout=5000') # Si está lockeada espera 5seg antes de tirar error
43     # Cargo config del logger
44     log = get_logger(tipo)
45     if not log:
46         print >>sys.stderr, 'No se pudo cargar archivo de configuración de log.'
47         sys.exit(1)
48     # Cambio el manejador de excepciones por uno que loguee
49     sys.excepthook = log_exception
50     # Devuelvo cosas interesantes
51     return (conf, conn, log)
52