def test_8_define_deleta_tabelas(self): ''' 8 - Definir e deletar tabelas. Ao adicionar as respectivas temporadas no BD, espera-se que a lista das temporadas seja igual à variável "valores". Em seguida, verifica-se a igualdade de ambas perante a remoção de uma temporada. Testa os métodos "define_tabela" e "deleta_tabela". ''' bd = BD(CAMINHO) bd.define_tabela("2020") bd.define_tabela("2021") bd.define_tabela("2022") valores = ["temporada_2020", "temporada_2021", "temporada_2022"] self.assertEqual([x[0] for x in bd.verifica_tabelas()], valores) valores.remove("temporada_2021") bd.deleta_tabela("temporada_2021") self.assertEqual([x[0] for x in bd.verifica_tabelas()], valores) bd.encerra() self.deleta_BD()
def cli(self): ''' Método que inicia a visão CLI. Cria uma instância da classe Cli enviando a lista de BDs encontrados no diretório. O usuário escolhe um BD e uma temporada para iniciar o programa. Em seguida inicia-se um laço que recebe instruções do usuário e executa ações no BD modelado pelo script banco.py ''' def escolha_tabela(): ''' Função invocada para que se defina uma temporada. Caso haja mais de uma, a visão mostra ao usuário opções de escolha; Caso haja apenas uma, esta temporada é escolhida; Caso não haja nenhuma, é criada uma temporada com numeração do ano atual. ''' tabelas = bd.verifica_tabelas() tabelas = [x[0] for x in tabelas] if len(tabelas) > 1: temporada = self.visao.escolhe_temporada(tabelas).replace( "temporada_", "") elif len(tabelas) == 1: temporada = tabelas[0].replace("temporada_", "") else: temporada = datetime.now().year return temporada self.visao = Cli(self.bancos) nome_bd, temporada = self.visao.escolhe_banco() bd = BD(self.diretorio + nome_bd) if temporada == 0: temporada = escolha_tabela() bd.define_tabela(temporada) while True: escolha_menu, parametro = self.visao.menu(nome_bd, bd.tabela) if "Sair" in escolha_menu: bd.encerra() quit() elif "Consultar outras estatísticas" in escolha_menu: estats_1, estats_2, colunas_1, colunas_2 = bd.printa_tabela_2() self.visao.consultar_tabela(estats_1, colunas_1) self.visao.consultar_tabela(estats_2, colunas_2) elif "Alterar BD" in escolha_menu: self.busca_bds() self.bancos.remove(nome_bd) if len(self.bancos) < 1: escolha = self.visao.opcoes_BD("abortar", escolha_menu) else: escolha = self.visao.opcoes_BD(self.bancos, escolha_menu) if "Sair" not in escolha: bd.encerra() bd = BD(self.diretorio + escolha) nome_bd = escolha temporada = escolha_tabela() bd.define_tabela(temporada) elif "Deletar BD" in escolha_menu: self.busca_bds() self.bancos.remove(nome_bd) if len(self.bancos) < 1: escolha = self.visao.opcoes_BD("abortar", escolha_menu) else: escolha = self.visao.opcoes_BD(self.bancos, escolha_menu) if "Sair" not in escolha: if os.path.isfile(self.diretorio + escolha): os.remove(self.diretorio + escolha) elif "Deletar temporada" in escolha_menu: escolha = self.visao.deletar_temporada(bd.verifica_tabelas(), parametro) if "Sair" not in escolha: bd.deleta_tabela(escolha) elif "Alterar/Criar temporada" in escolha_menu: escolha, temporada = self.visao.alterar_temporada( bd.verifica_tabelas(), bd.tabela) if "Criar nova temporada" in escolha: bd.tabela = f"temporada_{temporada}" bd.cria_tabela() elif "temporada_" in escolha: bd.tabela = escolha elif "Consultar estatísticas" in escolha_menu: dados = bd.printa_tabela() self.visao.consultar_tabela(dados[0], dados[1]) elif "Adicionar um jogo" in escolha_menu: itens_serie = bd.retorna_tabela("inteira") if len(itens_serie) > 0: ultima_linha = bd.retorna_tabela("última linha")[0][2:] placar_min, placar_max, quebra_min, quebra_max = ultima_linha tipo = "normal" if parametro < placar_min: tipo = "novo mínimo" quebra_min += 1 print( "Um novo placar mínimo foi registrado na temporada!" ) elif parametro > placar_max: tipo = "novo máximo" quebra_max += 1 print( "Um novo placar máximo foi registrado na temporada!" ) bd.adiciona_placar([ parametro, placar_min, placar_max, quebra_min, quebra_max ], tipo) else: bd.adiciona_placar(parametro, "primeiro jogo")
class ControladorGui: ''' Classe que atua como controlador do programa quando se utiliza interface gráfica. ''' def __init__(self): ''' A classe inicializa o método "busca_bds" para que se tenha uma lista de BDs. ''' self.busca_bds() def busca_bds(self): ''' Método que faz uma busca pelos bancos de dados no diretório do programa ''' self.diretorio = os.path.dirname(__file__) + "\\BD\\" self.bancos = [file for file in os.listdir(self.diretorio) if file.endswith(".db")] def conecta(self, nome_bd): ''' Método que inicia uma conexão com o BD. Parâmetro: ---------- nome_bd : str Nome do BD a ser conectado. ''' self.bd = BD(nome_bd) def encerra(self): ''' Método que encerra uma conexão com o BD. ''' self.bd.encerra() def altera_cria_bd(self, param): ''' Método que altera ou cria um BD. Primeiro encerra a atual conexão e então cria uma nova com base nos parâmetros recebidos. Em seguida, define qual tabela será usada no BD. Retorna para interface gráfica informações para que possam ser definidas as variáveis globais relativas aos nomes do BD e da temporada em uso no script gui.py. Parâmetro: ---------- param : list Lista que contem o nome do banco e a numeração da temporada. ''' self.encerra() self.conecta(f".\\BD\\{param[0]}") if param[1] != None: self.tabela("escolhe", param[1]) return param[1] else: try: self.tabela("escolhe", self.tabela("consulta")[0]) return self.tabela("consulta")[0] except: self.tabela("escolhe", str(datetime.now().year)) return str(datetime.now().year) def tabela(self, tipo, param = ""): ''' Método que consulta as tabelas do BD ou define uma. Se o tipo escolhido for "consulta", retorna uma lista das temporadas existentes no BD. Parâmetros: ---------- tipo : str Qual tipo de ação o método deve executar. param : str (opcional) Parâmetro relativo a numeração da temporada. ''' if tipo == "consulta": return [x[0].replace("temporada_", "") for x in self.bd.verifica_tabelas()] if tipo == "escolhe": self.bd.define_tabela(param) def retorna_dados(self): ''' Método para retornar dados da tabela ativa no BD. Retorna: uma lista com a tabela inteira; duas listas, uma com os cinco melhores e outra com os cinco piores placares registrados; a soma dos placares registrados. ''' return self.bd.retorna_tabela("inteira"), self.bd.top_5("lista"), self.bd.top_5_piores("lista"), self.bd.soma_placares() def altera_cria_temp(self, etapa, param = ""): ''' Método que fornece informações ou executa ações na tabela ativa no BD. O método pode retornar à interface GUI uma lista com as tabelas ativas bem como o nome da atual tabela em uso. Parâmetros: ---------- etapa : str Indica ao método qual tipo de ação a executar. param : str (opcional) Parâmetro relativo a numeração da temporada. ''' if etapa == "inicial": tabelas = self.bd.verifica_tabelas() tabelas = [x[0] for x in tabelas] tabelas.remove(self.bd.tabela) return tabelas, self.bd.tabela if etapa == "criação": self.bd.tabela = f"temporada_{param}" self.bd.cria_tabela() if etapa == "alterar": self.bd.tabela = param def deletar(self, etapa, param = ""): ''' Método que possibilita deletar um BD ou uma temporada. Parâmetros: ---------- etapa : str Indica ao método qual tipo de ação a executar. param : str (opcional) Parâmetro relativo a numeração da temporada. ''' if etapa == "deletar temporada": self.bd.deleta_tabela(param) if etapa == "deletar BD": if os.path.isfile(self.diretorio + param): os.remove(self.diretorio + param) def add_placar(self, placar): ''' Método que envia da interface gráfica ao BD o placar a ser adicionado. Efetua verificações se o novo placar quebra os recordes mínimos ou máximos da temporada. Retorna à interface o tipo de inserção na tabela: se gerou um novo placar máximo; se gerou um novo placar mínimo; se não gerou nenhuma quebra de recorde; se foi o primeiro jogo da tabela. Parâmetro: ---------- placar : int Qual o placar a ser adicionado na tabela. ''' tipo = "normal" if len(self.bd.retorna_tabela("inteira")) > 0: ultima_linha = self.bd.retorna_tabela("última linha")[0][2:] placar_min, placar_max, quebra_min, quebra_max = ultima_linha if placar < placar_min: tipo = "novo mínimo" quebra_min += 1 elif placar > placar_max: tipo = "novo máximo" quebra_max += 1 self.bd.adiciona_placar([placar, placar_min, placar_max, quebra_min, quebra_max], tipo) else: self.bd.adiciona_placar(placar, "primeiro jogo") return tipo