- Se completa el esquema SQL de la DB.
- Se pone como clave (nombre, anio, cuatrimestre) así 2 ejercicios de distintos
cuatrimestres pueden tener el mismo nombre.
- Se corrigen los métodos y constructores que involucran a Enunciado.
CREATE TABLE enunciado (
id INTEGER PRIMARY KEY,
CREATE TABLE enunciado (
id INTEGER PRIMARY KEY,
- nombre VARCHAR(60) NOT NULL UNIQUE,
+ nombre VARCHAR(60) NOT NULL,
+ anio INTEGER NOT NULL,
+ cuatrimestre INTEGER NOT NULL,
autor_id INT CONSTRAINT autor_id_exists REFERENCES docente(id),
descripcion VARCHAR(255),
creado TIMESTAMP NOT NULL,
autor_id INT CONSTRAINT autor_id_exists REFERENCES docente(id),
descripcion VARCHAR(255),
creado TIMESTAMP NOT NULL,
archivo_name VARCHAR(255) DEFAULT NULL,
archivo_type VARCHAR(255) DEFAULT NULL
);
archivo_name VARCHAR(255) DEFAULT NULL,
archivo_type VARCHAR(255) DEFAULT NULL
);
+CREATE UNIQUE INDEX enunciado_pk ON enunciado (nombre, anio, cuatrimestre);
CREATE TABLE enunciado_tarea (
enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
CREATE TABLE enunciado_tarea (
enunciado_id INTEGER NOT NULL CONSTRAINT enunciado_id_exists REFERENCES enunciado(id),
t3 = Tarea(u'configurar detector de copias')
t4 = Tarea(u'detectar copias', dependencias=(t3, t2))
t3 = Tarea(u'configurar detector de copias')
t4 = Tarea(u'detectar copias', dependencias=(t3, t2))
-e1 = Enunciado(u'Un enunciado', d, u'Ejercicio reeee jodido', (t4,))
-e2 = Enunciado(u'Otro enunciado', d, u'Ejercicio facilongo', (t2, t4))
-e3 = d.add_enunciado(u'Más enunciados', u'Ejercicio anónimo')
+e1 = Enunciado(u'Un enunciado', 2007, 1, d, u'Ejercicio reeee jodido', (t4,))
+e2 = Enunciado(u'Otro enunciado', 2007, 1, d, u'Ejercicio facilongo', (t2, t4))
+e3 = d.add_enunciado(u'Más enunciados', 2007, 1, u'Ejercicio anónimo')
c = Curso(2007, 1, 1, u'Martes', [d], [e1, e2])
c = Curso(2007, 1, 1, u'Martes', [d], [e1, e2])
def add_entrega(self, instancia, *args, **kargs):
return Entrega(instancia, *args, **kargs)
def add_entrega(self, instancia, *args, **kargs):
return Entrega(instancia, *args, **kargs)
- def add_enunciado(self, nombre, *args, **kargs):
- return Enunciado(nombre, self, *args, **kargs)
+ def add_enunciado(self, nombre, anio, cuatrimestre, *args, **kargs):
+ return Enunciado(nombre, anio, cuatrimestre, self, *args, **kargs)
def __repr__(self):
return 'Docente(id=%s, usuario=%s, nombre=%s, password=%s, email=%s, ' \
def __repr__(self):
return 'Docente(id=%s, usuario=%s, nombre=%s, password=%s, email=%s, ' \
class Enunciado(SQLObject, ByObject): #{{{
# Clave
class Enunciado(SQLObject, ByObject): #{{{
# Clave
- nombre = UnicodeCol(length=60, alternateID=True)
+ nombre = UnicodeCol(length=60)
anio = IntCol(notNone=True)
cuatrimestre = IntCol(notNone=True)
anio = IntCol(notNone=True)
cuatrimestre = IntCol(notNone=True)
+ pk = DatabaseIndex(nombre, anio, cuatrimestre, unique=True)
# Campos
autor = ForeignKey('Docente')
descripcion = UnicodeCol(length=255, default=None)
# Campos
autor = ForeignKey('Docente')
descripcion = UnicodeCol(length=255, default=None)
ejercicios = MultipleJoin('Ejercicio')
casos_de_prueba = MultipleJoin('CasoDePrueba')
ejercicios = MultipleJoin('Ejercicio')
casos_de_prueba = MultipleJoin('CasoDePrueba')
- def __init__(self, nombre=None, autor=None, descripcion=None, tareas=(),
- **kargs):
- SQLObject.__init__(self, nombre=nombre, autorID=autor and autor.id,
- descripcion=descripcion, **kargs)
+ def __init__(self, nombre=None, anio=None, cuatrimestre=None, autor=None,
+ descripcion=None, tareas=(), **kargs):
+ SQLObject.__init__(self, nombre=nombre, descripcion=descripcion,
+ anio=anio, autorID=autor and autor.id, cuatrimestre=cuatrimestre,
+ **kargs)
if tareas:
self.tareas = tareas
if tareas:
self.tareas = tareas