Files
crypto_portfolio/modulos/aux.py
2025-03-24 19:57:10 +00:00

81 lines
2.7 KiB
Python

# script com funções auxiliares
import csv
# gravar dados importados para ficheiro csv
def gravar_dados_ficheiro_csv(
nome_ficheiro: str, dados_importados: list, campos: list
) -> None:
"""
Guarda dados em um ficheiro CSV.
Args:
nome_ficheiro (str): O nome do ficheiro CSV.
dados_importados (list): Uma lista de dicionários com os dados a serem
gravados.
campos (list): Uma lista com os nomes dos campos a serem gravados.
Raises:
ValueError: Se algum dos argumentos não for do tipo esperado.
Returns:
None
"""
# validacao de parametros da funcao
if not isinstance(nome_ficheiro, str):
raise ValueError("'nome_ficheiro' não é do tipo 'str'")
if not isinstance(dados_importados, list):
raise ValueError("'dados_importados' não é do tipo 'list'")
if not isinstance(campos, list):
raise ValueError("'campos' não é do tipo 'list'")
with open(nome_ficheiro, "w", newline="") as ficheiro_csv_historico_precos:
ficheiroCSV = csv.DictWriter(ficheiro_csv_historico_precos, fieldnames=campos)
ficheiroCSV.writeheader()
ficheiroCSV.writerows(dados_importados)
# carregar dados de ficheiro csv e guardar em lista
def carregar_dados_ficheiro_csv(nome_ficheiro: str, campos: list) -> list:
"""
Carrega dados de um ficheiro CSV e retorna uma lista de dicionários.
Args:
nome_ficheiro (str): O nome do ficheiro CSV.
campos (list): Uma lista de nomes de campos correspondentes aos
chaves dos dicionários.
Raises:
ValueError: Se algum dos argumentos for inválido.
Returns:
list: Uma lista de dicionários contendo os dados do ficheiro CSV.
"""
# validacao de metodos da funcao
if not isinstance(nome_ficheiro, str):
raise ValueError("'nome_ficheiro' não é do tipo 'str'")
if not isinstance(campos, list):
raise ValueError("'campos' não é do tipo 'list'")
with open(nome_ficheiro, "r", newline="") as ficheiro_csv_historico_precos:
ficheiroCSV = csv.DictReader(ficheiro_csv_historico_precos, fieldnames=campos)
lista_linhas_ficheiro_csv: list = []
for linha in ficheiroCSV:
lista_linhas_ficheiro_csv.append(linha)
return lista_linhas_ficheiro_csv
# validar chave API http://192.168.1.131:3000/sanctus/crypto_portfolio/issues/1
def validarChaveAPI(chave_api: str) -> bool:
# remover espaços em branco
chave_api.strip()
# chave invalida se tamanho for diferente de 27 ('CG-' + 24)
if len(chave_api) != 27:
return False
# chave inválida se primeiros 3 caracteres forem diferentes de 'CG-'
if len(chave_api) >= 3 and chave_api[0:3] != "CG-":
return False
return True