Esempio n. 1
0
 def get_instancias_y_grupos(self, ejercicio_id):
     ejercicio = Ejercicio.get(ejercicio_id)
     instancias = ejercicio.instancias_a_entregar
     if ejercicio.grupal:
         grupos = identity.current.user.get_grupos_activos(ejercicio.curso)
     else:
         grupos = []
     return dict(instancias=instancias, grupos=grupos)
Esempio n. 2
0
 def get_fuentes_ejercicio(self, ejercicioid):
     try:
         ejercicio = Ejercicio.get(ejercicioid)
         r = dict()
         files = []
         for instancia in ejercicio.instancias: 
             if instancia.activo:
                 eeii = [(instancia.find_entrega_a_corregir(x.entregador)) for x in instancia.get_resumen_entregas() if x.tiene_entregas]
                 for entrega in eeii:
                     r[entrega.entregador.alumno.padron] = entrega
         for entrega in r.values():
             files.append('%s_%u/* ' % (entrega.entregador.alumno.padron.encode('ascii'), entrega.instancia.numero))
         extras = dict()
         if ejercicio.enunciado.lenguaje is not None and ejercicio.enunciado.lenguaje.mossnet_id is not None:
             extras['mossnet.sh'] = ('#!/bin/sh\nmossnet.pl -l %s -d %s' % (ejercicio.enunciado.lenguaje.mossnet_id, ''.join(files)))
         return self.enviar_zip(r.values(), ("ultimas_entregas_ej%u.zip" % instancia.ejercicio.numero), extras, ['Makefile', 'Makefile-cliente-servidor'])
     except SQLObjectNotFound:
         flash(_(u'Ejercicio inválido o inexistente.'))
         raise redirect('/')
Esempio n. 3
0
    def create(self, archivo, ejercicio, **kw):
        """Save or create record to model"""
        curso = self.get_curso_actual()
        q_score = Entrega.selectBy(inicio=None, fin=None, entregador=identity.current.user.get_inscripcion(curso)).count()
        if q_score > 0:
            flash(_(u'No se acepta una nueva entrega si la anterior no fue procesada.'))
            raise redirect('list')
        archivo = archivo.file.read()
        try:
            zfile = ZipFile(StringIO(archivo), 'r')
        except BadZipfile:
            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
        curso = self.get_curso_actual()
        entregador = identity.current.user.get_inscripcion(curso)

        grupo_id = kw['grupo']
        del kw['grupo']
        ejercicio = Ejercicio.get(int(ejercicio))
        if ejercicio.grupal:
            # Como es grupal, tengo que hacer que la entrega la haga el grupo
            if not grupo_id:
                flash(_(u'No se puede realizar una entrega de un ejercicio grupal sin elegir el grupo.'))
                raise redirect('list')
            else:
                entregador = Grupo.get(int(grupo_id))

        kw['archivos'] = archivo
        kw['entregador'] = entregador
        validate_new(kw)
        flash(_(u'Se creó una nueva %s.') % name)
        raise redirect('list')
Esempio n. 4
0
 def create(self, **kw):
     """Save or create record to model"""
     e = Ejercicio.get(kw['ejercicioID'])
     e.add_instancia(**kw)
     flash(_(u'Se creó un nuevo %s.') % name)
     raise redirect('list/%s' % e.id)
Esempio n. 5
0
 def list(self, ejercicio):
     ejercicio = Ejercicio.get(ejercicio)
     r = cls.selectBy(ejercicio=ejercicio).orderBy(cls.q.numero)
     return dict(records=r, name=name, namepl=namepl, ejercicio=ejercicio)