Example #1
0
def dispersion_notas(cod_materia):
    transformer = DataTransformer()
    provider = DataProvider()
    token = get_token(request)  # Saco el token del request
    df = get_alumnos_de_materia_periodo(request, cod_materia)
    carrera = request.args.get('carrera')

    if carrera:
        alumnos_carrera_json = provider.get_alumnos_de_carrera(token, carrera)
    else:
        alumnos_carrera_json = provider.getCareerStudents(token)
    alumnos_carrera_df = transformer.transform_to_dataframe(
        alumnos_carrera_json)
    data = transformer.merge_materias_con_promedio(df, alumnos_carrera_df)
    # Itero para generar el json final
    resultado = []
    for row in data.itertuples():
        nota = getattr(row, 'nota')
        if nota:
            resultado.append({
                "Promedio": getattr(row, 'promedio'),
                "Alumno": getattr(row, 'alumno'),
                "Nota": nota
            })
    return json.dumps(resultado)
Example #2
0
def alumnos_carrera(carrera):
    token = get_token(request)
    transformer = DataTransformer()
    json_data = DataProvider().get_alumnos_de_carrera(token, carrera)
    data = transformer.transform_to_dataframe(json_data)
    inscriptos = DataManipulator().inscriptos_por_carrera(data)['alumno']
    return json.dumps([{
        "nombre":
        transformer.transform_timestamp_to_semester(key),
        "cantidad":
        value
    } for key, value in inscriptos.items()])
Example #3
0
 def setUp(self):
     self.manipulator = DataManipulator()
     transformer = DataTransformer()
     with open('source/tests/json/api_carreras_materiascursadas.json',
               'r') as archivo_alumnos:
         data = json.loads(archivo_alumnos.read())
         df_materias = transformer.transform_materiascursadas_to_dataframe(
             data)
     with open('source/tests/json/plan_test.json', 'r') as archivo_plan:
         data = json.loads(archivo_plan.read())
         df_plan = transformer.transform_to_dataframe(data)
     self.dataframe = transformer.merge_materias_con_plan(
         df_materias, df_plan)
Example #4
0
def get_materiascursadas_promedio(request, carrera, inicio=None, fin=None):
    cursadas_data = get_materiascursadas(request, carrera, inicio, fin)

    transformer = DataTransformer()

    # Obtengo los alumnos de la carrera
    token = get_token(request)  # Saco el token del request
    alumnos_carrera_json = DataProvider().get_alumnos_de_carrera(
        token, carrera)
    alumnos_carrera_df = transformer.transform_to_dataframe(
        alumnos_carrera_json)
    data = transformer.merge_materias_con_promedio(cursadas_data,
                                                   alumnos_carrera_df)
    return data
Example #5
0
def get_plan(request, carrera=None):
    provider = DataProvider()
    transformer = DataTransformer()

    # Saco el token del request
    token = get_token(request)
    # Formateo los args
    fecha_inicio = request.args.get('inicio')
    fecha_fin = request.args.get('fin')
    # Tiene que ser una sola carrera y un solo plan para calcular creditos
    carrera = carrera or request.args.get('carrera')
    plan = request.args.get('plan')
    # Traigo el plan
    plan_json = provider.get_plan(token, carrera, plan)
    plan_data = transformer.transform_to_dataframe(plan_json)
    return plan_data
Example #6
0
class AlumnoTest(unittest.TestCase):

    def setUp(self):
        self.manipulator = DataManipulator()
        self.transformer = DataTransformer()
        with open('source/tests/json/api_carreras_materiascursadas.json', 'r') as archivo_alumnos:
            data = json.loads(archivo_alumnos.read())
            self.df_materiascursadas = self.transformer.transform_materiascursadas_to_dataframe(data)

        with open('source/tests/json/api_carreras_planes_anio.json', 'r') as archivo_plan:
            data = json.loads(archivo_plan.read())
            self.df_plan = self.transformer.transform_to_dataframe(data)

        with open('source/tests/json/api_carrera_planes_anio_cantidad_materias_necesarias.json', 'r') as archivo_plan:
            data = json.loads(archivo_plan.read())
            self.cantidad_materias_necesarias = data["cantidad"]

        self.dataframe = self.transformer.merge_materias_con_plan(
            self.df_materiascursadas, self.df_plan)

    def test_porcentaje_nucleos(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(self.dataframe, "1")
        data = self.manipulator.porcentajes_aprobadas_areas(
        self.df_plan, materias_alumno)
        self.assertEqual(data['Inglés'], 50) # Tiene el 50% aprobado segun el mock

    def test_porcentaje_nucleos_dentro_periodo(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(self.dataframe, "1")
        filtradas_periodo = self.manipulator.filtrar_periodo(materias_alumno, '2018-02-10', '2020-02-10')
        data = self.manipulator.porcentajes_aprobadas_areas(self.df_plan, filtradas_periodo)
        self.assertEqual(data['Inglés'], 50) # Tiene el 50% aprobado segun el mock

    def test_porcentaje_nucleos_fuera_periodo(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(self.dataframe, "1")
        filtradas_periodo = self.manipulator.filtrar_periodo(materias_alumno, '2018-02-10', '2018-10-10')
        data = self.manipulator.porcentajes_aprobadas_areas(self.df_plan, filtradas_periodo)
        self.assertEqual(data['Inglés'], 0) # Tiene el 0% aprobado segun el mock

    def test_porcentaje_areas(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(self.dataframe, "1")
        data = self.manipulator.porcentajes_aprobadas_nucleos(
        self.df_plan, materias_alumno)
        self.assertEqual("%.2f" % data['I'], '33.33') # Segun el mock, tiene el 33.333333%, lo limito a 2 decimales

    def test_porcentaje_areas_dentro_periodo(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(self.dataframe, "1")
        filtradas_periodo = self.manipulator.filtrar_periodo(materias_alumno, '2018-02-10', '2020-10-10')
        data = self.manipulator.porcentajes_aprobadas_nucleos(
        self.df_plan, filtradas_periodo)
        self.assertEqual("%.2f" % data['I'], '33.33') # Segun el mock, tiene el 33.333333%, lo limito a 2 decimales

    def test_porcentaje_areas_fuera_periodo(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(self.dataframe, "1")
        filtradas_periodo = self.manipulator.filtrar_periodo(materias_alumno, '2018-02-10', '2018-10-10')
        data = self.manipulator.porcentajes_aprobadas_nucleos(
        self.df_plan, filtradas_periodo)
        self.assertEqual("%.2f" % data['I'], '0.00') # Segun el mock, tiene el 0%

    def test_scores(self):
        scores = self.manipulator.get_scores_alumno(self.dataframe, "1")
        scores_unicos = self.transformer.transform_scores_unicos(scores)
        # Como en el 2018 tiene un 2, un 7 y un 8, el score de ese semestre deberia ser (2+7+8)/3 = 5.67
        resultado = "%.2f" % scores_unicos[scores_unicos.periodo_semestre == '2018-S2'].score_periodo
        esperado = "5.67"
        self.assertEqual(resultado, esperado)

    def test_cantidad_aprobadas(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(
            self.dataframe, "1")
        cantidad_aprobadas = self.manipulator.cantidad_aprobadas(materias_alumno) # Deberian ser 2
        self.assertEqual(cantidad_aprobadas, 2)

    def test_porcentaje_carrera(self):
        materias_alumno = self.manipulator.filtrar_materias_de_alumno(
            self.dataframe, "1")
        cantidad_aprobadas = self.manipulator.cantidad_aprobadas(materias_alumno) # Deberian ser 2

        porcentaje = self.manipulator.porcentaje_aprobadas(cantidad_aprobadas, self.cantidad_materias_necesarias) # (2/40)*100 = 5
        self.assertEqual(porcentaje, 5)