class ParamsValidator(UnicodeStringValidator):
def to_python(self, value, state):
- if isinstance(value, basestring):
+ if isinstance(value, basestring) or value is None:
value = super(ParamsValidator, self).to_python(value, state)
try:
value = params_to_list(value)
def from_python(self, value, state):
if isinstance(value, (list, tuple)):
value = ' '.join([repr(p) for p in value])
- elif isinstance(value, basestring):
+ elif isinstance(value, basestring) or value is None:
value = super(ParamsValidator, self).to_python(value, state)
try:
params_to_list(value)
return obj
#}}}
-class ByObject(object): #{{{
- @classmethod
- def by(cls, **kw):
- try:
- return cls.selectBy(**kw)[0]
- except IndexError:
- raise SQLObjectNotFound, "The object %s with columns %s does not exist" % (cls.__name__, kw)
-#}}}
-
-class Curso(SQLObject, ByObject): #{{{
+class Curso(SQLObject): #{{{
# Clave
anio = IntCol(notNone=True)
cuatrimestre = IntCol(notNone=True)
% (self.anio, self.cuatrimestre, self.numero)
#}}}
-class Usuario(InheritableSQLObject, ByObject): #{{{
+class Usuario(InheritableSQLObject): #{{{
# Clave (para docentes puede ser un nombre de usuario arbitrario)
usuario = UnicodeCol(length=10, alternateID=True)
# Campos
self.telefono, self.activo, self.creado, self.observaciones)
#}}}
-class Tarea(InheritableSQLObject, ByObject): #{{{
+class Tarea(InheritableSQLObject): #{{{
+ class sqlmeta:
+ createSQL = r'''
+CREATE TABLE dependencia (
+ padre_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
+ REFERENCES tarea(id),
+ hijo_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
+ REFERENCES tarea(id),
+ orden INT,
+ PRIMARY KEY (padre_id, hijo_id)
+)'''
# Clave
nombre = UnicodeCol(length=30, alternateID=True)
# Campos
return self.nombre
#}}}
-class Enunciado(SQLObject, ByObject): #{{{
+class Enunciado(SQLObject): #{{{
+ class sqlmeta:
+ createSQL = r'''
+CREATE TABLE enunciado_tarea (
+ enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists
+ REFERENCES enunciado(id),
+ tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
+ REFERENCES tarea(id),
+ orden INT,
+ PRIMARY KEY (enunciado_id, tarea_id)
+)'''
# Clave
nombre = UnicodeCol(length=60)
anio = IntCol(notNone=True)
return '%s:%s' % (self.enunciado.shortrepr(), self.nombre)
#}}}
-class Ejercicio(SQLObject, ByObject): #{{{
+class Ejercicio(SQLObject): #{{{
# Clave
curso = ForeignKey('Curso', notNone=True)
numero = IntCol(notNone=True)
self.enunciado.shortrepr())
#}}}
-class InstanciaDeEntrega(SQLObject, ByObject): #{{{
+class InstanciaDeEntrega(SQLObject): #{{{
+ class sqlmeta:
+ createSQL = r'''
+CREATE TABLE instancia_tarea (
+ instancia_id INTEGER NOT NULL CONSTRAINT instancia_id_exists
+ REFERENCES instancia_de_entrega(id),
+ tarea_id INTEGER NOT NULL CONSTRAINT tarea_id_exists
+ REFERENCES tarea(id),
+ orden INT,
+ PRIMARY KEY (instancia_id, tarea_id)
+)'''
# Clave
ejercicio = ForeignKey('Ejercicio', notNone=True)
numero = IntCol(notNone=True)
return self.numero
#}}}
-class DocenteInscripto(SQLObject, ByObject): #{{{
+class DocenteInscripto(SQLObject): #{{{
# Clave
curso = ForeignKey('Curso', notNone=True)
docente = ForeignKey('Docente', notNone=True)
return self.docente.shortrepr()
#}}}
-class Entregador(InheritableSQLObject, ByObject): #{{{
+class Entregador(InheritableSQLObject): #{{{
# Campos
nota = DecimalCol(size=3, precision=1, default=None)
nota_cursada = DecimalCol(size=3, precision=1, default=None)
return self.alumno.shortrepr()
#}}}
-class Tutor(SQLObject, ByObject): #{{{
+class Tutor(SQLObject): #{{{
# Clave
grupo = ForeignKey('Grupo', notNone=True)
docente = ForeignKey('DocenteInscripto', notNone=True)
return '%s-%s' % (self.docente.shortrepr(), self.grupo.shortrepr())
#}}}
-class Miembro(SQLObject, ByObject): #{{{
+class Miembro(SQLObject): #{{{
# Clave
grupo = ForeignKey('Grupo', notNone=True)
alumno = ForeignKey('AlumnoInscripto', notNone=True)
return '%s-%s' % (self.alumno.shortrepr(), self.grupo.shortrepr())
#}}}
-class Entrega(SQLObject, ByObject): #{{{
+class Entrega(SQLObject): #{{{
# Clave
instancia = ForeignKey('InstanciaDeEntrega', notNone=True)
entregador = ForeignKey('Entregador', default=None) # Si es None era un Docente
self.codigo)
#}}}
-class Correccion(SQLObject, ByObject): #{{{
+class Correccion(SQLObject): #{{{
# Clave
instancia = ForeignKey('InstanciaDeEntrega', notNone=True)
entregador = ForeignKey('Entregador', notNone=True) # Docente no tiene
return '%s,%s' % (self.entrega.shortrepr(), self.corrector.shortrepr())
#}}}
-class TareaEjecutada(InheritableSQLObject, ByObject): #{{{
+class TareaEjecutada(InheritableSQLObject): #{{{
# Clave
tarea = ForeignKey('Tarea', notNone=True)
entrega = ForeignKey('Entrega', notNone=True)
# No es un SQLObject porque no tiene sentido agregar/sacar permisos, están
# hardcodeados en el código
class Permiso(object): #{{{
+ max_valor = 1
def __init__(self, nombre, descripcion):
+ self.valor = Permiso.max_valor
+ Permiso.max_valor <<= 1
self.nombre = nombre
self.descripcion = descripcion
def permission_name(self): # para identity
return self.nombre
+ def __and__(self, other):
+ return self.valor & other.valor
+
+ def __or__(self, other):
+ return self.valor | other.valor
+
def __repr__(self):
return self.nombre
#}}}