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}
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'}
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}