コード例 #1
0
 def put(self, id_recurso):
     if not 'auth-token' in request.headers:
         return {'response': 'no_token'}, 401
     user = None
     token = request.headers.get('auth_token')
     user = Alumno.load_from_token(token)
     if user == None:
         return {'response': 'user_invalid'}, 401
     curso = Curso.objects(id=id_recurso).first()
     if curso == None:
         return {'response': 'resource_invalid'}, 404
     data = request.data.decode()
     data = json.loads(data)
     alumno = user
     if not 'respuestas' in data or len(data['respuestas']) == 0:
         return {'response': 'invalid_data'}, 404
     respuestas = data['respuestas']
     evaluacion = Evaluacion()
     evaluacion.alumno = alumno.id
     evaluacion.curso = curso.id
     for respuesta in respuestas:
         respuesta_aux = Respuesta()
         respuesta_aux.numero_pregunta = respuesta['numero_pregunta']
         respuesta_aux.correcta = respuesta['correcta']
         respuesta_aux.data = respuesta['respuesta']
         evaluacion.respuestas.append(respuesta_aux)
         evaluacion.acierto = 0
         if 'progreso' in data:
             evaluacion.acierto = data['progreso']
     evaluacion.save()
     return {"Response": 200}
コード例 #2
0
    def post(self, id):
        args = self.reqparse.parse_args()
        token = args.get('auth-token')
        profesor = Profesor.load_from_token(token)
        data = request.data.decode()
        data = json.loads(data)
        prueba = Prueba.objects(id=id).first()
        for registro in data['data']:
            evaluacion = Evaluacion()
            cantidad_buenas = 0
            cantidad_malas = 0
            cantidad_omitidas = 0
            alumno = Alumno.objects(id=registro['id']).first()
            evaluacion.alumno = alumno
            evaluacion.prueba = prueba
            for pregunta in prueba.preguntas:
                respuesta = Respuesta()
                respuesta.numero_pregunta = pregunta.numero_pregunta
                if registro[str(pregunta.numero_pregunta)] == "":
                    cantidad_omitidas = cantidad_omitidas + 1
                    respuesta.correcta = False
                    if prueba.tipo != "TAREA":
                        respuesta.alternativa = "O"
                else:
                    if prueba.tipo != "TAREA":
                        if registro[str(pregunta.numero_pregunta)].upper(
                        ) == pregunta.alternativa.upper():
                            cantidad_buenas = cantidad_buenas + 1
                            respuesta.correcta = True
                            respuesta.alternativa = str(registro[str(
                                pregunta.numero_pregunta)].upper())
                        else:
                            cantidad_malas = cantidad_malas + 1
                            respuesta.correcta = False
                            respuesta.alternativa = str(registro[str(
                                pregunta.numero_pregunta)].upper())
                    else:
                        if registro[str(pregunta.numero_pregunta)].upper(
                        ) == "CORRECTA":
                            cantidad_buenas = cantidad_buenas + 1
                            respuesta.correcta = True

                        if registro[str(pregunta.numero_pregunta)].upper(
                        ) == "INCORRECTA":
                            cantidad_malas = cantidad_malas + 1
                            respuesta.correcta = False
                evaluacion.respuestas.append(respuesta)
            evaluacion.cantidad_buenas = cantidad_buenas
            evaluacion.cantidad_malas = cantidad_malas
            evaluacion.cantidad_omitidas = cantidad_omitidas
            evaluacion.puntaje = int((
                (850 - prueba.puntaje_base) / len(prueba.preguntas)) *
                                     cantidad_buenas + prueba.puntaje_base)
            evaluacion.save()
        return {'Response': 'exito'}
コード例 #3
0
    def put(self,id_recurso):
        args = self.reqparse.parse_args()
        user = None
        token = args.get('auth-token')
        data = request.data.decode()
        data = json.loads(data)
        user = Alumno.load_from_token(token)
        if user == None:
            return {'response': 'user_invalid'},401
        curso = Curso.objects(id=id_recurso).first()
        if curso==None:
            return {'response': 'resource_invalid'},404
        alumno = user
        if len(data) == 0:
            return {'response': 'no answers'}, 404
        respuestas = data
        evaluacion = Evaluacion.objects(alumno=user, curso=curso).first()
        if evaluacion != None:
            evaluacion.respuestas = []
            evaluacion.acierto = 0
            evaluacion.save()
        if not evaluacion:
            evaluacion = Evaluacion()

        evaluacion.alumno = alumno.id
        evaluacion.curso = curso.id
        cantidad_correcta = 0
        acierto = 0
        
        #DETERMINAR LA VARIABLE QUE ALMACENARA LAS OPCIONES DE CADA PREGUNTA VALIDA
        respuestas_ordenadas = []
        for contenido in curso.contenidos:
            for pregunta in contenido.preguntas:
                if pregunta.tipo_pregunta != "TEXTO":
                    respuestas_ordenadas.append({
                        "indice_pregunta":pregunta.indice,
                        "indice_contenido": contenido.identificador,
                        "respuestas_enviadas":[]
                    })

        #GUARDO LAS RESPUESTAS ENVIADAS PARA CADA PREGUNTA A PARTIR DE SU INDICE
        for respuesta in respuestas:
            for respuesta_ordenada in respuestas_ordenadas:
                if (int(respuesta['id_contenido']) == int(respuesta_ordenada['indice_contenido'])) and ( int(respuesta['indice_pregunta']) == int(respuesta_ordenada['indice_pregunta'])):
                    respuesta_ordenada['respuestas_enviadas'].append(respuesta)

        #ASEGURARSE DE QUE SE ENVIARON RESPUESTAS PARA TODAS LAS PREGUNTAS EN CASO CONTRARIO RESPONDER FALLO
        for respuesta_ordenada in respuestas_ordenadas:
            for contenido in curso.contenidos:
                if contenido.identificador == respuesta_ordenada['indice_contenido']:
                    for pregunta in contenido.preguntas:
                        if pregunta.indice == respuesta_ordenada['indice_pregunta']:
                            if pregunta.tipo_pregunta != "TEXTO":
                                if len(respuesta_ordenada['respuestas_enviadas']) == 0:
                                    return {'response': 'answers invalid'}, 404

        for respuestas_pregunta in respuestas_ordenadas:
            #EN ESTE PUNTO ESTAMOS VIENDO UNA PREGUNTA EN PARTICULAR
            # VARIABLE QUE CERTIFICA QUE LA PREGUNTA ES CORRECTA, POR DEFECTO SI ES CORRECTA
            correcta= True

            # SE CREA LA RESPUESTA QUE SERA ANNADIDA A LA EVALUACION
            respuesta_aux = Respuesta()

            for contenido in curso.contenidos:
                if int(respuestas_pregunta['indice_contenido']) == int(contenido.identificador):
                    respuesta_aux.indice_contenido = int(respuestas_pregunta['indice_contenido'])
                    for pregunta in contenido.preguntas:
                        #ACCEDIMOS A LA PREGUNTA
                        if int(respuestas_pregunta['indice_pregunta']) == int(pregunta.indice):

                            #CASO PREGUNTAS DE TIPO TEXTO
                            if pregunta.tipo_pregunta == "TEXTO":
                                respuesta_aux.indice_pregunta = pregunta.indice
                                respuesta_aux.opciones = []
                                evaluacion.respuestas.append(respuesta_aux)

                            #CASO PREGUNTAS DE TIPO ALTERNATIVA
                            if pregunta.tipo_pregunta == "ALTERNATIVA":
                                #RECORRER LAS OPCIONES ENVIADAS
                                for respuesta_enviada in respuestas_pregunta['respuestas_enviadas']:
                                    if respuesta_enviada['respuesta'] == "True":
                                        #VERIFICAR QUE ES LA CORRECTA O NO
                                        for alternativa in pregunta.alternativas:
                                            if alternativa.correcta:
                                                #SI LA ALTERNATIVA ES CORRECTA VER SI COINCIDE CON LO SE MANDO
                                                if int(respuesta_enviada['indice_opcion']) != int(alternativa.numero_alternativa):
                                                    correcta = False
                                                # SE TIENE QUE GUARDAR LA OPCION DE LA RESPUESTA
                                                respuesta_opcion = RespuestaOpcion()
                                                respuesta_opcion.numero_opcion = int(respuesta_enviada['indice_opcion'])
                                                respuesta_opcion.correcta = correcta
                                                respuesta_opcion.data = str(respuesta_enviada['respuesta'])
                                                respuesta_aux.opciones.append(respuesta_opcion) 
                                respuesta_aux.indice_pregunta = pregunta.indice
                                respuesta_aux.correcta = correcta
                                # SE GUARDA LA RESPUESTA A LA PREGUNTA EN LA EVALUACION
                                evaluacion.respuestas.append(respuesta_aux)

                            #CASO PREGUNTA VERDADERO Y FALSO
                            if pregunta.tipo_pregunta == "VERDADERO_FALSO":
                                #RECORRER LAS OPCIONES ENVIADAS
                                for respuesta_enviada in respuestas_pregunta['respuestas_enviadas']:
                                    #POR CADA OPCION SE TIENE QUE CREAR UNA RESPUESTAOPCION Y VERIFICAR SI SE FALLÓ
                                    #SETEAR CORECTA A FALSO
                                    #RECORRER LAS ALTERNATIVAS
                                    respuesta_opcion = RespuestaOpcion()
                                    correcta_opcion = False
                                    for alternativa in pregunta.alternativas:
                                        if alternativa.numero_alternativa == int(respuesta_enviada['indice_opcion']):
                                            if str(alternativa.correcta) == str(respuesta_enviada['respuesta']):
                                                correcta_opcion = True
                                            else:
                                                correcta_opcion = False
                                                correcta = False
                                    respuesta_opcion.numero_opcion = int(respuesta_enviada['indice_opcion'])
                                    respuesta_opcion.data = str(respuesta_enviada['respuesta'])
                                    respuesta_opcion.correcta = correcta_opcion
                                    respuesta_aux.opciones.append(respuesta_opcion)
                                
                                respuesta_aux.indice_pregunta = pregunta.indice
                                respuesta_aux.correcta = correcta
                                # SE GUARDA LA RESPUESTA A LA PREGUNTA EN LA EVALUACION
                                evaluacion.respuestas.append(respuesta_aux)
                            
                            #CASO UNIR PARES
                            if pregunta.tipo_pregunta == "UNIR_IMAGENES" or pregunta.tipo_pregunta == "UNIR_TEXTOS" or pregunta.tipo_pregunta == "UNIR_IMAGEN_TEXTO":
                                for respuesta_enviada in respuestas_pregunta['respuestas_enviadas']:
                                    respuesta_opcion = RespuestaOpcion()
                                    if int(respuesta_enviada['respuesta']) == int(respuesta_enviada['indice_opcion']):
                                        correcta = True
                                    else:
                                        correcta = False
                                    respuesta_opcion.numero_opcion = respuesta_enviada['indice_opcion']
                                    respuesta_opcion.data = str(respuesta_enviada['respuesta'])
                                    respuesta_opcion.correcta = correcta
                                    respuesta_aux.opciones.append(respuesta_opcion)
                                respuesta_aux.indice_pregunta = pregunta.indice
                                respuesta_aux.correcta = correcta
                                evaluacion.respuestas.append(respuesta_aux)
            # ACTUALIZAR CONTADOR DE LAS RESPUESTAS CORRECTAS
            if correcta:
                cantidad_correcta = cantidad_correcta + 1


        if len(respuestas_ordenadas)>0:
            cantidad_preguntas = 0
            for contenido in curso.contenidos:
                for pregunta in contenido.preguntas:
                    if pregunta.tipo_pregunta != "TEXTO":
                        cantidad_preguntas = cantidad_preguntas +1
            if cantidad_preguntas == 0:
                acierto = 0
            else:
                acierto = int((cantidad_correcta/cantidad_preguntas)*100)
        evaluacion.acierto = acierto
        evaluacion.json = json.dumps(data)
        evaluacion.save()

        #ACTUALIZAR LA APROBACION DEL RECURSO
        curso.actualizar_aprobacion()
        curso.save()
        #return {"Response": 200}
        return {"Response":respuestas_ordenadas}