Exemple #1
0
    def statistics(self, **kw):
        """Crea el formulario de estadisticas sobre entregas"""
        curso = self.get_curso_actual()
        cant_por_instancia = []
        cant_por_dias_anticip = {}
        for e in curso.ejercicios:
            for i in e.instancias:
              cant_por_instancia += [(i.shortrepr(), len(i.entregas))]

              for entrega in i.entregas:
                 anticip = (i.fin - entrega.fecha)
                 dias_anticipacion = anticip.days
                 if dias_anticipacion in cant_por_dias_anticip:
                     cant_por_dias_anticip[dias_anticipacion] += 1
                 else:
                     cant_por_dias_anticip[dias_anticipacion] = 1
        items = cant_por_dias_anticip.items()
        items.sort()
        items.reverse()
        # Entregas colgadas, sólo admins
        q_data = None
        if identity.has_permission(Permiso.admin):
            q_data = Entrega.selectBy(inicio=None, fin=None).orderBy('fecha')
            for e in q_data:
                e.edad = (datetime.now() - e.fecha)
                e.suficientemente_viejo = e.edad > timedelta(minutes=5)
        return dict(cant_por_instancia=cant_por_instancia, 
                    q_data = q_data,
                    cant_por_dias_anticip = [('%s dias' % dias, cant) for dias, cant in items])
Exemple #2
0
 def run(self):  # {{{
     entrega_id = self.queue.get()  # blocking
     while entrega_id is not None:
         Entrega._connection.expireAll()
         entrega = Entrega.get(entrega_id)
         log.debug(_(u"Nueva entrega para probar en: %s: %s"), self.contexto_ejecucion, entrega)
         self.test(entrega)
         log.debug(_(u"Fin de pruebas de: %s"), entrega)
         entrega_id = self.queue.get()  # blocking
Exemple #3
0
 def new(self, **kw):
     """Create new records in model"""
     curso = self.get_curso_actual()
     ejercicios = curso.ejercicios_activos
     q_score = Entrega.selectBy(inicio=None, fin=None, entregador=identity.current.user.get_inscripcion(curso)).count()
     if len(ejercicios) == 0:
         flash(_(u'Al momento, no hay ningún ejercicio con instancias de entrega abiertas.'))
     if q_score > 0:
         flash(_(u'Usted tiene un ejercicio en espera de ser aceptado. No envíe otro hasta tener la respuesta del primero.'))
     ejercicio_options = [(0, 'Seleccionar')] + [(e.id, e.shortrepr()) for e in ejercicios]
     return dict(name=name, namepl=namepl, form=form, values=kw, options=dict(ejercicio=ejercicio_options))
Exemple #4
0
 def get(self):
     while self.go_on:
         try:
             hub.begin()
             try:
                 e = Entrega.selectBy(inicio=None).orderBy(Entrega.q.fecha)[0]
                 e.inicio = datetime.now()
             finally:
                 hub.commit()
             return e.id
         except IndexError:
             log.debug(_(u'No hay entregas pendientes'))
             time.sleep(10) # TODO config?
         except Exception, e:
             if isinstance(e, SystemExit):
                 raise
             log.exception('Queue: ')
             time.sleep(10) # TODO config?
Exemple #5
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')