From: Leandro Lucarella Date: Mon, 12 Mar 2007 22:37:20 +0000 (+0000) Subject: Crear clase Ejecucion y heredar Entrega y ComandoEjecutado de ella. X-Git-Tag: 0_9~28 X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/commitdiff_plain/6c70122e06524e163db47413e7a1719feb83c29c Crear clase Ejecucion y heredar Entrega y ComandoEjecutado de ella. Para implementar las pruebas, me es muy conveniente que Prueba y Entrega tengan una interfaz similar, y siendo que Entrega tiene prácticamente los mismos campos que ComandoEjecutado (de quien hereda Prueba), creé una superclase que engloba los campos en comun, Ejecucion. Es necesario regenerar la DB (una vez más :). --- diff --git a/doc/testdata.py b/doc/testdata.py index e8d3853..b3bdb51 100644 --- a/doc/testdata.py +++ b/doc/testdata.py @@ -62,11 +62,11 @@ g2.add_miembro(ai2) # Entregas archivo_zip = file('doc/entrega.zip').read() ai1.add_entrega(ide, archivos=archivo_zip) -entrega = ai2.add_entrega(ide, inicio_tareas=datetime.now(), - fin_tareas=datetime.now() + timedelta(0, 0, 1), correcta=True, +entrega = ai2.add_entrega(ide, inicio=datetime.now(), + fin=datetime.now() + timedelta(0, 0, 1), exito=True, archivos=archivo_zip) -entrega2 = g1.add_entrega(ide, inicio_tareas=datetime.now(), - fin_tareas=datetime.now() + timedelta(0, 0, 3), correcta=False, +entrega2 = g1.add_entrega(ide, inicio=datetime.now(), + fin=datetime.now() + timedelta(0, 0, 3), exito=False, archivos=archivo_zip) d.add_entrega(ide, observaciones='Prueba de docente', archivos=archivo_zip) diff --git a/sercom/model.py b/sercom/model.py index 2366c22..5e6ec2a 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -724,18 +724,27 @@ class Miembro(SQLObject): #{{{ return '%s-%s' % (self.alumno.shortrepr(), self.grupo.shortrepr()) #}}} -class Entrega(SQLObject): #{{{ +class Ejecucion(InheritableSQLObject): #{{{ + # Campos + inicio = DateTimeCol(notNone=True, default=DateTimeCol.now) + fin = DateTimeCol(default=None) + exito = IntCol(default=None) + observaciones = UnicodeCol(notNone=True, default=u'') + archivos = BLOBCol(default=None) # ZIP con archivos + + def __repr__(self, clave='', mas=''): + return ('%s(%s inicio=%s, fin=%s, exito=%s, observaciones=%s%s)' + % (self.__class__.__name__, clave, self.inicio, self.fin, + self.exito, self.observaciones, mas)) +#}}} + +class Entrega(Ejecucion): #{{{ + _inheritable = False # Clave instancia = ForeignKey('InstanciaDeEntrega', notNone=True, cascade=False) entregador = ForeignKey('Entregador', default=None, cascade=False) # Si es None era un Docente fecha = DateTimeCol(notNone=True, default=DateTimeCol.now) pk = DatabaseIndex(instancia, entregador, fecha, unique=True) - # Campos - archivos = BLOBCol(notNone=True) # ZIP con fuentes de la entrega - correcta = BoolCol(default=None) # None es que no se sabe qué pasó - inicio_tareas = DateTimeCol(default=None) # Si es None no se procesó - fin_tareas = DateTimeCol(default=None) # Si es None pero inicio no, se está procesando - observaciones = UnicodeCol(notNone=True, default=u'') # Joins comandos_ejecutados = MultipleJoin('ComandoFuenteEjecutado') pruebas = MultipleJoin('Prueba') @@ -759,11 +768,9 @@ class Entrega(SQLObject): #{{{ Prueba.pk.get(self.id, caso_de_prueba).destroySelf() def __repr__(self): - return 'Entrega(id=%s, instancia=%s, entregador=%s, fecha=%s, ' \ - 'correcta=%s, inicio_tareas=%s, fin_tareas=%s, observaciones=%s)' \ - % (self.id, self.instancia.shortrepr(), srepr(self.entregador), - self.fecha, self.inicio_tareas, self.fin_tareas, - self.correcta, self.observaciones) + return super(Entrega, self).__repr__('instancia=%s, entregador=%s, ' + 'fecha=%s' % (self.instancia.shortrepr(), srepr(self.entregador), + self.fecha)) def shortrepr(self): return '%s-%s-%s' % (self.instancia.shortrepr(), @@ -800,19 +807,12 @@ class Correccion(SQLObject): #{{{ return '%s,%s' % (self.entrega.shortrepr(), self.corrector.shortrepr()) #}}} -class ComandoEjecutado(InheritableSQLObject): #{{{ +class ComandoEjecutado(Ejecucion): #{{{ # Campos - inicio = DateTimeCol(notNone=True, default=DateTimeCol.now) - fin = DateTimeCol(default=None) - exito = IntCol(default=None) - archivos_comparados = BLOBCol(default=None) # ZIP con archivos diff - archivos_guardados = BLOBCol(default=None) # ZIP con archivos guardados - observaciones = UnicodeCol(notNone=True, default=u'') + diferencias = BLOBCol(default=None) # ZIP con archivos guardados def __repr__(self, clave='', mas=''): - return ('%s(%s inicio=%s, fin=%s, exito=%s, observaciones=%s%s)' - % (self.__class__.__name__, clave, self.inicio, self.fin, - self.exito, self.observaciones, mas)) + return super(ComandoFuenteEjecutado, self).__repr__(clave, mas) #}}} class ComandoFuenteEjecutado(ComandoEjecutado): #{{{ diff --git a/sercom/subcontrollers/correccion/templates/entregas.kid b/sercom/subcontrollers/correccion/templates/entregas.kid index 9bd8690..63e8bed 100644 --- a/sercom/subcontrollers/correccion/templates/entregas.kid +++ b/sercom/subcontrollers/correccion/templates/entregas.kid @@ -20,8 +20,7 @@ usuario - Si - No + Si fecha corregido @@ -38,8 +37,7 @@ ${i.inicio} ${i.fin} - Si - No + Si ${i.observaciones} diff --git a/sercom/subcontrollers/misentregas/templates/list.kid b/sercom/subcontrollers/misentregas/templates/list.kid index 1d6c4f9..94d04ca 100644 --- a/sercom/subcontrollers/misentregas/templates/list.kid +++ b/sercom/subcontrollers/misentregas/templates/list.kid @@ -25,9 +25,9 @@ usuario usuario usuario - fecha asignado - fecha corregido - fecha corregido + fecha asignado + fecha corregido + fecha corregido nota Corrida diff --git a/sercom/tester.py b/sercom/tester.py index 0b00a15..7cacd44 100644 --- a/sercom/tester.py +++ b/sercom/tester.py @@ -200,7 +200,7 @@ class Tester(object): #{{{ def test(self, entrega): #{{{ log.debug(_(u'Tester.test(entrega=%s)'), entrega) - entrega.inicio_tareas = datetime.now() + entrega.inicio = datetime.now() try: try: self.setup_chroot(entrega) @@ -208,7 +208,7 @@ class Tester(object): #{{{ self.ejecutar_tareas_prueba(entrega) self.clean_chroot(entrega) except ExecutionFailure, e: - entrega.correcta = False + entrega.exito = False log.info(_(u'Entrega incorrecta: %s'), entrega) except Exception, e: if isinstance(e, SystemExit): raise @@ -218,10 +218,10 @@ class Tester(object): #{{{ entrega.observaciones += error_interno log.exception(_('Hubo una excepcion inesperada desconocida')) # FIXME encoding else: - entrega.correcta = True + entrega.exito = True log.debug(_(u'Entrega correcta: %s'), entrega) finally: - entrega.fin_tareas = datetime.now() + entrega.fin = datetime.now() #}}} def setup_chroot(self, entrega): #{{{ y clean_chroot() @@ -375,7 +375,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ if self.retorno == self.RET_FAIL: if proc.returncode == 0: if self.rechazar_si_falla: - entrega.correcta = False + entrega.exito = False comando_ejecutado.exito = False comando_ejecutado.observaciones += _(u'Se esperaba que el ' u'programa termine con un error (código de retorno ' @@ -386,7 +386,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ u'terminó bien (código de retorno 0).\n')) elif self.retorno != proc.returncode: if self.rechazar_si_falla: - entrega.correcta = False + entrega.exito = False comando_ejecutado.exito = False if proc.returncode < 0: comando_ejecutado.observaciones += _(u'Se esperaba terminar ' @@ -425,7 +425,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ for f in a_guardar: if not os.path.exists(join(path, f)): if self.rechazar_si_falla: - entrega.correcta = False + entrega.exito = False comando_ejecutado.exito = False comando_ejecutado.observaciones += _(u'Se esperaba un archivo ' u'"%s" para guardar pero no fue encontrado.\n') % f @@ -434,7 +434,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ else: zip.write(join(path, f), f) zip.close() - comando_ejecutado.archivos_guardados = buffer.getvalue() + comando_ejecutado.archivos = buffer.getvalue() def diff(new, zip_in, zip_out, name, longname=None, origname='correcto', newname='entregado'): if longname is None: @@ -445,7 +445,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ tofile=name+'.'+newname))) if udiff: if self.rechazar_si_falla: - entrega.correcta = False + entrega.exito = False comando_ejecutado.exito = False comando_ejecutado.observaciones += _(u'%s no coincide con lo ' u'esperado (archivo "%s.diff").\n') % (longname, name) @@ -481,7 +481,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ for f in a_comparar: if not os.path.exists(join(path, f)): if self.rechazar_si_falla: - entrega.correcta = False + entrega.exito = False comando_ejecutado.exito = False comando_ejecutado.observaciones += _(u'Se esperaba un archivo ' u'"%s" para comparar pero no fue encontrado') % f @@ -490,7 +490,7 @@ def ejecutar_comando_fuente(self, path, entrega): #{{{ else: diff(join(path, f), zip_a_comparar, zip, f) zip.close() - comando_ejecutado.archivos_guardados = buffer.getvalue() + comando_ejecutado.diferencias = buffer.getvalue() if comando_ejecutado.exito is None: comando_ejecutado.exito = True elif self.terminar_si_falla: diff --git a/testtester.py b/testtester.py index b7b7fd4..b5a40cb 100644 --- a/testtester.py +++ b/testtester.py @@ -28,6 +28,6 @@ model.hub.rollback() #model.hub.commit() #model.hub.begin() -#model.Entrega.get(5).correcta = True +#model.Entrega.get(5).exito = True #model.hub.rollback()