X-Git-Url: https://git.llucax.com/software/sercom.git/blobdiff_plain/08a032b22c1fcbb789b18c8c78635265f1261fe8..db587d0d4ce6518b3c4f8cf18989fc1f65b40c5e:/sercom/model.py diff --git a/sercom/model.py b/sercom/model.py index a3897ac..9124dde 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -49,7 +49,7 @@ class TupleCol(PickleCol): 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) @@ -64,7 +64,7 @@ class ParamsValidator(UnicodeStringValidator): 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) @@ -268,6 +268,16 @@ class Alumno(Usuario): #{{{ #}}} 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 @@ -323,6 +333,16 @@ class Tarea(InheritableSQLObject, ByObject): #{{{ #}}} 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) @@ -447,6 +467,16 @@ class Ejercicio(SQLObject, ByObject): #{{{ #}}} 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) @@ -811,7 +841,10 @@ class Rol(SQLObject): #{{{ # 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 @@ -823,6 +856,12 @@ class Permiso(object): #{{{ 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 #}}}