Skip to content

Commit

Permalink
dev: update geral
Browse files Browse the repository at this point in the history
  • Loading branch information
vmeazevedo committed Apr 7, 2024
1 parent a41e3f2 commit 2dea63b
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 34 deletions.
91 changes: 60 additions & 31 deletions myCripto_Monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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()
18 changes: 15 additions & 3 deletions test_myCrypto_Monitor.py
Original file line number Diff line number Diff line change
@@ -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):

Expand All @@ -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

Expand All @@ -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()

0 comments on commit 2dea63b

Please sign in to comment.