X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/blobdiff_plain/6cb5b3d60a0028c0bac4d4c9dc6447b0f241e4ac..deb04f7ef6b5147cc588f66e247b1327d1f10ffc:/sercom/model.py diff --git a/sercom/model.py b/sercom/model.py index 1b88848..a837ca4 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -151,28 +151,49 @@ class Curso(SQLObject): #{{{ 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, ' \ @@ -299,6 +320,10 @@ class Alumno(Usuario): #{{{ 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)' \ @@ -308,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 @@ -378,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) @@ -466,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 @@ -491,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') @@ -521,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 @@ -543,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) @@ -602,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) @@ -651,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') @@ -681,16 +704,30 @@ class Grupo(Entregador): #{{{ 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, ' \ @@ -705,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') @@ -730,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) @@ -748,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) @@ -767,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 @@ -812,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, ' \ @@ -832,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) @@ -864,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)