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'])
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'])
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'])
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())
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
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])
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)
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))
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 = [
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,