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)
#}}}
class Tarea(InheritableSQLObject, ByObject): #{{{
+ 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
#}}}
class Enunciado(SQLObject, ByObject): #{{{
+ 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)
#}}}
class InstanciaDeEntrega(SQLObject, ByObject): #{{{
+ 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)
# 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
#}}}