doc: Comentários a cada função

fix: remover código morto ou desnecessário
This commit is contained in:
2025-12-13 12:16:20 -01:00
parent 96aaeed19f
commit 3e0814057f
10 changed files with 1287 additions and 468 deletions

View File

@@ -5,43 +5,63 @@ import json
import os
import sys
from datetime import datetime
from typing import Any
import pandas as pd
from utils import parser, crud, stats, utils, visuals, filters
from utils import crud, filters, parser, stats, utils, visuals
HEADER = """=== Terramotos ==="""
EVENT_COLS = ["Data", "Latitude", "Longitude", "Profundidade", "Tipo Evento", "Gap", "Magnitudes", "Regiao", "Sentido", "Pub", "SZ", "VZ"]
STATION_COLS = ["Estacao", "Hora", "Min", "Seg", "Componente", "Distancia Epicentro", "Tipo Onda"]
EVENT_COLS = [
"Data",
"Latitude",
"Longitude",
"Profundidade",
"Tipo Evento",
"Gap",
"Magnitudes",
"Regiao",
"Sentido",
"Pub",
"SZ",
"VZ",
]
STATION_COLS = [
"Estacao",
"Hora",
"Min",
"Seg",
"Componente",
"Distancia Epicentro",
"Tipo Onda",
]
MENU ="""[1] Criar a base de dados
[3] Apagar um evento
[4] Apagar uma entrada de um evento
[5] Visualizar um evento
[6] Guardar como JSON
[7] Guardar como CSV
[8] Estatísticas
[9] Criar uma entrada
[10] Gráficos
[11] Filtros (T7)
MENU = """[1] Criar a base de dados
[2] Apagar um evento
[3] Apagar uma entrada de um evento
[4] Visualizar um evento
[5] Guardar como JSON
[6] Guardar como CSV
[7] Estatísticas
[8] Criar uma entrada
[9] Gráficos
[10] Filtros (T7)
[Q] Sair
"""
def guardar_json(df: pd.DataFrame, fname: str) -> bool:
_retValues = utils.create_dict_struct(df, EVENT_COLS, None)
with open(fname , "w") as fp:
try:
json.dump(_retValues, fp)
except:
return False
return True
def guardar_csv(df: pd.DataFrame, fname: str):
"""Guarda uma DataFrame num ficheiro csv
Args:
df (pd.DataFrame): Dataframe com os dados
fname (str): nome do ficheiro csv
Returns:
bool: Retorna se a operação foi bem sucedida ou não
"""
with open(fname, "w") as fp:
try:
df.to_csv(fp, index=False)
@@ -51,10 +71,16 @@ def guardar_csv(df: pd.DataFrame, fname: str):
def main():
"""Ponto de entrada do programa.
Constituido por um while loop a correr um menu onde o utilizador pode
interagir com os vários módulos implementados.
"""
isRunning = True
db = None
original_db = None
retInfo = None
while isRunning:
@@ -79,10 +105,10 @@ def main():
else:
input("Base de dados não encontrada. Por favor tenta de novo.")
case "3":
case "2":
if db is not None:
crud.read_ids(db)
choice = _get_usr_input("Escolhe o ID para apagar: ", int)
choice: int = _get_usr_input("Escolhe o ID para apagar: ", int)
if not _event_exists(db, choice):
retInfo = "ID do event não encontrado!"
@@ -94,11 +120,10 @@ def main():
else:
retInfo = "Base de dados não encontrada!"
case "4":
case "3":
if db is not None:
crud.read_ids(db)
eid_choice = _get_usr_input("Escolhe o ID: ", int)
eid_choice: int = _get_usr_input("Escolhe o ID: ", int)
if not _event_exists(db, eid_choice):
retInfo = "ID do event não encontrado!"
@@ -119,7 +144,7 @@ def main():
else:
retInfo = "Base de dados não encontrada!"
case "5":
case "4":
if db is not None:
crud.read_ids(db)
choice = _get_usr_input("Escolhe o ID para ver os dados: ", int)
@@ -137,16 +162,16 @@ def main():
else:
retInfo = "Base de dados não encontrada!"
case "6":
case "5":
if db is not None:
fname = _get_usr_input("Nome do ficheiro a guardar? ")
if fname is None:
fname = "valores.json"
utils.save_as_json(db, fname, EVENT_COLS, STATION_COLS)
utils.save_as_json(db, fname, EVENT_COLS)
else:
retInfo = "Base de dados não encontrada!"
case "7":
case "6":
if db is not None:
fname = _get_usr_input("Nome do ficheiro a guardar? ")
if fname is None:
@@ -155,13 +180,13 @@ def main():
else:
retInfo = "Base de dados não encontrada!"
case "8":
case "7":
if db is not None:
stats.stat_menu(db)
else:
retInfo = "Base de dados não encontrada!"
case "9":
case "8":
if db is not None:
crud.read_ids(db)
eid_choice = _get_usr_input("Escolhe o ID: ", int)
@@ -176,7 +201,6 @@ def main():
crud.show_table(table)
insertion_point = _get_usr_input("Posição da nova linha: ", int)
# TODO: balizar a escolha para apenas as linhas do evento em questao
db, msg = crud.create_table_row(db, eid_choice, insertion_point)
new_table = crud.get_table(db, eid_choice)
@@ -185,14 +209,14 @@ def main():
input()
else:
retInfo = "Base de dados não encontrada!"
case "10":
case "9":
if db is not None:
visuals.visual_menu(db)
else:
retInfo = "Base de dados não encontrada!"
case "11":
case "10":
if db is not None:
# Passa db e original_db para o menu de filtros
# Retorna a nova db ativa (filtrada ou redefinida)
@@ -213,30 +237,71 @@ def main():
def _file_exists(name: str) -> bool:
"""Verifica se um ficheiro existe no diretório onde o programa correntemente
corre, através de os.getcwd()
Args:
name (str): Nome do ficheiro a verificar
Returns:
bool: True se existe, False caso contrário
"""
currFiles = os.listdir(os.getcwd())
if name in currFiles:
return True
return False
def _event_exists(df, eid) -> bool:
def _event_exists(df: pd.DataFrame, eid: int) -> bool:
"""Função privada de verificação de eventos
Verifica se um certo ID de evento existe ou não dentro de uma DataFrame
Args:
df (pd.DataFrame): DataFrame a pesquisar
eid (int): Evento específico a pesquisar
Returns:
bool: True se evento existe dentro da DataFrame, False caso contrário
"""
allEvents = set(df["ID"])
return eid in allEvents
def _get_usr_input(msg:str, asType=str):
def _get_usr_input(msg: str, asType: Any = str) -> Any:
"""Modifica o stdin do utilizador para o tipo especificado. Por defeito retorna uma str.
Args:
msg (str): String a ser alterada
asType (Any): tipo no qual msg deverá ser intepretado como (default: `str`)
Returns:
[type]: [description]
"""
usrIn = input(msg)
if usrIn == "":
return None
return asType(usrIn)
def _prettify_event(df):
preambleInfo = df.drop_duplicates(subset="ID", keep="first")
stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
def _prettify_event(df: pd.DataFrame) -> None:
"""Função privada para utilização na visualização de um evento singular através
do menu de `Visualizar um evento`
Args:
df (pd.DataFrame): DataFrame com os dados do evento
"""
# preambleInfo = df.drop_duplicates(subset="ID", keep="first")
# stations = df[["Estacao", "Componente", "Tipo Onda", "Amplitude"]]
info = df.drop_duplicates(subset="Data", keep="first")
data = datetime.fromisoformat(info.Data.values[0]).strftime("%c")
print(f"Região: {info["Regiao"].values[0]}\nData: {data}\nLatitude: {info['Latitude'].values[0]}\nLongitude: {info['Longitude'].values[0]}"
+ f"\nProfundidade: {info['Profundidade'].values[0]}\nTipo de evento: {info['Tipo Evento'].values[0]}\n")
print(
f"Região: {info['Regiao'].values[0]}\nData: {data}\nLatitude: {info['Latitude'].values[0]}\nLongitude: {info['Longitude'].values[0]}"
+ f"\nProfundidade: {info['Profundidade'].values[0]}\nTipo de evento: {info['Tipo Evento'].values[0]}\n"
)
if __name__ == '__main__':
# entry point
if __name__ == "__main__":
main()