]> git.llucax.com Git - software/sercom-old.git/blobdiff - src/sc_dbq
Se mejora el logue de errores en el proceso fork()eado.
[software/sercom-old.git] / src / sc_dbq
index e105f1f62c5d27b6501a16f18945e9356dc61a9b..2b063345eb3d9a68d1937f21b86e787f24989a2b 100755 (executable)
@@ -5,12 +5,11 @@
 # Módulos estándar
 import os
 import sys
 # Módulos estándar
 import os
 import sys
-import locale
-import ConfigParser
 # Módulos externos
 import sqlobject
 # Módulos locales
 # Módulos externos
 import sqlobject
 # Módulos locales
-from sercom.dbo import *
+import sercom
+from sercom.sqlo import *
 
 def ayuda():
     return '''Uso:
 
 def ayuda():
     return '''Uso:
@@ -21,28 +20,33 @@ def args2dict(l, conn):
     for arg in l:
         key, val = arg.split('=')
         if val == 'None': val = None
     for arg in l:
         key, val = arg.split('=')
         if val == 'None': val = None
+        elif val == 'True': val = True
+        elif val == 'False': val = False
+        elif val.isdigit():
+            val = int(val)
+        else:
+            try:
+                val = float(val)
+            except ValueError: pass
         d[key] = val
     return d
 
         d[key] = val
     return d
 
-if len(sys.argv) < 3:
-    print >>sys.stderr, 'Faltan argumentos!'
-    print >>sys.stderr, ayuda()
-    sys.exit(1)
-
-# Seteo locale
-locale.setlocale(locale.LC_ALL, '')
+# Inicializo
+conf, conn, log = sercom.init('dbq')
 
 
-# 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')
+if len(sys.argv) < 3:
+    log.error('Faltan argumentos!')
+    log.error(ayuda())
     sys.exit(1)
 
     sys.exit(1)
 
-# Conexión a la DB
-conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
-
 # Argumentos interesantes
 obj = sys.argv[1]
 # Argumentos interesantes
 obj = sys.argv[1]
+try:
+    pos = obj.index('.')
+    attr = obj[pos+1:]
+    obj = obj[:pos]
+except:
+    attr = None
 cmd = sys.argv[2]
 oid = None
 args = sys.argv[3:]
 cmd = sys.argv[2]
 oid = None
 args = sys.argv[3:]
@@ -62,7 +66,14 @@ try:
         else:
             objs = eval(obj).select(connection=conn)
         for o in objs:
         else:
             objs = eval(obj).select(connection=conn)
         for o in objs:
-            print o
+            if attr is None:
+                print o
+            else:
+                print o
+                print attr + ':'
+                import pprint
+                attr = eval('o.' + attr)
+                pprint.pprint(attr)
     elif cmd in ('rm', 'remove', 'delete', 'del'):
         if oid is not None:
             objs = [eval(obj).get(oid, connection=conn)]
     elif cmd in ('rm', 'remove', 'delete', 'del'):
         if oid is not None:
             objs = [eval(obj).get(oid, connection=conn)]
@@ -86,14 +97,14 @@ try:
         o = eval(obj)(**args2dict(args, conn))
         print 'Agregado:', o
     else:
         o = eval(obj)(**args2dict(args, conn))
         print 'Agregado:', o
     else:
-        print >>sys.stderr, 'Comando incorrecto (%s)!' % cmd
-        print >>sys.stderr, ayuda()
+        log.error('Comando incorrecto (%s)!', cmd)
+        log.error(ayuda())
         sys.exit(2)
 except ValueError:
         sys.exit(2)
 except ValueError:
-    print >>sys.stderr, 'Argumento inválido!'
-    print >>sys.stderr, ayuda()
+    log.error('Argumento inválido!')
+    log.error(ayuda())
     sys.exit(3)
 except Exception, msg:
     sys.exit(3)
 except Exception, msg:
-    print >>sys.stderr, 'ERROR:', msg
+    log.exception(msg)
     sys.exit(100)
 
     sys.exit(100)