]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/sercom/util.py
Se ordenan las entregas rechazadas.
[software/sercom-old.git] / src / sercom / util.py
index 9736d6fe72f1fab3599637c8ed474bd9ac639b7c..359f6b368b50ab1d8f295e4b7b961d8715995ba3 100644 (file)
@@ -11,31 +11,42 @@ import ConfigParser
 # 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)