]> git.llucax.com Git - software/sercom-old.git/commitdiff
Se agrega script para importar DB del sistema de notas.
authorLeandro Lucarella <llucax@gmail.com>
Fri, 25 Mar 2005 19:56:40 +0000 (19:56 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 25 Mar 2005 19:56:40 +0000 (19:56 +0000)
Makefile
util/importar.py [new file with mode: 0755]

index 23bee77321a3279846af79e4891af4c27d03f184..09792411f15e65d5f8c25f6f74be92f44f371835 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,7 @@ PHPDBO    = $(wildcard src/T/DBO/*.php)
 PHPSCHEMA = $(wildcard src/T/DBO/schema/*.ini)
 DOCS      = doc/README $(wildcard doc/schema.*)
 EXAMPLES  = $(wildcard doc/examples/*)
+UTIL      = $(wildcard util/*.py)
 
 .PHONY: all install clean
 
@@ -26,6 +27,7 @@ install:
        $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/lib/cgi-bin
        $(INSTALL) -d -m 0755 $(DESTDIR)/etc/sercom
        $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/doc/sercom/examples
+       $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/sercom/util
        $(INSTALL) -d -m 0755 $(DESTDIR)$(PREFIX)/share/php/T/DBO/schema
        $(INSTALL) -d -m 2775 $(DESTDIR)$/var/lib/sercom/ejercicios
        $(INSTALL) -d -m 2775 $(DESTDIR)$/var/lib/sercom/intentos
@@ -40,6 +42,7 @@ install:
        $(INSTALL)    -m 0644 $(PHPSCHEMA) $(DESTDIR)$(PREFIX)/share/php/T/DBO/schema
        $(INSTALL)    -m 0644 $(DOCS)      $(DESTDIR)$(PREFIX)/share/doc/sercom
        $(INSTALL)    -m 0644 $(EXAMPLES)  $(DESTDIR)$(PREFIX)/share/doc/sercom/examples
+       $(INSTALL)    -m 0755 $(UTIL)      $(DESTDIR)$(PREFIX)/share/sercom/util
        # Bibliotecas en Python
        ./setup.py install --optimize 2 --root=$(DESTDIR) --prefix=$(PREFIX)
 
diff --git a/util/importar.py b/util/importar.py
new file mode 100755 (executable)
index 0000000..ad5dded
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/env python2.4
+# -*- encoding: iso-8859-1 -*-
+# vim: set et sw=4 sts=4 :
+
+'''Script para importar datos de la DB del sistema de notas.
+
+Este script permite importar fácilmente los alumnos inscriptos del sistema de
+notas.
+
+Uso:
+    ./importar.py [-h] [-q] [-d] [-c]
+
+-h  Muestra este mensaje de ayuda
+-q  Modo silencioso (no muestra salida)
+-d  Modo debug (mucha salida)
+-c  Modo commit (realiza realmente los cambios)
+
+Por omisión no hace cambios en la DB a menos que se use la opción -c.
+
+Hay que prestar particular atención a los cambios de cursos, porque
+probablemente haya que mover archivos en el directorio de intentos si el
+alumno en cuestión realizó alguno.
+'''
+
+#import sys
+import sqlite, sys
+from sercom.sqlo import Inscripto as Ins, connectionForURI
+
+if '-h' in sys.argv:
+    print __doc__
+    sys.exit(0)
+verbose = True
+if '-q' in sys.argv: verbose = False
+debug = False
+if '-d' in sys.argv: debug = True
+commit = False
+if '-c' in sys.argv: commit = True
+
+cuats = (
+    (200511, 1), # cuatrimestre en db origen, curso en db destino
+    (200512, 2), # cuatrimestre en db origen, curso en db destino
+)
+
+conn = connectionForURI('sqlite:///var/lib/sercom/corrector.sqlite')
+con = sqlite.connect('taller.sqlite')
+cur = con.cursor()
+for cuat in cuats:
+    if verbose:
+        print 'Procesando cuatrimestre %d (curso %d)' % cuat
+    cur.execute('''SELECT padron, mail_alumno
+                   FROM alumno
+                   WHERE cuatrimestre=%d''', cuat[0])
+    curso = [i.padron for i in Ins.selectBy(cursoID=cuat[1], connection=conn)]
+    # Agrego o modifico existentes
+    if debug:
+        print 'Padrones en original:'
+        [sys.stdout.write(str(p[0])+'\n') for p in cur.fetchall()]
+        print 'Padrones en destino:'
+        [sys.stdout.write(str(p)+'\n') for p in curso]
+    for (padron, mail) in cur.fetchall():
+        if mail is None:
+            if debug:
+                print 'Salteando', padron, 'porque tiene mail nulo.'
+            continue # Si no tiene mail, no está inscripto
+        if padron in curso: # Modifico
+            i = Ins.by(padron=padron, connection=conn)
+            if i.mail <> mail:
+                if verbose:
+                    print 'Modificando padrón', padron, '- mail:', mail
+                if commit:
+                    i.mail = mail
+            else:
+                if debug:
+                    print 'Salteando', padron, 'porque no cambió el mail.'
+            curso.remove(padron)
+        else: # Agrego
+            if verbose:
+                print 'Agregando padrón', padron, '- mail:', mail
+            if commit:
+                Ins(padron=padron, mail=mail, cursoID=cuat[1], connection=conn)
+    # Borro los que no están más
+    for padron in curso:
+        if verbose:
+            print 'Borrando padrón', padron
+        if commit:
+            Ins.by(padron=padron, connection=conn).destroySelf()
+