From: Leandro Lucarella Date: Tue, 13 Mar 2007 18:53:49 +0000 (+0000) Subject: Bugfix: El zip se subía roto en las entregas. X-Git-Tag: 0_9_0~157 X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/commitdiff_plain/73633637cbc5d62f2d1502de89a9723d4dd0d1be?ds=inline Bugfix: El zip se subía roto en las entregas. Al parecer al usar el ZipFile con el file object que viene por request, le leía las cabeceras, avanzando el puntero, y lo rompía. Para evitarlo se lee el archivo una vez en memoria y se opera con el buffer en memoria. Además se agrega chequeo de CRC. --- diff --git a/sercom/subcontrollers/misentregas/__init__.py b/sercom/subcontrollers/misentregas/__init__.py index 57d7b8a..31c7678 100644 --- a/sercom/subcontrollers/misentregas/__init__.py +++ b/sercom/subcontrollers/misentregas/__init__.py @@ -140,10 +140,14 @@ class MisEntregasController(controllers.Controller, identity.SecureResource): @expose() def create(self, archivo, ejercicio, **kw): """Save or create record to model""" + archivo = archivo.file.read() try: - zfile = ZipFile(archivo.file) + zfile = ZipFile(StringIO(archivo), 'r') except BadZipfile: - flash(_(u'El archivo ZIP no es valido')) + flash(_(u'El archivo ZIP no es válido')) + raise redirect('list') + if zfile.testzip() is not None: + flash(_(u'El archivo ZIP tiene errores de CRC')) raise redirect('list') # por defecto el entregador es el user loggeado @@ -171,7 +175,7 @@ class MisEntregasController(controllers.Controller, identity.SecureResource): raise redirect('list') entregador = m.grupo - kw['archivos'] = archivo.file.read() + kw['archivos'] = archivo kw['entregador'] = entregador validate_new(kw) flash(_(u'Se creó una nueva %s.') % name) diff --git a/sercom/subcontrollers/validate.py b/sercom/subcontrollers/validate.py index 9b4a96a..614619c 100644 --- a/sercom/subcontrollers/validate.py +++ b/sercom/subcontrollers/validate.py @@ -51,3 +51,4 @@ def validate_del(cls, name, id): except Exception, e: flash(_(u'No se pudo eliminar el %s: %s' % (name, e))) raise redirect('../list') +