]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/model.py
Bugfix: aparentemente cambió el módulo pwd y ahora get() es getpwuid().
[software/sercom.git] / sercom / model.py
index 3442a19735b72fd734a9c71dd5563c2b445a1faf..b9fddbb5aa9e23de23735b7d74756c8c307798dc 100644 (file)
@@ -41,7 +41,7 @@ class TupleValidator(PickleValidator):
 
 class SOTupleCol(SOPickleCol):
     def createValidators(self):
 
 class SOTupleCol(SOPickleCol):
     def createValidators(self):
-        return [TupleValidator(name=self.name)]
+        return [TupleValidator(name=self.name, pickleProtocol=self.pickleProtocol)]
 
 class TupleCol(PickleCol):
     baseClass = SOTupleCol
 
 class TupleCol(PickleCol):
     baseClass = SOTupleCol
@@ -155,7 +155,8 @@ class Curso(SQLObject): #{{{
 
 class Usuario(InheritableSQLObject): #{{{
     # Clave (para docentes puede ser un nombre de usuario arbitrario)
 
 class Usuario(InheritableSQLObject): #{{{
     # Clave (para docentes puede ser un nombre de usuario arbitrario)
-    usuario         = UnicodeCol(length=10, alternateID=True)
+    usuario         = UnicodeCol(length=10, alternateID=True,
+                        alternateMethodName='by_usuario')
     # Campos
     contrasenia     = UnicodeCol(length=255, default=None)
     nombre          = UnicodeCol(length=255, notNone=True)
     # Campos
     contrasenia     = UnicodeCol(length=255, default=None)
     nombre          = UnicodeCol(length=255, notNone=True)
@@ -187,6 +188,10 @@ class Usuario(InheritableSQLObject): #{{{
     def _get_user_name(self): # para identity
         return self.usuario
 
     def _get_user_name(self): # para identity
         return self.usuario
 
+    @classmethod
+    def byUsuario(cls, usuario): # TODO eliminar, backward compat
+        return cls.by_usuario(usuario)
+
     @classmethod
     def by_user_name(cls, user_name): # para identity
         user = cls.byUsuario(user_name)
     @classmethod
     def by_user_name(cls, user_name): # para identity
         user = cls.byUsuario(user_name)
@@ -221,10 +226,10 @@ class Usuario(InheritableSQLObject): #{{{
 class Docente(Usuario): #{{{
     _inheritable = False
     # Campos
 class Docente(Usuario): #{{{
     _inheritable = False
     # Campos
-    nombrado    = BoolCol(notNone=True, default=True)
+    nombrado        = BoolCol(notNone=True, default=True)
     # Joins
     # Joins
-    enunciados  = MultipleJoin('Enunciado', joinColumn='autor_id')
-    cursos      = MultipleJoin('DocenteInscripto')
+    enunciados      = MultipleJoin('Enunciado', joinColumn='autor_id')
+    inscripciones   = MultipleJoin('DocenteInscripto')
 
     def add_entrega(self, instancia, **kw):
         return Entrega(instancia=instancia, **kw)
 
     def add_entrega(self, instancia, **kw):
         return Entrega(instancia=instancia, **kw)
@@ -266,9 +271,13 @@ class Alumno(Usuario): #{{{
         self.usuario = padron
 
     @classmethod
         self.usuario = padron
 
     @classmethod
-    def byPadron(cls, padron):
+    def byPadron(cls, padron): # TODO eliminar, backward compat
         return cls.byUsuario(unicode(padron))
 
         return cls.byUsuario(unicode(padron))
 
+    @classmethod
+    def by_padron(cls, padron):
+        return cls.by_usuario(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)' \
     def __repr__(self):
         return 'Alumno(id=%s, padron=%s, nombre=%s, password=%s, email=%s, ' \
             'telefono=%s, activo=%s, creado=%s, observaciones=%s)' \
@@ -430,9 +439,7 @@ class Enunciado(SQLObject): #{{{
     descripcion     = UnicodeCol(length=255, default=None)
     autor           = ForeignKey('Docente', cascade='null')
     creado          = DateTimeCol(notNone=True, default=DateTimeCol.now)
     descripcion     = UnicodeCol(length=255, default=None)
     autor           = ForeignKey('Docente', cascade='null')
     creado          = DateTimeCol(notNone=True, default=DateTimeCol.now)
-    archivo         = BLOBCol(default=None)
-    archivo_name    = UnicodeCol(length=255, default=None)
-    archivo_type    = UnicodeCol(length=255, default=None)
+    archivos        = BLOBCol(default=None)
     # Joins
     ejercicios      = MultipleJoin('Ejercicio')
     casos_de_prueba = MultipleJoin('CasoDePrueba')
     # Joins
     ejercicios      = MultipleJoin('Ejercicio')
     casos_de_prueba = MultipleJoin('CasoDePrueba')
@@ -526,7 +533,7 @@ class InstanciaDeEntrega(SQLObject): #{{{
     fin             = DateTimeCol(notNone=True)
     inicio_proceso  = DateTimeCol(default=None)
     fin_proceso     = DateTimeCol(default=None)
     fin             = DateTimeCol(notNone=True)
     inicio_proceso  = DateTimeCol(default=None)
     fin_proceso     = DateTimeCol(default=None)
-    observaciones   = UnicodeCol(default=None)
+    observaciones   = UnicodeCol(notNone=True, default=u'')
     activo          = BoolCol(notNone=True, default=True)
     # Joins
     entregas        = MultipleJoin('Entrega', joinColumn='instancia_id')
     activo          = BoolCol(notNone=True, default=True)
     # Joins
     entregas        = MultipleJoin('Entrega', joinColumn='instancia_id')
@@ -634,7 +641,16 @@ class Grupo(Entregador): #{{{
     def add_miembro(self, alumno, **kw):
         if isinstance(alumno, AlumnoInscripto):
             alumno = alumno.id
     def add_miembro(self, alumno, **kw):
         if isinstance(alumno, AlumnoInscripto):
             alumno = alumno.id
-        return Miembro(grupo=self, alumnoID=alumno, **kw)
+        # FIXME acá habría que sacarle la unicidad a Miembro.pk para que
+        # un alumno pueda ser miembro varias veces del mismo grupo, de
+        # manera de tener la historia completa, pero hay que tener cuidad
+        # y arreglar todos los lugares donde se asume esa unicidad
+        try:
+            m = Miembro.selectBy(grupo=self, alumnoID=alumno).getOne()
+            m.baja = None # si ya existía, le sacamos la fecha de baja
+            return m
+        except SQLObjectNotFound: # creo uno nuevo
+            return Miembro(grupo=self, alumnoID=alumno, **kw)
 
     def remove_miembro(self, alumno):
         if isinstance(alumno, AlumnoInscripto):
 
     def remove_miembro(self, alumno):
         if isinstance(alumno, AlumnoInscripto):
@@ -645,7 +661,13 @@ class Grupo(Entregador): #{{{
     def add_tutor(self, docente, **kw):
         if isinstance(docente, DocenteInscripto):
             docente = docente.id
     def add_tutor(self, docente, **kw):
         if isinstance(docente, DocenteInscripto):
             docente = docente.id
-        return Tutor(grupo=self, docenteID=docente, **kw)
+        # FIXME ídem add_miembro()
+        try:
+            t = Tutor.selectBy(grupo=self, docenteID=docente).getOne()
+            t.baja = None # si ya existía, le sacamos la fecha de baja
+            return t
+        except SQLObjectNotFound: # creo uno nuevo
+            return Tutor(grupo=self, docenteID=docente, **kw)
 
     def remove_tutor(self, docente):
         if isinstance(docente, DocenteInscripto):
 
     def remove_tutor(self, docente):
         if isinstance(docente, DocenteInscripto):
@@ -862,11 +884,11 @@ class ComandoPruebaEjecutado(ComandoEjecutado): #{{{
 
     def __repr__(self):
         return super(ComandoPruebaEjecutado, self).__repr__(
 
     def __repr__(self):
         return super(ComandoPruebaEjecutado, self).__repr__(
-            'comando=%s, entrega=%s' % (self.comando.shortrepr(),
-                self.entrega.shortrepr()))
+            'comando=%s, prueba=%s' % (self.comando.shortrepr(),
+                self.prueba.shortrepr()))
 
     def shortrepr(self):
 
     def shortrepr(self):
-        return '%s:%s:%s' % (self.tarea.shortrepr(), self.entrega.shortrepr(),
+        return '%s:%s:%s' % (self.tarea.shortrepr(), self.prueba.shortrepr(),
             self.caso_de_prueba.shortrepr())
 #}}}
 
             self.caso_de_prueba.shortrepr())
 #}}}
 
@@ -930,7 +952,7 @@ class Rol(SQLObject): #{{{
     # Campos
     descripcion = UnicodeCol(length=255, default=None)
     creado      = DateTimeCol(notNone=True, default=datetime.now)
     # Campos
     descripcion = UnicodeCol(length=255, default=None)
     creado      = DateTimeCol(notNone=True, default=datetime.now)
-    permisos    = TupleCol(notNone=True)
+    permisos    = TupleCol(notNone=True, length=2**16)
     # Joins
     usuarios    = RelatedJoin('Usuario', addRemoveName='_usuario')
 
     # Joins
     usuarios    = RelatedJoin('Usuario', addRemoveName='_usuario')