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