]> git.llucax.com Git - software/sercom-old.git/blob - src/sc_dbq
Bugfix: faltaba importar subprocess y typo
[software/sercom-old.git] / src / sc_dbq
1 #!/usr/bin/env python2.4
2 # -*- encoding: iso-8859-1 -*-
3 # vim: set et sw=4 sts=4 :
4
5 # Módulos estándar
6 import os
7 import sys
8 import locale
9 import ConfigParser
10 # Módulos externos
11 import sqlobject
12 # Módulos locales
13 from sercom.dbo import *
14
15 def ayuda():
16     return '''Uso:
17     %s objeto comando [opciones]''' % sys.argv[0]
18
19 def args2dict(l, conn):
20     d = {'connection': conn}
21     for arg in l:
22         key, val = arg.split('=')
23         d[key] = val
24     return d
25
26 if len(sys.argv) < 3:
27     print >>sys.stderr, 'Faltan argumentos!'
28     print >>sys.stderr, ayuda()
29     sys.exit(1)
30
31 # Seteo locale
32 locale.setlocale(locale.LC_ALL, '')
33
34 # Obtengo configuración
35 conf = ConfigParser.SafeConfigParser()
36 if not conf.read(('/etc/sercom/sercom.ini', os.path.expanduser('~/.sercom/sercom.ini'), 'sercom.ini')):
37     sys.stderr.write('No se pudo obtener configuración!\n')
38     sys.exit(1)
39
40 # Conexión a la DB
41 conn = sqlobject.connectionForURI(conf.get('dbo', 'database'))
42
43 # Argumentos interesantes
44 obj = sys.argv[1]
45 cmd = sys.argv[2]
46 oid = None
47 args = sys.argv[3:]
48 try:
49     if sys.argv[3].isdigit():
50         oid = int(sys.argv[3])
51         args = sys.argv[4:]
52 except: pass
53
54 # Proceso comandos
55 try:
56     if cmd in ('list', 'ls'):
57         if oid is not None:
58             objs = [eval(obj).get(oid, connection=conn)]
59         elif args:
60             objs = eval(obj).selectBy(**args2dict(args, conn))
61         else:
62             objs = eval(obj).select(connection=conn)
63         for o in objs:
64             print o
65     elif cmd in ('rm', 'remove', 'delete', 'del'):
66         if oid is not None:
67             objs = [eval(obj).get(oid, connection=conn)]
68         else:
69             objs = eval(obj).selectBy(args2dict(args, conn))
70         for o in objs:
71             print 'Borrando:', o
72             o.destroySelf()
73     elif cmd in ('set', 'update'):
74         if oid is not None:
75             objs = [eval(obj).get(oid, connection=conn)]
76         else:
77             where = args[:args.index('--')]
78             args = args[args.index('--')+1:]
79             objs = eval(obj).selectBy(**args2dict(where, conn))
80         for o in objs:
81             print 'Modificando:', o,
82             o.set(**args2dict(args))
83             print '->', o
84     elif cmd in ('add', 'new', 'insert'):
85         o = eval(obj)(**args2dict(args, conn))
86         print 'Agregado:', o
87     else:
88         print >>sys.stderr, 'Comando incorrecto (%s)!' % cmd
89         print >>sys.stderr, ayuda()
90         sys.exit(2)
91 except ValueError:
92     print >>sys.stderr, 'Argumento inválido!'
93     print >>sys.stderr, ayuda()
94     sys.exit(3)
95 except Exception, msg:
96     print >>sys.stderr, 'ERROR:', msg
97     sys.exit(100)
98