]> git.llucax.com Git - z.facultad/75.52/sercom.git/blobdiff - sercom/model.py
Hacer que Permiso sea un bit para manejar los permisos como máscaras de bits.
[z.facultad/75.52/sercom.git] / sercom / model.py
index a3897ac530bdd61537bde3b99d76a5bebc3fbdc8..9124dde8dfbb06822493e6c6473ac4aae53f8023 100644 (file)
@@ -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
 #}}}