From c6b56e0a25a47f75854a46dbcc9201988d7ee949 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Fri, 25 Mar 2005 19:56:40 +0000 Subject: [PATCH] Se agrega script para importar DB del sistema de notas. --- Makefile | 3 ++ util/importar.py | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100755 util/importar.py diff --git a/Makefile b/Makefile index 23bee77..0979241 100644 --- 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 index 0000000..ad5dded --- /dev/null +++ b/util/importar.py @@ -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() + -- 2.43.0