]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/model.py
Reporar mejor los errores en subcontrollers.validate.
[software/sercom.git] / sercom / model.py
index c01b63c57b6845df67f4b95925622743bc335033..9124dde8dfbb06822493e6c6473ac4aae53f8023 100644 (file)
@@ -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
 #}}}