X-Git-Url: https://git.llucax.com/software/sercom-old.git/blobdiff_plain/2c809106fee22f48064720dfdf7dbbc29e4b321d..0daad71b27fd503bdfe92ca4acda8ab697204c7f:/src/sc_suwi?ds=sidebyside diff --git a/src/sc_suwi b/src/sc_suwi index be47215..fe505a6 100755 --- a/src/sc_suwi +++ b/src/sc_suwi @@ -21,10 +21,6 @@ import cgitb; cgitb.enable() #XXX HORRIBLE PASSWD = conf.get('general', 'cgipw') -def cmp_correccion_padron(e1, e2): - 'Compara 2 entregas, según el padrón del alumno.' - return cmp(e1.inscripto.padron, e2.inscripto.padron) - def http_header_html(req): return 'Content-type: text/html\r\n\r\n' @@ -118,6 +114,11 @@ def input_zip(req, entrega_id): return input_entrega(req, entrega_id) \ + '\n' +def input_zip_rechazados(req, entrega_id): + return input_entrega(req, entrega_id) \ + + '\n' \ + + '\n' + def input_inscripto(req, inscripto_id=None): if inscripto_id is not None: return '\n' \ @@ -183,6 +184,11 @@ def pruebas(req, intento_id, inscripto_id=None): r = '\n
\n' r += form(req, 'Volver', input_entrega(req, i.entrega.id) + input_inscripto(req, inscripto_id)) + #XXX Hack feo y muy hardcodeado para ver los fuentes (morirá con suwi) + r += 'ver fuentes
' \ + % (i.inscripto.curso.anio, i.inscripto.curso.cuatrimestre, + i.inscripto.curso.curso, i.entrega.nroEjercicio, i.entrega.entrega, + i.inscripto.padron, i.numero) r += '\n' return r def row(p): @@ -251,7 +257,7 @@ def intentos(req, entrega_id, inscripto_id): r += footer() return r -def zip(req, entrega_id): +def zip(req, entrega_id, rechazados=False): def zip_path(path, base, zipfd): paths = os.listdir(path) for p in paths: @@ -263,13 +269,26 @@ def zip(req, entrega_id): from zipfile import ZipFile, ZIP_DEFLATED e = Entrega.get(entrega_id, connection=conn) c = e.curso - req.write(http_header_zip(req, 'entrega-%d.%d.%d-%d.%d.zip' - % (c.anio, c.cuatrimestre, c.curso, e.nroEjercicio, e.entrega))) + filename = 'entrega-%d.%d.%d-%d.%d' \ + % (c.anio, c.cuatrimestre, c.curso, e.nroEjercicio, e.entrega) + if rechazados: + filename += '-rechazados' + filename += '.zip' + req.write(http_header_zip(req, filename)) tmpfname = os.tmpnam() zipfd = ZipFile(tmpfname, 'w', ZIP_DEFLATED) - for c in e.correcciones: - zip_path(os.path.join(conf.get('general', 'data_dir'), c.intento.path), - str(c.intento.inscripto.padron), zipfd) + if rechazados: + inscriptos_ok = set([c.inscripto for c in e.correcciones]) + inscriptos = set([i.inscripto for i in e.intentos]) + for i in inscriptos - inscriptos_ok: + intento = list(Intento.selectBy(entregaID=e.id, inscriptoID=i.id, + connection=conn))[-1] + zip_path(os.path.join(conf.get('general', 'data_dir'), + intento.path), str(i.padron), zipfd) + else: + for c in e.correcciones: + zip_path(os.path.join(conf.get('general', 'data_dir'), + c.intento.path), str(c.intento.inscripto.padron), zipfd) zipfd.close() req.write(file(tmpfname, 'r').read()) os.unlink(tmpfname) @@ -305,7 +324,7 @@ def correcciones(req, entrega_id): ''' % (c.inscripto.padron, form(req, pruebas, input_pruebas(req, c.intento.id)), form(req, intentos, input_intentos(req, c.entrega.id, c.inscripto.id))) - def problematico_header(): + def rechazado_header(): return '''