#{{{ Imports
import cherrypy
-from turbogears import controllers, expose, redirect
+from turbogears import controllers, expose, redirect, url
from turbogears import validate, flash, error_handler
from turbogears import validators as V
from turbogears import widgets as W
from turbogears import paginate
from docutils.core import publish_parts
from sercom.subcontrollers import validate as val
-from sercom.model import Entrega, Correccion, Curso, Ejercicio, InstanciaDeEntrega, Grupo, Miembro, AlumnoInscripto
+from sercom.model import ComandoEjecutado, ComandoPruebaEjecutado, Entrega, Correccion, Curso, Ejercicio, InstanciaDeEntrega, Grupo, Miembro, AlumnoInscripto
from sqlobject import *
from zipfile import ZipFile, BadZipfile
from cStringIO import StringIO
javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_ejercicio');"), W.JSSource(ajax)]
form = EntregaForm()
+
#}}}
#{{{ Controlador
@paginate('records')
def list(self):
"""List records in model"""
+ # Un admin no tiene sentido en este area y por las dudas
+ # lo mando al home.
+ if 'admin' in identity.current.permissions:
+ raise redirect(url("/dashboard"))
+
# Grupos en los que el usuario formo parte
m = [i.grupo.id for i in Grupo.selectByAlumno(identity.current.user)]
try:
r = validate_get(entregaid)
response.headers["Content-Type"] = "application/zip"
response.headers["Content-disposition"] = "attachment;filename=Ej_%s-Entrega_%s-%s.zip" % (r.instancia.ejercicio.numero, r.instancia.numero, r.entregador.nombre)
- flash(_(u'El %s fue eliminado permanentemente.') % name)
return r.archivos
+ @expose()
+ def file(self, id):
+ from cherrypy import request, response
+ r = ComandoEjecutado.get(id)
+ response.headers["Content-Type"] = "application/zip"
+ response.headers["Content-disposition"] = "attachment;filename=comando_ejecutado_%d.zip" % (r.id)
+ return r.archivos
+
+ @expose()
+ def diff(self, id):
+ from cherrypy import request, response
+ r = ComandoEjecutado.get(id)
+ response.headers["Content-Type"] = "application/zip"
+ response.headers["Content-disposition"] = "attachment;filename=diferencias_%d.zip" % (r.id)
+ return r.diferencias
+
+ @expose(template='kid:%s.templates.diff' % __name__)
+ def verdiff(self, id):
+ r = ComandoEjecutado.get(id)
+ zip = ZipFile(StringIO(r.diferencias), 'r')
+ return dict(zip=zip)
+
@expose('json')
def instancias(self, ejercicio_id):
instancias = InstanciaDeEntrega.select(AND(