def force_create(self, archivo, **kw): """Sube una entrega en lugar de un alumno""" instancia = kw['instancia'] entregador = kw['entregador'] archivo = archivo.file.read() try: zfile = ZipFile(StringIO(archivo), 'r') except BadZipfile: flash(_(u'El archivo ZIP no es válido')) raise redirect('force_new', kw) if zfile.testzip() is not None: flash(_(u'El archivo ZIP tiene errores de CRC')) raise redirect('force_new',kw) entregador_id = int(entregador) instancia = InstanciaDeEntrega.get(int(instancia)) if instancia.ejercicio.grupal: entregador = Grupo.get(entregador_id) else: entregador = AlumnoInscripto.get(entregador_id) kw['instancia'] = instancia kw['archivos'] = archivo kw['entregador'] = entregador kw['observaciones'] = 'Entrega realizada manualmente por el docente %s' % identity.current.user.shortrepr() Entrega(**kw) flash('Se creo una nueva entrega') raise redirect('list')
def get_entregadores_para_instancia(self, instancia_id): curso = self.get_curso_actual() instancia = InstanciaDeEntrega.get(instancia_id) if instancia.ejercicio.grupal: entregadores = [dict(id=g.id, descripcion=g.shortrepr()) for g in curso.grupos] else: entregadores = [dict(id=ai.id, descripcion=ai.shortrepr()) for ai in curso.alumnos] return dict(entregadores=entregadores)
def get_fuentes_instancia(self, instanciaID): try: instancia = InstanciaDeEntrega.get(instanciaID) r = [(instancia.find_entrega_a_corregir(x.entregador)) for x in instancia.get_resumen_entregas() if x.tiene_entregas] return self.enviar_zip(r, "entregas_instancia_%u.%u.zip" % (instancia.ejercicio.numero, instancia.numero)) except: flash(_(u'Instancia incorrecta.')) raise redirect('/')
def get_mis_fuentes_instancia(self, instanciaID): try: instancia = InstanciaDeEntrega.get(instanciaID) docenteInscripto = DocenteInscripto.pk.get(instancia.ejercicio.curso.id, identity.current.user.id) if docenteInscripto is not None: r = [e for e in instancia.entregas if Correccion.selectBy(entrega=e, corrector=docenteInscripto).count() == 1] return self.enviar_zip(r, "mis_entregas_instancia_%u.%u.zip" % (instancia.ejercicio.numero, instancia.numero)) else: flash(_(u'Docente no inscripto.')) raise redirect('/') except: flash(_(u'Instancia incorrecta.')) raise redirect('/')