From: Leandro Lucarella Date: Mon, 26 Feb 2007 04:01:25 +0000 (+0000) Subject: Completar cambios a Enunciado. X-Git-Tag: pre-merge~83 X-Git-Url: https://git.llucax.com/software/sercom.git/commitdiff_plain/2105d1bec3dccbb8588be2453d15ea82aab90619?ds=sidebyside Completar cambios a Enunciado. - 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. --- diff --git a/doc/schema/schema.sql b/doc/schema/schema.sql index 6bd01cd..babaa5d 100644 --- a/doc/schema/schema.sql +++ b/doc/schema/schema.sql @@ -47,7 +47,9 @@ CREATE TABLE dependencia ( 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, @@ -55,6 +57,7 @@ CREATE TABLE enunciado ( 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), diff --git a/doc/testdata.py b/doc/testdata.py index b98618b..4b37151 100644 --- a/doc/testdata.py +++ b/doc/testdata.py @@ -14,9 +14,9 @@ t2 = Tarea('probar', dependencias=(t1,)) 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]) diff --git a/sercom/model.py b/sercom/model.py index a03266c..b842583 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -235,8 +235,8 @@ class Docente(Usuario): #{{{ 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, ' \ @@ -333,9 +333,10 @@ class Tarea(InheritableSQLObject, ByObject): #{{{ class Enunciado(SQLObject, ByObject): #{{{ # Clave - nombre = UnicodeCol(length=60, alternateID=True) + nombre = UnicodeCol(length=60) 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) @@ -347,10 +348,11 @@ class Enunciado(SQLObject, ByObject): #{{{ 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