From 2dea63ba50d48ab7daec38363811e66c2c5efbc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius?= Date: Sun, 7 Apr 2024 09:16:25 -0300 Subject: [PATCH] dev: update geral --- myCripto_Monitor.py | 91 ++++++++++++++++++++++++++-------------- test_myCrypto_Monitor.py | 18 ++++++-- 2 files changed, 75 insertions(+), 34 deletions(-) diff --git a/myCripto_Monitor.py b/myCripto_Monitor.py index 6398ce4..8253bca 100644 --- a/myCripto_Monitor.py +++ b/myCripto_Monitor.py @@ -9,22 +9,30 @@ from utils.porcentagem import calc_porc from utils.requisição import loop -# Configurando o sistema para R$ +# Configuração do sistema para R$ locale.setlocale(locale.LC_MONETARY, "pt_BR.UTF-8") def monitorar_criptomoeda(nome, lista): - # Realizando as requisições e armazenando os dados em listas para comparações - valor_atual = loop(nome) - lista.append(valor_atual) - valor_formatado = locale.currency(valor_atual, grouping=True) - porcentagem = calc_porc(lista[-2], lista[-1]) if lista[-2] != 1.00 else "Calculando.." + try: + # Realiza a requisição e armazena os dados na lista + valor_atual = loop(nome) + lista.append(valor_atual) - # Determina o estilo com base na variação do valor - style = "green" if valor_atual > lista[-2] else "red" if valor_atual < lista[-2] else "yellow" - - return valor_formatado, porcentagem, style + # Formata o valor e calcula a porcentagem de variação + valor_formatado = locale.currency(valor_atual, grouping=True) + porcentagem = calc_porc(lista[-2], lista[-1]) if lista[-2] != 1.00 else "Calculando.." + + # Determina o estilo com base na variação do valor + style = "green" if valor_atual > lista[-2] else "red" if valor_atual < lista[-2] else "yellow" + + return valor_formatado, porcentagem, style + except Exception as e: + # Em caso de erro, retorna valores vazios e registra a exceção + print(f"Erro ao monitorar {nome}: {e}") + return "", "", "" def criar_tabela(): + # Cria uma tabela vazia com as colunas definidas table = Table(title="") table.add_column("Criptomoeda", justify="center", no_wrap=True) table.add_column("Valor", justify="center") @@ -33,29 +41,50 @@ def criar_tabela(): table.add_column("Porcentagem", justify="center") return table -# Inicializando listas de criptomoedas -criptomoedas = { - "BTC": [1.00], - "ETH": [1.00], - "XRP": [1.00], - "PAXG": [1.00], - "USDC": [1.00] - # ADD NOVAS CRIPTOS AQUI SEGUINDO A MESMA REFERENCIA -} +def main(): + # Inicializa as listas de criptomoedas + criptomoedas = { + "BTC": [1.00], + "ETH": [1.00], + "XRP": [1.00], + "PAXG": [1.00], + "USDC": [1.00] + # Adicione novas criptomoedas aqui seguindo a mesma estrutura + } + + # Imprime o logo e a mensagem de desenvolvimento + logo("Mercado Bitcoin") + print(Panel.fit("Desenvolvido por: Vinícius Azevedo")) + + while True: + try: + # Obtém a data/hora atual + data_hora = obter_hora() + + # Cria uma instância do console Rich + console = Console() + + # Cria uma nova tabela + table = criar_tabela() -logo("Mercado Bitcoin") -print(Panel.fit("Desenvolvido por: Vinícius Azevedo" )) + # Preenche a tabela com os dados das criptomoedas + for nome, lista in criptomoedas.items(): + valor, porcentagem, style = monitorar_criptomoeda(nome.lower(), lista) + table.add_row(nome, str(valor), data_hora, "⬆" if style == "green" else "⬇" if style == "red" else "=", porcentagem, style=style) -while True: - data_hora = obter_hora() - console = Console() + # Imprime a tabela + console.print(table) - table = criar_tabela() + # Aguarda um intervalo de tempo antes de atualizar novamente + time.sleep(30) - for nome, lista in criptomoedas.items(): - valor, porcentagem, style = monitorar_criptomoeda(nome.lower(), lista) - table.add_row(nome, str(valor), data_hora, "⬆" if style == "green" else "⬇" if style == "red" else "=", porcentagem, style=style) + except KeyboardInterrupt: + # Em caso de interrupção pelo usuário (Ctrl+C), encerra o programa + print("\nPrograma encerrado pelo usuário.") + break + except Exception as e: + # Em caso de exceção não tratada, registra o erro e continua a execução + print(f"Erro não tratado: {e}") - console.print(table) - print("==============================================================================") - time.sleep(30) +if __name__ == "__main__": + main() diff --git a/test_myCrypto_Monitor.py b/test_myCrypto_Monitor.py index 1fb7411..e2ed0ad 100644 --- a/test_myCrypto_Monitor.py +++ b/test_myCrypto_Monitor.py @@ -1,6 +1,8 @@ import unittest -from unittest.mock import patch -from myCripto_Monitor import monitorar_criptomoeda, criar_tabela +from unittest.mock import patch, MagicMock +from io import StringIO +import sys +from myCripto_Monitor import monitorar_criptomoeda, criar_tabela, main class TestMyCriptoMonitor(unittest.TestCase): @@ -9,7 +11,7 @@ class TestMyCriptoMonitor(unittest.TestCase): @patch('myCripto_Monitor.calc_porc') def test_monitorar_criptomoeda(self, mock_calc_porc, mock_currency, mock_loop): # Configurando mocks - mock_loop.side_effect = [100, 110] # Simula valores retornados pela função loop + mock_loop.return_value = 100 # Simula valores retornados pela função loop mock_currency.return_value = "R$100,00" # Simula o valor retornado pela função locale.currency mock_calc_porc.return_value = "10%" # Simula o valor retornado pela função calc_porc @@ -29,5 +31,15 @@ def test_criar_tabela(self): self.assertEqual(tabela.columns[3].name, "Status") self.assertEqual(tabela.columns[4].name, "Porcentagem") + @patch('sys.stdout', new_callable=StringIO) + @patch('time.sleep', side_effect=KeyboardInterrupt) + def test_main(self, mock_sleep, mock_stdout): + # Simulando a interrupção do usuário (Ctrl+C) + with self.assertRaises(KeyboardInterrupt): + main() + + # Verificando se a mensagem de encerramento foi impressa + self.assertIn("Programa encerrado pelo usuário.", mock_stdout.getvalue()) + if __name__ == '__main__': unittest.main()