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
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):
- if isinstance(alumno, Alumno):
+ if isinstance(alumno, AlumnoInscripto):
kw['alumno'] = alumno
else:
kw['alumnoID'] = alumno
return Miembro(grupo=self, **kw)
def remove_miembro(self, alumno):
- if isinstance(alumno, Alumno):
+ 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):
- if isinstance(docente, Docente):
+ if isinstance(docente, DocenteInscripto):
kw['docente'] = docente
else:
kw['docenteID'] = docente
return Tutor(grupo=self, **kw)
def remove_tutor(self, docente):
- if isinstance(docente, Alumno):
+ if isinstance(docente, DocenteInscripto):
Tutor.pk.get(grupo=self, docente=docente).destroySelf()
else:
Tutor.pk.get(grupo=self, docenteID=docente).destroySelf()
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)