Esempio n. 1
0
    def test_curriculo(self):
        opcao = 6912  # Mecatrônica
        disciplinas = Cursos.curriculo(opcao,
                                       nivel=Nivel.GRADUACAO,
                                       verbose=False)

        self.assertIn('obrigatórias', disciplinas)
        self.assertIn('167657', disciplinas['obrigatórias'])
        disciplina = disciplinas['obrigatórias']['167657']
        self.assertIn('Nome', disciplina)
        self.assertEqual('CONTROLE PARA AUTOMAÇÃO', disciplina['Nome'])
        self.assertIn('Créditos', disciplina)
        self.assertIn('Teoria', disciplina['Créditos'])
        self.assertEqual(3, disciplina['Créditos']['Teoria'])
        self.assertIn('Prática', disciplina['Créditos'])
        self.assertEqual(1, disciplina['Créditos']['Prática'])
        self.assertIn('Extensão', disciplina['Créditos'])
        self.assertEqual(0, disciplina['Créditos']['Extensão'])
        self.assertIn('Estudo', disciplina['Créditos'])
        self.assertEqual(4, disciplina['Créditos']['Estudo'])
        self.assertIn('Área', disciplina)
        self.assertEqual('AC', disciplina['Área'])

        self.assertIn('cadeias', disciplinas)
        self.assertIn('6', disciplinas['cadeias'])
        for item in disciplinas['cadeias']['6']:
            self.assertTrue(('167011' in item)
                            or ('111830' in item and '111848' in item))

        self.assertIn('optativas', disciplinas)
        self.assertIn('113417', disciplinas['optativas'])
Esempio n. 2
0
def lista_obrigatorias(habilitacoes, deptos, nivel=Nivel.GRADUACAO,
                       campus=Campus.DARCY_RIBEIRO, verbose=False):
    '''Retorna, para cada curso dado, um dicionário contendo as disciplinas
    consideradas obrigatórias: as listadas como tal no currículo e as listadas
    como cadeias/ciclos).

    Argumentos:
    habilitacoes -- coleção de códigos de habilitações com disciplinas (da
                    oferta) em seus currículos
    deptos -- coleção de siglas de departamentos da UnB para os quais se deseja
              identificar as disciplinas obrigatórias
    nivel -- nível acadêmico das disciplinas buscadas
             (default Nivel.GRADUACAO)
    campus -- o campus onde a habilitação é oferecida
              (default Campus.DARCY_RIBEIRO)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    lista = {}
    for opcao in habilitacoes:
        lista[opcao] = {}
        curriculo = Cursos.curriculo(opcao, nivel, verbose)
        obrigatorias = curriculo.get('obrigatórias')
        for ciclo in curriculo.get('cadeias'):
            for item in curriculo['cadeias'][ciclo]:
                obrigatorias.update(item)
        for disciplina in obrigatorias:
            infos = Disciplina.informacoes(disciplina, nivel, verbose)
            depto = infos.get('Sigla do Departamento')
            if depto in deptos:
                if depto not in lista[opcao]:
                    lista[opcao][depto] = {}
                lista[opcao][depto][disciplina] = infos['Denominação']
    return lista
Esempio n. 3
0
    def test_curriculo(self):
        opcao = 6912  # Mecatrônica
        disciplinas = Cursos.curriculo(opcao, nivel=Nivel.GRADUACAO,
                                       verbose=False)

        self.assertIn('obrigatórias', disciplinas)
        self.assertIn('167657', disciplinas['obrigatórias'])
        disciplina = disciplinas['obrigatórias']['167657']
        self.assertIn('Nome', disciplina)
        self.assertEqual('CONTROLE PARA AUTOMAÇÃO', disciplina['Nome'])
        self.assertIn('Créditos', disciplina)
        self.assertIn('Teoria', disciplina['Créditos'])
        self.assertEqual(3, disciplina['Créditos']['Teoria'])
        self.assertIn('Prática', disciplina['Créditos'])
        self.assertEqual(1, disciplina['Créditos']['Prática'])
        self.assertIn('Extensão', disciplina['Créditos'])
        self.assertEqual(0, disciplina['Créditos']['Extensão'])
        self.assertIn('Estudo', disciplina['Créditos'])
        self.assertEqual(4, disciplina['Créditos']['Estudo'])
        self.assertIn('Área', disciplina)
        self.assertEqual('AC', disciplina['Área'])

        self.assertIn('cadeias', disciplinas)
        self.assertIn('6', disciplinas['cadeias'])
        for item in disciplinas['cadeias']['6']:
            self.assertTrue(('167011' in item) or
                            ('111830' in item and '111848' in item))

        self.assertIn('optativas', disciplinas)
        self.assertIn('113417', disciplinas['optativas'])
Esempio n. 4
0
    def test_habilitacoes(self):
        curso = 949  # Eng. Mecatrônica
        habilitacoes = Cursos.habilitacoes(curso, nivel=Nivel.GRADUACAO,
                                           campus=Campus.DARCY_RIBEIRO,
                                           verbose=False)

        self.assertIn('6912', habilitacoes)
        habilitacao = habilitacoes['6912']
        self.assertIn('Nome', habilitacao)
        self.assertEqual('Engenharia de Controle e Automação',
                         habilitacao['Nome'])
        self.assertIn('Grau', habilitacao)
        self.assertEqual('Engenheiro de Controle e Automação',
                         habilitacao['Grau'])
        self.assertIn('Limite mínimo de permanência', habilitacao)
        self.assertEqual('8',
                         habilitacao['Limite mínimo de permanência'])
        self.assertIn('Limite máximo de permanência', habilitacao)
        self.assertEqual('18',
                         habilitacao['Limite máximo de permanência'])
        self.assertIn('Créditos para Formatura', habilitacao)
        self.assertEqual('274',
                         habilitacao['Créditos para Formatura'])
        self.assertIn('Mínimo de Créditos Optativos na Área de Concentração',
                      habilitacao)
        self.assertEqual('0', habilitacao['Mínimo de Créditos Optativos na '
                                          'Área de Concentração'])
        self.assertIn('Quantidade mínima de Créditos Optativos na Área Conexa',
                      habilitacao)
        self.assertEqual('0', habilitacao['Quantidade mínima de Créditos '
                                          'Optativos na Área Conexa'])
        self.assertIn('Quantidade máxima de Créditos no Módulo Livre',
                      habilitacao)
        self.assertEqual('24', habilitacao['Quantidade máxima de Créditos no '
                                           'Módulo Livre'])
Esempio n. 5
0
    def test_relacao(self):
        cursos = Cursos.relacao(nivel=Nivel.GRADUACAO,
                                campus=Campus.DARCY_RIBEIRO, verbose=False)

        # Códigos selecionados aleatoriamente
        for curso in ['19', '264', '1511', '230', '1414', '281', '451',
                      '167', '1163', '299']:
            self.assertIn(curso, cursos)
Esempio n. 6
0
    def test_relacao(self):
        cursos = Cursos.relacao(nivel=Nivel.GRADUACAO,
                                campus=Campus.DARCY_RIBEIRO,
                                verbose=False)

        # Códigos selecionados aleatoriamente
        for curso in [
                '19', '264', '1511', '230', '1414', '281', '451', '167',
                '1163', '299'
        ]:
            self.assertIn(curso, cursos)
Esempio n. 7
0
    def test_curriculoCrawler():
        opcao = '1856'  # Ciência da Comp.
        curriculo = Cursos.curriculo(opcao,
                                     nivel=Nivel.GRADUACAO,
                                     verbose=False)

        jsonOutput = json.dumps(
            curriculo, ensure_ascii=False)  #15.8 KB de dados para opção 1856
        outFile = open(Main.curriculoFileName, 'w')

        outFile.write(jsonOutput)
        outFile.close()
Esempio n. 8
0
    def test_fluxo(self):
        opcao = 1741  # Eng. Computação
        fluxo = Cursos.fluxo(opcao, nivel=Nivel.GRADUACAO, verbose=False)

        for p in range(1, 11):
            self.assertIn(p, fluxo)

        oitavo_periodo = fluxo[8]
        self.assertIn('Créditos', oitavo_periodo)
        self.assertEqual('16', oitavo_periodo['Créditos'])

        self.assertIn('Disciplinas', oitavo_periodo)
        for d in ['168921', '184802', '207438']:
            self.assertIn(d, oitavo_periodo['Disciplinas'])
Esempio n. 9
0
    def test_fluxo(self):
        opcao = 1741  # Eng. Computação
        fluxo = Cursos.fluxo(opcao, nivel=Nivel.GRADUACAO, verbose=False)

        for p in range(1, 11):
            self.assertIn(p, fluxo)

        oitavo_periodo = fluxo[8]
        self.assertIn('Créditos', oitavo_periodo)
        self.assertEqual('16', oitavo_periodo['Créditos'])

        self.assertIn('Disciplinas', oitavo_periodo)
        for d in ['168921', '184802', '207438']:
            self.assertIn(d, oitavo_periodo['Disciplinas'])
Esempio n. 10
0
    def test_fluxoCrawler():
        opcao = '1856'  # Ciência da Comp.
        fluxo = Cursos.fluxo(opcao, nivel=Nivel.GRADUACAO, verbose=False)

        numSemestres = len(fluxo)
        outFile = open(Main.fluxoFileName, 'w')

        csvText = str(numSemestres) + '\n'
        for idx in fluxo:
            line = ""
            for disciplina_cod in fluxo[idx]['Disciplinas']:
                line = line + str(disciplina_cod) + ', '
            csvText = csvText + line[:-2] + '\n'
        outFile.write(csvText)
        outFile.close()
Esempio n. 11
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))
Esempio n. 12
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))
Esempio n. 13
0
def lista_obrigatorias(habilitacoes,
                       deptos,
                       nivel=Nivel.GRADUACAO,
                       campus=Campus.DARCY_RIBEIRO,
                       verbose=False):
    '''Retorna, para cada curso dado, um dicionário contendo as disciplinas
    consideradas obrigatórias: as listadas como tal no currículo e as listadas
    como cadeias/ciclos).

    Argumentos:
    habilitacoes -- coleção de códigos de habilitações com disciplinas (da
                    oferta) em seus currículos
    deptos -- coleção de siglas de departamentos da UnB para os quais se deseja
              identificar as disciplinas obrigatórias
    nivel -- nível acadêmico das disciplinas buscadas
             (default Nivel.GRADUACAO)
    campus -- o campus onde a habilitação é oferecida
              (default Campus.DARCY_RIBEIRO)
    verbose -- indicação dos procedimentos sendo adotados
               (default False)
    '''
    lista = {}
    for opcao in habilitacoes:
        lista[opcao] = {}
        curriculo = Cursos.curriculo(opcao, nivel, verbose)
        obrigatorias = curriculo.get('obrigatórias')
        for ciclo in curriculo.get('cadeias'):
            for item in curriculo['cadeias'][ciclo]:
                obrigatorias.update(item)
        for disciplina in obrigatorias:
            infos = Disciplina.informacoes(disciplina, nivel, verbose)
            depto = infos.get('Sigla do Departamento')
            if depto in deptos:
                if depto not in lista[opcao]:
                    lista[opcao][depto] = {}
                lista[opcao][depto][disciplina] = infos['Denominação']
    return lista
Esempio n. 14
0
    def test_habilitacoes(self):
        curso = 949  # Eng. Mecatrônica
        habilitacoes = Cursos.habilitacoes(curso,
                                           nivel=Nivel.GRADUACAO,
                                           campus=Campus.DARCY_RIBEIRO,
                                           verbose=False)

        self.assertIn('6912', habilitacoes)
        habilitacao = habilitacoes['6912']
        self.assertIn('Nome', habilitacao)
        self.assertEqual('Engenharia de Controle e Automação',
                         habilitacao['Nome'])
        self.assertIn('Grau', habilitacao)
        self.assertEqual('Engenheiro de Controle e Automação',
                         habilitacao['Grau'])
        self.assertIn('Limite mínimo de permanência', habilitacao)
        self.assertEqual('8', habilitacao['Limite mínimo de permanência'])
        self.assertIn('Limite máximo de permanência', habilitacao)
        self.assertEqual('18', habilitacao['Limite máximo de permanência'])
        self.assertIn('Créditos para Formatura', habilitacao)
        self.assertEqual('274', habilitacao['Créditos para Formatura'])
        self.assertIn('Mínimo de Créditos Optativos na Área de Concentração',
                      habilitacao)
        self.assertEqual(
            '0', habilitacao['Mínimo de Créditos Optativos na '
                             'Área de Concentração'])
        self.assertIn('Quantidade mínima de Créditos Optativos na Área Conexa',
                      habilitacao)
        self.assertEqual(
            '0', habilitacao['Quantidade mínima de Créditos '
                             'Optativos na Área Conexa'])
        self.assertIn('Quantidade máxima de Créditos no Módulo Livre',
                      habilitacao)
        self.assertEqual(
            '24', habilitacao['Quantidade máxima de Créditos no '
                              'Módulo Livre'])
Esempio n. 15
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
Esempio n. 16
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
Esempio n. 17
0
    def curriculoCrawler(opcao='1856'):  #Ciência da Comp.
        try:
            outFile = open(
                Main.fluxoFileName, 'w', newline=''
            )  #py2.7 needs to open as wb (http://stackoverflow.com/a/3348664)
        except:
            print('(E) Nao foi possível abrir arquivo de saída ({0}).'.format(
                Main.fluxoFileName))
            return False

        curriculo = Cursos.curriculo(opcao,
                                     nivel=Nivel.GRADUACAO,
                                     verbose=False)

        #caso base onde somente disciplinas obrigatorias são consideradas
        obg = curriculo['optativas']
        if (len(obg) == 0):
            print('(E) Falha ao exportar disciplinas. Verifique o código do curso ({0})'\
             ' e/ou a conexao com a internet.'.format(opcao)\
             )
            return False

        disciplinaList = []
        idx = 0
        cod_toID = {}
        for cod in obg:

            cre_info = obg[cod]['Créditos']
            nom_info = obg[cod]['Nome']

            cre_total = 0
            cre_total += cre_info['Teoria']
            cre_total += cre_info['Prática']

            req_info = mwDisciplina.pre_requisitos(cod,
                                                   nivel=Nivel.GRADUACAO,
                                                   verbose=False)
            reqList = []
            if (len(req_info) > 0):
                reqList = req_info[0]  # ignorar [[cod,cod...] OU [cod,...]]

            newDisciplina = Disciplina(cod)
            newDisciplina.creditos = cre_total
            newDisciplina.nome = nom_info
            newDisciplina.fator = 0
            newDisciplina.requisitos = reqList
            disciplinaList.append(newDisciplina)

            cod_toID[cod] = idx
            idx += 1

        #Export to csv
        csvWriter = csv.writer(outFile, dialect='excel')

        csvWriter.writerow([
            'CODIGO (Cod)', 'NOME (N)', 'CREDITOS (Cr)', 'FATOR (f)',
            'REQUISITOS...'
        ])

        print('(I) Encontrada(s) {0} disciplinas.'.format(len(disciplinaList)))
        for disc in disciplinaList:
            req = disc.requisitos
            if (idConversionEnabled):
                req = []
                for cod in disc.requisitos:
                    try:
                        req.append(cod_toID[cod])
                    except KeyError:  #semantically this should not happen but just in case
                        req.append(-1)

            csvWriter.writerow([disc.codigo, disc.nome, disc.creditos, ''] +
                               req)

        outFile.close()
        return True