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 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)
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)
class Docente(Usuario): #{{{
_inheritable = False
# Campos
- nombrado = BoolCol(notNone=True, default=True)
+ nombrado = BoolCol(notNone=True, default=True)
# 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)
self.usuario = padron
@classmethod
- def byPadron(cls, padron):
+ def byPadron(cls, padron): # TODO eliminar, backward compat
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)' \
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')
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')
docente = docente.id
# FIXME ídem add_miembro()
try:
- t = Tutor.selectBy(grupo=self, docenteID=alumno).getOne()
+ 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
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):
- 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())
#}}}
# 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')