]> git.llucax.com Git - software/sercom-old.git/blob - util/importar.py
Se agrega script para importar DB del sistema de notas.
[software/sercom-old.git] / util / importar.py
1 #!/usr/bin/env python2.4
2 # -*- encoding: iso-8859-1 -*-
3 # vim: set et sw=4 sts=4 :
4
5 '''Script para importar datos de la DB del sistema de notas.
6
7 Este script permite importar fácilmente los alumnos inscriptos del sistema de
8 notas.
9
10 Uso:
11     ./importar.py [-h] [-q] [-d] [-c]
12
13 -h  Muestra este mensaje de ayuda
14 -q  Modo silencioso (no muestra salida)
15 -d  Modo debug (mucha salida)
16 -c  Modo commit (realiza realmente los cambios)
17
18 Por omisión no hace cambios en la DB a menos que se use la opción -c.
19
20 Hay que prestar particular atención a los cambios de cursos, porque
21 probablemente haya que mover archivos en el directorio de intentos si el
22 alumno en cuestión realizó alguno.
23 '''
24
25 #import sys
26 import sqlite, sys
27 from sercom.sqlo import Inscripto as Ins, connectionForURI
28
29 if '-h' in sys.argv:
30     print __doc__
31     sys.exit(0)
32 verbose = True
33 if '-q' in sys.argv: verbose = False
34 debug = False
35 if '-d' in sys.argv: debug = True
36 commit = False
37 if '-c' in sys.argv: commit = True
38
39 cuats = (
40     (200511, 1), # cuatrimestre en db origen, curso en db destino
41     (200512, 2), # cuatrimestre en db origen, curso en db destino
42 )
43
44 conn = connectionForURI('sqlite:///var/lib/sercom/corrector.sqlite')
45 con = sqlite.connect('taller.sqlite')
46 cur = con.cursor()
47 for cuat in cuats:
48     if verbose:
49         print 'Procesando cuatrimestre %d (curso %d)' % cuat
50     cur.execute('''SELECT padron, mail_alumno
51                    FROM alumno
52                    WHERE cuatrimestre=%d''', cuat[0])
53     curso = [i.padron for i in Ins.selectBy(cursoID=cuat[1], connection=conn)]
54     # Agrego o modifico existentes
55     if debug:
56         print 'Padrones en original:'
57         [sys.stdout.write(str(p[0])+'\n') for p in cur.fetchall()]
58         print 'Padrones en destino:'
59         [sys.stdout.write(str(p)+'\n') for p in curso]
60     for (padron, mail) in cur.fetchall():
61         if mail is None:
62             if debug:
63                 print 'Salteando', padron, 'porque tiene mail nulo.'
64             continue # Si no tiene mail, no está inscripto
65         if padron in curso: # Modifico
66             i = Ins.by(padron=padron, connection=conn)
67             if i.mail <> mail:
68                 if verbose:
69                     print 'Modificando padrón', padron, '- mail:', mail
70                 if commit:
71                     i.mail = mail
72             else:
73                 if debug:
74                     print 'Salteando', padron, 'porque no cambió el mail.'
75             curso.remove(padron)
76         else: # Agrego
77             if verbose:
78                 print 'Agregando padrón', padron, '- mail:', mail
79             if commit:
80                 Ins(padron=padron, mail=mail, cursoID=cuat[1], connection=conn)
81     # Borro los que no están más
82     for padron in curso:
83         if verbose:
84             print 'Borrando padrón', padron
85         if commit:
86             Ins.by(padron=padron, connection=conn).destroySelf()
87