]> git.llucax.com Git - software/sercom-old.git/blob - src/sc_dbq
Faltó hacer el add del nuevo comando =(. Ahora ya manda mails =).
[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 # Módulos externos
9 import sqlobject
10 # Módulos locales
11 import sercom
12 from sercom.sqlo import *
13
14 def ayuda():
15     return '''Uso:
16     %s objeto comando [opciones]''' % sys.argv[0]
17
18 def args2dict(l, conn):
19     d = {'connection': conn}
20     for arg in l:
21         key, val = arg.split('=')
22         if val == 'None': val = None
23         if val == 'True': val = True
24         if val == 'False': val = False
25         d[key] = val
26     return d
27
28 # Inicializo
29 conf, conn, log = sercom.init('dbq')
30
31 if len(sys.argv) < 3:
32     log.error('Faltan argumentos!')
33     log.error(ayuda())
34     sys.exit(1)
35
36 # Argumentos interesantes
37 obj = sys.argv[1]
38 try:
39     pos = obj.index('.')
40     attr = obj[pos+1:]
41     obj = obj[:pos]
42 except:
43     attr = None
44 cmd = sys.argv[2]
45 oid = None
46 args = sys.argv[3:]
47 try:
48     if sys.argv[3].isdigit():
49         oid = int(sys.argv[3])
50         args = sys.argv[4:]
51 except: pass
52
53 # Proceso comandos
54 try:
55     if cmd in ('list', 'ls'):
56         if oid is not None:
57             objs = [eval(obj).get(oid, connection=conn)]
58         elif args:
59             objs = eval(obj).selectBy(**args2dict(args, conn))
60         else:
61             objs = eval(obj).select(connection=conn)
62         for o in objs:
63             if attr is None:
64                 print o
65             else:
66                 print o
67                 print attr + ':'
68                 import pprint
69                 attr = eval('o.' + attr)
70                 pprint.pprint(attr)
71     elif cmd in ('rm', 'remove', 'delete', 'del'):
72         if oid is not None:
73             objs = [eval(obj).get(oid, connection=conn)]
74         else:
75             objs = eval(obj).selectBy(args2dict(args, conn))
76         for o in objs:
77             print 'Borrando:', o
78             o.destroySelf()
79     elif cmd in ('set', 'update'):
80         if oid is not None:
81             objs = [eval(obj).get(oid, connection=conn)]
82         else:
83             where = args[:args.index('--')]
84             args = args[args.index('--')+1:]
85             objs = eval(obj).selectBy(**args2dict(where, conn))
86         for o in objs:
87             print 'Modificando:', o,
88             o.set(**args2dict(args, conn))
89             print '->', o
90     elif cmd in ('add', 'new', 'insert'):
91         o = eval(obj)(**args2dict(args, conn))
92         print 'Agregado:', o
93     else:
94         log.error('Comando incorrecto (%s)!', cmd)
95         log.error(ayuda())
96         sys.exit(2)
97 except ValueError:
98     log.error('Argumento inválido!')
99     log.error(ayuda())
100     sys.exit(3)
101 except Exception, msg:
102     log.exception(msg)
103     sys.exit(100)
104