X-Git-Url: https://git.llucax.com/software/sercom-old.git/blobdiff_plain/8eda4b28e05509720fb14f6d61cad61a9a745fa7..9d5cef9df44a7d6687a9563bc762ae56fe70103b:/src/sc_suwi diff --git a/src/sc_suwi b/src/sc_suwi index 3931b96..fe505a6 100755 --- a/src/sc_suwi +++ b/src/sc_suwi @@ -19,7 +19,7 @@ conf, conn, log = sercom.init('cgi') import cgitb; cgitb.enable() #XXX HORRIBLE -PASSWD = conf.get('general', 'claves') +PASSWD = conf.get('general', 'cgipw') def http_header_html(req): return 'Content-type: text/html\r\n\r\n' @@ -48,6 +48,11 @@ def header(req): border: medium black solid; border-collapse: collapse; } + caption + { + margin: 5pt; + font-weight: bold; + } th { border: thin black solid; @@ -61,7 +66,6 @@ def header(req): { border: thin black solid; padding: 3pt; - text-align: center; vertical-align: middle; } .warn @@ -110,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' \ @@ -175,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): @@ -243,11 +257,11 @@ 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: - if os.path.isdir(p): + if os.path.isdir(os.path.join(path, p)): zip_path(os.path.join(path, p), os.path.join(base, p), zipfd) else: zipfd.write(os.path.join(path, p), os.path.join(base, p)) @@ -255,57 +269,114 @@ 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) def correcciones(req, entrega_id): - def header(): + def correccion_header(): return '''Padrón | -Pruebas | -Intentos | -
---|---|---|
Padrón | +Pruebas | +Intentos | +
\n' - r += form(req, 'Elegir curso', input_login(req)) - r += form(req, 'Elegir entrega', input_curso(req, e.curso.id)) - r += form(req, 'Bajar entrega en .zip', input_zip(req, entrega_id)) - r += '
\n' - return r - def row(c): + def correccion_footer(): + return ' \n\n' + def correccion_row(c): if c.intento.pruebasPasadas: pruebas = 'BIEN' elif not c.intento.compila: prubas = None else: pruebas = 'MAL' intentos = int(Intento.selectBy(inscriptoID=c.inscriptoID, entregaID=c.entregaID, connection=conn).count()) return ''' -Padrón | +Intentos | +
---|---|
\n' + r += form(req, 'Elegir curso', input_login(req)) + r += form(req, 'Elegir entrega', input_curso(req, e.curso.id)) + r += form(req, 'Bajar entrega en .zip', input_zip(req, entrega_id)) + r += form(req, 'Bajar entrega rechazadas en .zip', + input_zip_rechazados(req, entrega_id)) + r += '
\n' + return r e = Entrega.get(entrega_id, connection=conn) c = e.curso r = '