예제 #1
0
    def test_lista_de_espera(self):
        codigo = 113476  # Algoritmos e Programação de Computadores
        le = Oferta.lista_de_espera(codigo, turma='A', nivel=Nivel.GRADUACAO,
                                    verbose=False)

        self.assertIn('A', le)
        self.assertLessEqual(0, le['A'])

        le = Oferta.lista_de_espera(codigo, nivel=Nivel.GRADUACAO,
                                    verbose=False)
        self.assertIn('A', le)
        self.assertLessEqual(0, le['A'])
예제 #2
0
    def test_lista_de_espera(self):
        codigo = 113476  # Algoritmos e Programação de Computadores
        le = Oferta.lista_de_espera(codigo,
                                    turma='A',
                                    nivel=Nivel.GRADUACAO,
                                    verbose=False)

        self.assertIn('A', le)
        self.assertLessEqual(0, le['A'])

        le = Oferta.lista_de_espera(codigo,
                                    nivel=Nivel.GRADUACAO,
                                    verbose=False)
        self.assertIn('A', le)
        self.assertLessEqual(0, le['A'])
예제 #3
0
    def test_disciplinas(self):
        disciplinas = Oferta.disciplinas(116, nivel=Nivel.GRADUACAO,
                                         verbose=False)

        self.assertIn('116394', disciplinas)
        self.assertEqual('ORGANIZACAO E ARQUITETURA DE COMPUTADORES',
                         disciplinas['116394'])
예제 #4
0
    def test_turmas(self):
        codigo = 116319  # ESTRUTURAS DE DADOS
        turmas = Oferta.turmas(codigo,
                               depto=Departamento.CIC,
                               nivel=Nivel.GRADUACAO,
                               verbose=False)

        self.assertIn('Departamento', turmas)
        self.assertIn('CIC', turmas['Departamento'])
        self.assertIn('Nome', turmas)
        self.assertIn('DADOS', turmas['Nome'])
        self.assertIn('Créditos', turmas)
        self.assertIn('Teoria', turmas['Créditos'])
        self.assertIn('Prática', turmas['Créditos'])
        self.assertIn('Extensão', turmas['Créditos'])
        self.assertIn('Estudo', turmas['Créditos'])

        self.assertIn('Turmas', turmas)
        for t in ['A', 'B', 'C', 'E']:
            self.assertIn(t, turmas['Turmas'])

        turma = turmas['Turmas']['A']
        self.assertIn('Vagas', turma)
        self.assertGreater(turma['Vagas'], 0)
        self.assertIn('Alunos Matriculados', turma)
        self.assertIn('Professores', turma)

        self.assertIn('Aulas', turma)
        for dia in turma['Aulas']:
            for horario in dia:
                self.assertIn('Início', horario)
                self.assertIn('Fim', horario)
                self.assertIn('Local', horario)

        self.assertIn('Turma Reservada', turma)
        for reserva in turma['Turma Reservada']:
            self.assertTrue('Ciência da Computação' in reserva
                            or 'Física' in reserva)

        codigo = 113476  # APC
        turmas = Oferta.turmas(codigo,
                               depto=Departamento.GAMA,
                               nivel=Nivel.GRADUACAO,
                               verbose=False)

        for t in ['AA', 'BB']:
            self.assertIn(t, turmas['Turmas'])
예제 #5
0
    def test_disciplinas(self):
        disciplinas = Oferta.disciplinas(116,
                                         nivel=Nivel.GRADUACAO,
                                         verbose=False)

        self.assertIn('116394', disciplinas)
        self.assertEqual('ORGANIZACAO E ARQUITETURA DE COMPUTADORES',
                         disciplinas['116394'])
예제 #6
0
    def test_turmas(self):
        codigo = 116319  # ESTRUTURAS DE DADOS
        turmas = Oferta.turmas(codigo, depto=Departamento.CIC,
                               nivel=Nivel.GRADUACAO, verbose=False)

        self.assertIn('Departamento', turmas)
        self.assertIn('CIC', turmas['Departamento'])
        self.assertIn('Nome', turmas)
        self.assertIn('DADOS', turmas['Nome'])
        self.assertIn('Créditos', turmas)
        self.assertIn('Teoria', turmas['Créditos'])
        self.assertIn('Prática', turmas['Créditos'])
        self.assertIn('Extensão', turmas['Créditos'])
        self.assertIn('Estudo', turmas['Créditos'])

        self.assertIn('Turmas', turmas)
        for t in ['A', 'B', 'C', 'E']:
            self.assertIn(t, turmas['Turmas'])

        turma = turmas['Turmas']['A']
        self.assertIn('Vagas', turma)
        self.assertGreater(turma['Vagas'], 0)
        self.assertIn('Alunos Matriculados', turma)
        self.assertIn('Professores', turma)

        self.assertIn('Aulas', turma)
        for dia in turma['Aulas']:
            for horario in dia:
                self.assertIn('Início', horario)
                self.assertIn('Fim', horario)
                self.assertIn('Local', horario)

        self.assertIn('Turma Reservada', turma)
        for reserva in turma['Turma Reservada']:
            self.assertTrue('Ciência da Computação' in reserva or
                            'Física' in reserva)

        codigo = 113476  # APC
        turmas = Oferta.turmas(codigo, depto=Departamento.GAMA,
                               nivel=Nivel.GRADUACAO, verbose=False)

        for t in ['AA', 'BB']:
            self.assertIn(t, turmas['Turmas'])
예제 #7
0
def demanda_nao_atendida(disciplina, nivel=Nivel.GRADUACAO, verbose=False):
    '''Retorna o total de alunos inscritos na lista de espera da disciplina do
    código dado. Considera todas as turmas.

    Argumentos:
    disciplina -- o código da disciplina
    nivel -- nível acadêmico da disciplina buscada
             (default Nivel.GRADUACAO)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    lista = Oferta.lista_de_espera(disciplina, nivel=nivel, verbose=verbose)
    return sum(lista.values())
예제 #8
0
def demanda_nao_atendida(disciplina, nivel=Nivel.GRADUACAO, verbose=False):
    '''Retorna o total de alunos inscritos na lista de espera da disciplina do
    código dado. Considera todas as turmas.

    Argumentos:
    disciplina -- o código da disciplina
    nivel -- nível acadêmico da disciplina buscada
             (default Nivel.GRADUACAO)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    lista = Oferta.lista_de_espera(disciplina, nivel=nivel, verbose=verbose)
    return sum(lista.values())
예제 #9
0
def ocupacao(oferta, cursos, nivel=Nivel.GRADUACAO, verbose=False):
    '''Retorna dois dicionários (obrigatórias e optativas) com o total de
    alunos inscritos em cada turma de cada disciplina ofertada por cada curso.

    Argumentos:
    oferta -- dicionário com a lista de oferta
    cursos -- lista com os cursos com disciplinas (da oferta) em seus
              currículos
    nivel -- nível acadêmico da disciplina buscada
             (default Nivel.GRADUACAO)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    obr, opt = set(), set()
    for codigo in cursos:
        disciplinas = Cursos.curriculo(codigo, nivel, verbose)
        if 'obrigatórias' in disciplinas:
            obr.update(disciplinas['obrigatórias'])
        if 'optativas' in disciplinas:
            opt.update(disciplinas['optativas'])
    opt = opt.difference(obr)

    obrigatorias, optativas = {}, {}
    for cod in obr:
        if cod in oferta:
            turmas = Oferta.turmas(cod)
            for t in turmas:
                key = cod + ' ' + t
                obrigatorias[key] = turmas[t]['Alunos Matriculados']
    for cod in opt:
        if cod in oferta:
            turmas = Oferta.turmas(cod)
            for t in turmas:
                key = cod + ' ' + t
                optativas[key] = turmas[t]['Alunos Matriculados']
    return obrigatorias, optativas
예제 #10
0
def ocupacao(oferta, cursos, nivel=Nivel.GRADUACAO, verbose=False):
    '''Retorna dois dicionários (obrigatórias e optativas) com o total de
    alunos inscritos em cada turma de cada disciplina ofertada por cada curso.

    Argumentos:
    oferta -- dicionário com a lista de oferta
    cursos -- lista com os cursos com disciplinas (da oferta) em seus
              currículos
    nivel -- nível acadêmico da disciplina buscada
             (default Nivel.GRADUACAO)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    obr, opt = set(), set()
    for codigo in cursos:
        disciplinas = Cursos.curriculo(codigo, nivel, verbose)
        if 'obrigatórias' in disciplinas:
            obr.update(disciplinas['obrigatórias'])
        if 'optativas' in disciplinas:
            opt.update(disciplinas['optativas'])
    opt = opt.difference(obr)

    obrigatorias, optativas = {}, {}
    for cod in obr:
        if cod in oferta:
            turmas = Oferta.turmas(cod)
            for t in turmas:
                key = cod + ' ' + t
                obrigatorias[key] = turmas[t]['Alunos Matriculados']
    for cod in opt:
        if cod in oferta:
            turmas = Oferta.turmas(cod)
            for t in turmas:
                key = cod + ' ' + t
                optativas[key] = turmas[t]['Alunos Matriculados']
    return obrigatorias, optativas
예제 #11
0
def alunos_matriculados(disciplina, depto=Departamento.CIC,
                        nivel=Nivel.GRADUACAO, verbose=False):
    '''Retorna o total de alunos matriculados em todas as turmas da disciplina
    do código dado.

    Argumentos:
    disciplina -- o código da disciplina
    nivel -- nível acadêmico da disciplina buscada
             (default Nivel.GRADUACAO)
    depto -- o código do departamento que oferece a disciplina
             (default Departamento.CIC)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    disciplinas = Oferta.turmas(disciplina, depto, nivel, verbose)

    return sum([disciplinas[t]['Alunos Matriculados'] for t in disciplinas])
예제 #12
0
    def test_departamentos(self):
        deptos = Oferta.departamentos(nivel=Nivel.GRADUACAO,
                                      campus=Campus.DARCY_RIBEIRO,
                                      verbose=False)

        # Códigos escolhidos aleatoriamente
        for depto in ['115', '138', '159', '351', '550']:
            self.assertIn(depto, deptos)

        self.assertIn('Denominação', deptos['351'])
        self.assertEqual('Centro Apoio ao Desenvolvimento Tecnológico',
                         deptos['351']['Denominação'])
        self.assertIn('Sigla', deptos['351'])
        self.assertEqual('CDT', deptos['351']['Sigla'])

        # Campi
        for depto in ['638', '650', '660']:
            self.assertIn(depto, deptos)
예제 #13
0
    def test_departamentos(self):
        deptos = Oferta.departamentos(nivel=Nivel.GRADUACAO,
                                      campus=Campus.DARCY_RIBEIRO,
                                      verbose=False)

        # Códigos escolhidos aleatoriamente
        for depto in ['115', '138', '159', '351', '550']:
            self.assertIn(depto, deptos)

        self.assertIn('Denominação', deptos['351'])
        self.assertEqual('Centro Apoio ao Desenvolvimento Tecnológico',
                         deptos['351']['Denominação'])
        self.assertIn('Sigla', deptos['351'])
        self.assertEqual('CDT', deptos['351']['Sigla'])

        # Campi
        for depto in ['638', '650', '660']:
            self.assertIn(depto, deptos)
예제 #14
0
def alunos_matriculados(disciplina,
                        depto=Departamento.CIC,
                        nivel=Nivel.GRADUACAO,
                        verbose=False):
    '''Retorna o total de alunos matriculados em todas as turmas da disciplina
    do código dado.

    Argumentos:
    disciplina -- o código da disciplina
    nivel -- nível acadêmico da disciplina buscada
             (default Nivel.GRADUACAO)
    depto -- o código do departamento que oferece a disciplina
             (default Departamento.CIC)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    disciplinas = Oferta.turmas(disciplina, depto, nivel, verbose)

    return sum([disciplinas[t]['Alunos Matriculados'] for t in disciplinas])
예제 #15
0
def turmas_reservadas_no_fluxo(habilitacao, filtro_reserva=''):
    '''Mostra a lista de turmas com reserva de vagas das disciplinas do fluxo
    da habilitação dada.

    Argumentos:
    habilitacao -- código da habilitação com disciplinas da oferta
    filtro_reserva -- filtro para reduzir o escopo da busca
                      (default '')
    '''
    fluxo = Cursos.fluxo(habilitacao)

    for periodo in sorted(fluxo.keys()):
        print('Período: %d' % periodo)
        for disciplina in fluxo[periodo]['Disciplinas']:
            turmas = Oferta.turmas(disciplina).items()
            for turma, detalhes in turmas:
                if 'Turma Reservada' in detalhes:
                    for reserva, vagas in detalhes['Turma Reservada'].items():
                        if filtro_reserva in reserva:
                            print('\t  %s (%s) %s %s' % (disciplina, turma,
                                                         reserva, vagas))
예제 #16
0
def turmas_reservadas_no_fluxo(habilitacao, filtro_reserva=''):
    '''Mostra a lista de turmas com reserva de vagas das disciplinas do fluxo
    da habilitação dada.

    Argumentos:
    habilitacao -- código da habilitação com disciplinas da oferta
    filtro_reserva -- filtro para reduzir o escopo da busca
                      (default '')
    '''
    fluxo = Cursos.fluxo(habilitacao)

    for periodo in sorted(fluxo.keys()):
        print('Período: %d' % periodo)
        for disciplina in fluxo[periodo]['Disciplinas']:
            turmas = Oferta.turmas(disciplina).items()
            for turma, detalhes in turmas:
                if 'Turma Reservada' in detalhes:
                    for reserva, vagas in detalhes['Turma Reservada'].items():
                        if filtro_reserva in reserva:
                            print('\t  %s (%s) %s %s' %
                                  (disciplina, turma, reserva, vagas))
예제 #17
0
            for turma, detalhes in turmas:
                if 'Turma Reservada' in detalhes:
                    for reserva, vagas in detalhes['Turma Reservada'].items():
                        if filtro_reserva in reserva:
                            print('\t  %s (%s) %s %s' %
                                  (disciplina, turma, reserva, vagas))


if __name__ == '__main__':
    nivel = Nivel.GRADUACAO
    verbose = False
    depto = str(Departamento.CIC)

    # turmas_reservadas_no_fluxo(6912, 'Mecatrônica')

    oferta = Oferta.disciplinas(depto, nivel, verbose)

    print '\nAlunos matriculados no Departamento %s:' % depto
    for codigo in sorted(oferta, key=oferta.get):
        alunos = alunos_matriculados(codigo, depto, nivel, verbose)
        if alunos > 0:
            print '%s %s (%d alunos)' % (codigo, oferta[codigo], alunos)

    print '\nDemanda não atendida:'
    for codigo in sorted(oferta, key=oferta.get):
        demanda = demanda_nao_atendida(codigo, nivel, verbose)
        if demanda > 0:
            print '%s %s (%d alunos)' % (codigo, oferta[codigo], demanda)

    print '\nOcupação de turmas:'
    habilitacoes = [
예제 #18
0
            for turma, detalhes in turmas:
                if 'Turma Reservada' in detalhes:
                    for reserva, vagas in detalhes['Turma Reservada'].items():
                        if filtro_reserva in reserva:
                            print('\t  %s (%s) %s %s' % (disciplina, turma,
                                                         reserva, vagas))


if __name__ == '__main__':
    nivel = Nivel.GRADUACAO
    verbose = False
    depto = str(Departamento.CIC)

    # turmas_reservadas_no_fluxo(6912, 'Mecatrônica')

    oferta = Oferta.disciplinas(depto, nivel, verbose)

    print '\nAlunos matriculados no Departamento %s:' % depto
    for codigo in sorted(oferta, key=oferta.get):
        alunos = alunos_matriculados(codigo, depto, nivel, verbose)
        if alunos > 0:
            print '%s %s (%d alunos)' % (codigo, oferta[codigo], alunos)

    print '\nDemanda não atendida:'
    for codigo in sorted(oferta, key=oferta.get):
        demanda = demanda_nao_atendida(codigo, nivel, verbose)
        if demanda > 0:
            print '%s %s (%d alunos)' % (codigo, oferta[codigo], demanda)

    print '\nOcupação de turmas:'
    habilitacoes = [Habilitacoes.BCC, Habilitacoes.LIC, Habilitacoes.ENC,