X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/6117732b761e9226bcf5c99de1ead2e12f145e28..0614cb0f3a4de38c68d61a090ef4820f19ff72e2:/sercom/model.py?ds=inline diff --git a/sercom/model.py b/sercom/model.py index 46fa8b9..b2bc3a2 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -143,7 +143,7 @@ class Curso(SQLObject): #{{{ 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() @@ -159,9 +159,10 @@ class Curso(SQLObject): #{{{ def remove_docente(self, docente): if isinstance(docente, Docente): - DocenteInscripto.pk.get(curso=self, docente=docente).destroySelf() - else: - DocenteInscripto.pk.get(curso=self, docenteID=docente).destroySelf() + 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): if isinstance(alumno, Alumno): @@ -172,15 +173,16 @@ class Curso(SQLObject): #{{{ def remove_alumno(self, alumno): if isinstance(alumno, Alumno): - AlumnoInscripto.pk.get(curso=self, alumno=alumno).destroySelf() - else: - AlumnoInscripto.pk.get(curso=self, alumnoID=alumno).destroySelf() + 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): if isinstance(enunciado, Enunciado): @@ -190,7 +192,8 @@ class Curso(SQLObject): #{{{ 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, ' \ @@ -330,15 +333,15 @@ class Alumno(Usuario): #{{{ 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 @@ -400,22 +403,22 @@ CREATE TABLE dependencia ( 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) @@ -488,7 +491,7 @@ CREATE TABLE enunciado_tarea ( 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 @@ -513,11 +516,11 @@ class CasoDePrueba(SQLObject): #{{{ 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') @@ -543,17 +546,17 @@ class Ejercicio(SQLObject): #{{{ 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 @@ -565,8 +568,6 @@ CREATE TABLE instancia_tarea ( # 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) @@ -624,8 +625,8 @@ CREATE TABLE instancia_tarea ( 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) @@ -673,11 +674,11 @@ class Entregador(InheritableSQLObject): #{{{ 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') @@ -703,27 +704,27 @@ class Grupo(Entregador): #{{{ 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() @@ -741,12 +742,12 @@ class Grupo(Entregador): #{{{ 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') @@ -766,8 +767,8 @@ class AlumnoInscripto(Entregador): #{{{ 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) @@ -784,8 +785,8 @@ class Tutor(SQLObject): #{{{ 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) @@ -803,8 +804,8 @@ class Miembro(SQLObject): #{{{ 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 @@ -848,17 +849,20 @@ class Entrega(SQLObject): #{{{ 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, ' \ @@ -868,13 +872,15 @@ class Correccion(SQLObject): #{{{ 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) @@ -900,8 +906,8 @@ class TareaEjecutada(InheritableSQLObject): #{{{ 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)