class ControladorCli: ''' Classe que atua como controlador do programa quando a interface é por linha de comando. ''' def __init__(self): ''' A classe inicializa dois métodos. O primeiro faz uma busca pelos bancos de dados no diretório do programa; O segundo inicia a visão CLI. ''' self.busca_bds() self.cli() 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 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")