for e in Ejercicio.selectBy(curso=self):
e.destroySelf()
for (n, e) in enumerate(ejercicios):
- self.add_ejercicio(n, e)
+ self.add_ejercicio(n+1, e)
if alumnos is not None:
for a in AlumnoInscripto.selectBy(curso=self):
a.destroySelf()
self.add_alumno(a)
def add_docente(self, docente, **kw):
- return DocenteInscripto(curso=self, docente=docente, **kw)
+ if isinstance(docente, Docente):
+ kw['docente'] = docente
+ else:
+ kw['docenteID'] = docente
+ return DocenteInscripto(curso=self, **kw)
def remove_docente(self, docente):
- DocenteInscripto.pk.get(curso=self, docente=docente).destroySelf()
+ if isinstance(docente, Docente):
+ docente = docente.id
+ # FIXME esto deberian arreglarlo en SQLObject y debería ser
+ # DocenteInscripto.pk.get(self, docente).destroySelf()
+ DocenteInscripto.pk.get(self.id, docente).destroySelf()
def add_alumno(self, alumno, **kw):
- return AlumnoInscripto(curso=self, alumno=alumno, **kw)
+ if isinstance(alumno, Alumno):
+ kw['alumno'] = alumno
+ else:
+ kw['alumnoID'] = alumno
+ return AlumnoInscripto(curso=self, **kw)
def remove_alumno(self, alumno):
- AlumnoInscripto.pk.get(curso=self, alumno=alumno).destroySelf()
+ if isinstance(alumno, Alumno):
+ alumno = alumno.id
+ # FIXME esto deberian arreglarlo en SQLObject
+ AlumnoInscripto.pk.get(self.id, alumno).destroySelf()
def add_grupo(self, nombre, **kw):
return Grupo(curso=self, nombre=unicode(nombre), **kw)
def remove_grupo(self, nombre):
- Grupo.pk.get(curso=self, nombre=nombre).destroySelf()
+ # FIXME esto deberian arreglarlo en SQLObject
+ Grupo.pk.get(self.id, nombre).destroySelf()
def add_ejercicio(self, numero, enunciado, **kw):
- return Ejercicio(curso=self, numero=numero, enunciado=enunciado, **kw)
+ if isinstance(enunciado, Enunciado):
+ kw['enunciado'] = enunciado
+ else:
+ kw['enunciadoID'] = enunciado
+ return Ejercicio(curso=self, numero=numero, **kw)
def remove_ejercicio(self, numero):
- Ejercicio.pk.get(curso=self, numero=numero).destroySelf()
+ # FIXME esto deberian arreglarlo en SQLObject
+ Ejercicio.pk.get(self.id, numero).destroySelf()
def __repr__(self):
return 'Curso(id=%s, anio=%s, cuatrimestre=%s, numero=%s, ' \
def _set_padron(self, padron):
self.usuario = padron
+ @classmethod
+ def byPadron(cls, padron):
+ return cls.byUsuario(unicode(padron))
+
def __repr__(self):
return 'Alumno(id=%s, padron=%s, nombre=%s, password=%s, email=%s, ' \
'telefono=%s, activo=%s, creado=%s, observaciones=%s)' \
class Tarea(InheritableSQLObject): #{{{
class sqlmeta:
- createSQL = r'''
+ createSQL = dict(sqlite=r'''
CREATE TABLE dependencia (
padre_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
- REFERENCES tarea(id),
+ REFERENCES tarea(id) ON DELETE CASCADE,
hijo_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
- REFERENCES tarea(id),
+ REFERENCES tarea(id) ON DELETE CASCADE,
orden INT,
PRIMARY KEY (padre_id, hijo_id)
-)'''
+)''')
# Clave
nombre = UnicodeCol(length=30, alternateID=True)
# Campos
class Enunciado(SQLObject): #{{{
class sqlmeta:
- createSQL = r'''
+ createSQL = dict(sqlite=r'''
CREATE TABLE enunciado_tarea (
enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists
- REFERENCES enunciado(id),
+ REFERENCES enunciado(id) ON DELETE CASCADE,
tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
- REFERENCES tarea(id),
+ REFERENCES tarea(id) ON DELETE CASCADE,
orden INT,
PRIMARY KEY (enunciado_id, tarea_id)
-)'''
+)''')
# Clave
nombre = UnicodeCol(length=60)
anio = IntCol(notNone=True)
cuatrimestre = IntCol(notNone=True)
pk = DatabaseIndex(nombre, anio, cuatrimestre, unique=True)
# Campos
- autor = ForeignKey('Docente')
+ autor = ForeignKey('Docente', cascade='null')
descripcion = UnicodeCol(length=255, default=None)
creado = DateTimeCol(notNone=True, default=DateTimeCol.now)
archivo = BLOBCol(default=None)
class CasoDePrueba(SQLObject): #{{{
# Clave
- enunciado = ForeignKey('Enunciado')
+ enunciado = ForeignKey('Enunciado', cascade=True)
nombre = UnicodeCol(length=40, notNone=True)
pk = DatabaseIndex(enunciado, nombre, unique=True)
# Campos
class Ejercicio(SQLObject): #{{{
# Clave
- curso = ForeignKey('Curso', notNone=True)
+ curso = ForeignKey('Curso', notNone=True, cascade=True)
numero = IntCol(notNone=True)
pk = DatabaseIndex(curso, numero, unique=True)
# Campos
- enunciado = ForeignKey('Enunciado', notNone=True)
+ enunciado = ForeignKey('Enunciado', notNone=True, cascade=False)
grupal = BoolCol(notNone=True, default=False)
# Joins
instancias = MultipleJoin('InstanciaDeEntrega')
class InstanciaDeEntrega(SQLObject): #{{{
class sqlmeta:
- createSQL = r'''
+ createSQL = dict(sqlite=r'''
CREATE TABLE instancia_tarea (
instancia_id INTEGER NOT NULL CONSTRAINT instancia_id_exists
- REFERENCES instancia_de_entrega(id),
+ REFERENCES instancia_de_entrega(id) ON DELETE CASCADE,
tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
- REFERENCES tarea(id),
+ REFERENCES tarea(id) ON DELETE CASCADE,
orden INT,
PRIMARY KEY (instancia_id, tarea_id)
-)'''
+)''')
# Clave
- ejercicio = ForeignKey('Ejercicio', notNone=True)
+ ejercicio = ForeignKey('Ejercicio', notNone=True, cascade=True)
numero = IntCol(notNone=True)
pk = DatabaseIndex(ejercicio, numero, unique=True)
# Campos
# Joins
entregas = MultipleJoin('Entrega', joinColumn='instancia_id')
correcciones = MultipleJoin('Correccion', joinColumn='instancia_id')
- casos_de_prueba = RelatedJoin('CasoDePrueba', # TODO CasoInstancia -> private
- addRemoveName='_caso_de_prueba')
def __init__(self, tareas=(), **kw):
super(InstanciaDeEntrega, self).__init__(**kw)
class DocenteInscripto(SQLObject): #{{{
# Clave
- curso = ForeignKey('Curso', notNone=True)
- docente = ForeignKey('Docente', notNone=True)
+ curso = ForeignKey('Curso', notNone=True, cascade=True)
+ docente = ForeignKey('Docente', notNone=True, cascade=True)
pk = DatabaseIndex(curso, docente, unique=True)
# Campos
corrige = BoolCol(notNone=True, default=True)
class Grupo(Entregador): #{{{
_inheritable = False
# Clave
- curso = ForeignKey('Curso', notNone=True)
+ curso = ForeignKey('Curso', notNone=True, cascade=True)
nombre = UnicodeCol(length=20, notNone=True)
pk = DatabaseIndex(curso, nombre, unique=True)
# Campos
- responsable = ForeignKey('AlumnoInscripto', default=None)
+ responsable = ForeignKey('AlumnoInscripto', default=None, cascade='null')
# Joins
miembros = MultipleJoin('Miembro')
tutores = MultipleJoin('Tutor')
self.add_tutor(t)
def add_miembro(self, alumno, **kw):
- return Miembro(grupo=self, alumno=alumno, **kw)
+ if isinstance(alumno, AlumnoInscripto):
+ kw['alumno'] = alumno
+ else:
+ kw['alumnoID'] = alumno
+ return Miembro(grupo=self, **kw)
def remove_miembro(self, alumno):
- Miembro.pk.get(grupo=self, alumno=alumno).destroySelf()
+ if isinstance(alumno, AlumnoInscripto):
+ Miembro.pk.get(grupo=self, alumno=alumno).destroySelf()
+ else:
+ Miembro.pk.get(grupo=self, alumnoID=alumno).destroySelf()
def add_tutor(self, docente, **kw):
- return Tutor(grupo=self, docente=docente, **kw)
+ if isinstance(docente, DocenteInscripto):
+ kw['docente'] = docente
+ else:
+ kw['docenteID'] = docente
+ return Tutor(grupo=self, **kw)
def remove_tutor(self, docente):
- Tutor.pk.get(grupo=self, docente=docente).destroySelf()
+ if isinstance(docente, DocenteInscripto):
+ Tutor.pk.get(grupo=self, docente=docente).destroySelf()
+ else:
+ Tutor.pk.get(grupo=self, docenteID=docente).destroySelf()
def __repr__(self):
return 'Grupo(id=%s, nombre=%s, responsable=%s, nota=%s, ' \
class AlumnoInscripto(Entregador): #{{{
_inheritable = False
# Clave
- curso = ForeignKey('Curso', notNone=True)
- alumno = ForeignKey('Alumno', notNone=True)
+ curso = ForeignKey('Curso', notNone=True, cascade=True)
+ alumno = ForeignKey('Alumno', notNone=True, cascade=True)
pk = DatabaseIndex(curso, alumno, unique=True)
# Campos
condicional = BoolCol(notNone=True, default=False)
- tutor = ForeignKey('DocenteInscripto', default=None)
+ tutor = ForeignKey('DocenteInscripto', default=None, cascade='null')
# Joins
responsabilidades = MultipleJoin('Grupo', joinColumn='responsable_id')
membresias = MultipleJoin('Miembro', joinColumn='alumno_id')
class Tutor(SQLObject): #{{{
# Clave
- grupo = ForeignKey('Grupo', notNone=True)
- docente = ForeignKey('DocenteInscripto', notNone=True)
+ grupo = ForeignKey('Grupo', notNone=True, cascade=True)
+ docente = ForeignKey('DocenteInscripto', notNone=True, cascade=True)
pk = DatabaseIndex(grupo, docente, unique=True)
# Campos
alta = DateTimeCol(notNone=True, default=DateTimeCol.now)
class Miembro(SQLObject): #{{{
# Clave
- grupo = ForeignKey('Grupo', notNone=True)
- alumno = ForeignKey('AlumnoInscripto', notNone=True)
+ grupo = ForeignKey('Grupo', notNone=True, cascade=True)
+ alumno = ForeignKey('AlumnoInscripto', notNone=True, cascade=True)
pk = DatabaseIndex(grupo, alumno, unique=True)
# Campos
nota = DecimalCol(size=3, precision=1, default=None)
class Entrega(SQLObject): #{{{
# Clave
- instancia = ForeignKey('InstanciaDeEntrega', notNone=True)
- entregador = ForeignKey('Entregador', default=None) # Si es None era un Docente
+ instancia = ForeignKey('InstanciaDeEntrega', notNone=True, cascade=False)
+ entregador = ForeignKey('Entregador', default=None, cascade=False) # Si es None era un Docente
fecha = DateTimeCol(notNone=True, default=DateTimeCol.now)
pk = DatabaseIndex(instancia, entregador, fecha, unique=True)
# Campos
class Correccion(SQLObject): #{{{
# Clave
- instancia = ForeignKey('InstanciaDeEntrega', notNone=True)
- entregador = ForeignKey('Entregador', notNone=True) # Docente no tiene
+ instancia = ForeignKey('InstanciaDeEntrega', notNone=True, cascade=False)
+ entregador = ForeignKey('Entregador', notNone=True, cascade=False) # Docente no tiene
pk = DatabaseIndex(instancia, entregador, unique=True)
# Campos
- entrega = ForeignKey('Entrega', notNone=True)
- corrector = ForeignKey('DocenteInscripto', notNone=True)
+ entrega = ForeignKey('Entrega', notNone=True, cascade=False)
+ corrector = ForeignKey('DocenteInscripto', default=None, cascade='null')
asignado = DateTimeCol(notNone=True, default=DateTimeCol.now)
corregido = DateTimeCol(default=None)
nota = DecimalCol(size=3, precision=1, default=None)
observaciones = UnicodeCol(default=None)
+ def _get_entregas(self):
+ return list(Entrega.selectBy(instancia=self.instancia, entregador=self.entregador))
+
def __repr__(self):
return 'Correccion(instancia=%s, entregador=%s, entrega=%s, ' \
'corrector=%s, asignado=%s, corregido=%s, nota=%s, ' \
self.corregido, self.nota, self.observaciones)
def shortrepr(self):
+ if not self.corrector:
+ return '%s' % self.entrega.shortrepr()
return '%s,%s' % (self.entrega.shortrepr(), self.corrector.shortrepr())
#}}}
class TareaEjecutada(InheritableSQLObject): #{{{
# Clave
- tarea = ForeignKey('Tarea', notNone=True)
- entrega = ForeignKey('Entrega', notNone=True)
+ tarea = ForeignKey('Tarea', notNone=True, cascade=False)
+ entrega = ForeignKey('Entrega', notNone=True, cascade=False)
pk = DatabaseIndex(tarea, entrega, unique=True)
# Campos
inicio = DateTimeCol(notNone=True, default=DateTimeCol.now)
class Prueba(SQLObject): #{{{
# Clave
- tarea_ejecutada = ForeignKey('TareaEjecutada', notNone=True)
- caso_de_prueba = ForeignKey('CasoDePrueba', notNone=True)
+ tarea_ejecutada = ForeignKey('TareaEjecutada', notNone=True, cascade=False)
+ caso_de_prueba = ForeignKey('CasoDePrueba', notNone=True, cascade=False)
pk = DatabaseIndex(tarea_ejecutada, caso_de_prueba, unique=True)
# Campos
inicio = DateTimeCol(notNone=True, default=DateTimeCol.now)