コード例 #1
0
def get_materiascursadas(request,
                         cod_carrera=None,
                         inicio=None,
                         fin=None,
                         subjectCode=None):

    provider = DataProvider()
    transformer = DataTransformer()
    manipulator = DataManipulator()

    # Saco el token del request
    token = get_token(request)
    # Formateo los args
    fecha_inicio = inicio or request.args.get('inicio')
    fecha_fin = fin or request.args.get('fin')
    # Tiene que ser una sola carrera y un solo plan para calcular creditos
    carrera = cod_carrera or request.args.get('carrera')
    plan = request.args.get('plan')
    # Traigo las cursadas
    if carrera:
        cursadas_json = provider.get_materiascursadas(token, carrera)
    else:
        cursadas_json = provider.getTakenSubjects(token, subjectCode)
    cursadas_data = transformer.transform_materiascursadas_to_dataframe(
        cursadas_json)

    # Filtro periodo
    df = manipulator.filtrar_periodo(cursadas_data, fecha_inicio, fecha_fin)
    return df
コード例 #2
0
def porcentajes_areas_alumno(legajo):
    merged_data, _, plan_data = get_materiascursadas_plan(request)

    fecha_inicio = request.args.get('inicio')
    fecha_fin = request.args.get('fin')
    manipulator = DataManipulator()
    materias_alumno = manipulator.filtrar_materias_de_alumno(
        merged_data, legajo)
    materias_alumno = manipulator.filtrar_periodo(materias_alumno,
                                                  fecha_inicio, fecha_fin)
    data = manipulator.porcentajes_aprobadas_areas(plan_data, materias_alumno)
    return json.dumps([{
        "nombre": nombre,
        "valor": valor
    } for nombre, valor in data.items()])
コード例 #3
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)
コード例 #4
0
class MateriasPlanTest(unittest.TestCase):
    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)

    def test_alumnos_faltan_aprobar_materia(self):
        """
            El listado de materias tiene 9 alumnos que faltan aprobar la materia 01051
        """
        alumnos = self.manipulator.alumnos_falta_aprobar_materia_series(
            self.dataframe, '01051')
        self.assertEqual(len(alumnos), 9)

    def test_alumnos_de_materia(self):
        """
            Quiero los alumnos de una materia, sin importar si aprobaron o no o si estan repetidos
        """
        alumnos = self.manipulator.filtrar_alumnos_de_materia(
            self.dataframe, '90028')
        self.assertEqual(len(alumnos), 5)

    def test_alumnos_periodo_materia(self):
        """
            Quiero los alumnos de una materia, en un periodo determinado
        """
        alumnos = self.manipulator.filtrar_alumnos_de_materia_periodo(
            self.dataframe, '90028', '2012-01-01', '2014-10-10')
        self.assertEqual(len(alumnos), 3)

    def test_cantidad_alumnos_aprobados(self):
        """
            Quiero los alumnos de una materia que aprobaron en ese periodo
        """
        alumnos = self.manipulator.filtrar_alumnos_de_materia_periodo(
            self.dataframe, '90028', '2012-01-01', '2014-10-10')
        cantidad = self.manipulator.cantidad_alumnos_aprobados(
            alumnos, '90028')
        self.assertEqual(cantidad, 1)

    def test_cantidad_alumnos_desaprobados(self):
        """
            Quiero los alumnos de una materia que desaprobaron en ese periodo
        """
        alumnos = self.manipulator.filtrar_alumnos_de_materia_periodo(
            self.dataframe, '90028', '2012-01-01', '2014-10-10')
        cantidad = self.manipulator.cantidad_alumnos_desaprobados(
            alumnos, '90028')
        self.assertEqual(cantidad, 2)

    def test_cantidad_alumnos_ausentes(self):
        """
            Quiero los alumnos de una materia que estuvieron ausentes en ese periodo
        """
        alumnos = self.manipulator.filtrar_alumnos_de_materia_periodo(
            self.dataframe, '01033', '2001-01-01', '2015-10-10')
        cantidad = self.manipulator.cantidad_alumnos_ausentes(alumnos, '01033')
        self.assertEqual(cantidad, 1)

    def test_cantidad_alumnos_pendientes(self):
        """
            Quiero los alumnos de una materia pendientes en ese periodo
        """
        alumnos = self.manipulator.filtrar_alumnos_de_materia_periodo(
            self.dataframe, '01045', '2001-01-01', '2020-10-10')
        cantidad = self.manipulator.cantidad_alumnos_pendientes(
            alumnos, '01045')
        self.assertEqual(cantidad, 1)

    def test_cantidad_alumnos_falta_aprobar_periodo_grande(self):
        """
            Quiero los alumnos de una materia que faltan aprobar en ese periodo
            Hay que tener en cuenta que para saber quienes faltan aprobar en un periodo, 
            tengo que tener en cuenta el historial de aprobaciones. No me sirve el filtro del inicio
        """
        alumnos = self.manipulator.filtrar_periodo(self.dataframe, None,
                                                   '2020-10-10')
        cantidad = self.manipulator.cantidad_alumnos_falta_aprobar(
            alumnos, '90028')
        self.assertEqual(cantidad, 9)

    def test_cantidad_alumnos_falta_aprobar_periodo_corto(self):
        """
            Quiero los alumnos de una materia que faltan aprobar en ese periodo
            Hay que tener en cuenta que para saber quienes faltan aprobar en un periodo, 
            tengo que tener en cuenta el historial de aprobaciones. No me sirve el filtro del inicio
        """
        alumnos = self.manipulator.filtrar_periodo(self.dataframe, None,
                                                   '2013-12-12')
        cantidad = self.manipulator.cantidad_alumnos_falta_aprobar(
            alumnos, '90028')
        self.assertEqual(cantidad, 5)

    def test_periodo_solo_fecha_inicio(self):
        alumnos = self.manipulator.filtrar_periodo(self.dataframe,
                                                   '2014-07-01', None)
        self.assertEqual(len(alumnos), 9)

    def test_periodo_solo_fecha_fin(self):
        alumnos = self.manipulator.filtrar_periodo(self.dataframe, None,
                                                   '2018-01-01')
        self.assertEqual(len(alumnos), 12)

    def test_periodo_sin_fechas(self):
        """ 
            Test cuantas cursadas tengo filtrando sin fechas
            Deberia darme todas
        """
        alumnos = self.manipulator.filtrar_periodo(self.dataframe, None, None)
        self.assertEqual(len(alumnos), 20)