GeoCosmos / Início.py
emidiosouza's picture
fix: "Nome documento" to "Nome do documento"
965f7c0 verified
raw
history blame
4.69 kB
import streamlit as st
import pandas as pd
from sqlalchemy import create_engine, MetaData, Table, delete
from sqlalchemy.orm import sessionmaker
from filter import filter_dataframe
import os
import time
# Dados de login
USERNAME = os.getenv("username")
PASSWORD = os.getenv("password")
# Configurações da página
st.set_page_config(
page_title="Banco de Dados - GeoCosmos",
page_icon="⛰️",
layout="wide"
)
# Função para autenticação do usuário
def authenticate_user(username: str, password: str) -> bool:
return username == USERNAME and password == PASSWORD
# Tela de login
def login_screen():
st.subheader('⛰️ Banco de Dados - GeoCosmos')
with st.form(key='login_form'):
username = st.text_input("Nome de usuário")
password = st.text_input("Senha", type='password')
# Botão para submeter o formulário
submit_button = st.form_submit_button('Entrar')
if submit_button:
if authenticate_user(username, password):
st.session_state['logged_in'] = True
st.rerun()
else:
st.error('Nome de usuário ou senha inválidos')
# Função para ler dados da tabela SQL a partir de um arquivo
def load_data() -> pd.DataFrame:
# Acesse as variáveis de ambiente
dialect = os.getenv("DB_DIALECT")
driver = os.getenv("DB_DRIVER")
username = os.getenv("DB_USERNAME")
password = os.getenv("DB_PASSWORD")
host = os.getenv("DB_HOST")
port = os.getenv("DB_PORT")
database = os.getenv("DB_DATABASE")
connection_url = f"{dialect}+{driver}://{username}:{password}@{host}:{port}/{database}"
engine = create_engine(connection_url)
Session = sessionmaker(bind=engine)
session = Session()
with open('query.sql', 'r', encoding='utf-8') as file:
query = file.read()
df = pd.read_sql(query, engine)
return df, engine, session
# Função para deletar linhas selecionadas
def delete_selected_rows(selected_ids, engine, session):
meta = MetaData()
table = Table('Extraction', meta, autoload_with=engine)
with session.begin():
for id_value in selected_ids:
stmt = delete(table).where(table.c.id == id_value)
session.execute(stmt)
session.commit()
# Função para download dos dados como CSV
def convert_df_to_csv(df):
return df.to_csv(index=False).encode('utf-8')
# Verificar o estado de login
if 'logged_in' not in st.session_state:
st.session_state['logged_in'] = False
# Se o usuário não está logado, exibe a tela de login
if not st.session_state['logged_in']:
login_screen()
else:
st.header('⛰️ Banco de Dados - GeoCosmos')
df, engine, session = load_data()
# Aplica o filtro ao dataframe
filtered_df = filter_dataframe(df)
all_columns = filtered_df.columns.tolist()
selected_columns = st.multiselect(
'Escolha as colunas para exibir:',
options=[column for column in all_columns if column != 'id'],
placeholder="Selecione uma ou mais colunas",
default=[]
)
if selected_columns:
selected_columns.append('id')
selected_columns.append('Nome do documento')
displayed_df = filtered_df[selected_columns]
else:
displayed_df = filtered_df
# Adiciona a coluna de seleção
displayed_df.insert(0, 'Seleção', False)
# Exibe o dataframe filtrado com checkboxes para seleção
edited_df = st.data_editor(displayed_df, disabled=[col for col in displayed_df.columns if col != 'Seleção'], hide_index=False, column_order = [col for col in displayed_df.columns if col != 'id'])
# Verifica se há pelo menos um checkbox selecionado
selected_ids = edited_df.loc[edited_df['Seleção'], 'id'].tolist()
# Pega os nomes dos documentos selecionados
selected_docs = edited_df.loc[edited_df['Seleção'], 'Nome do documento'].tolist()
if selected_ids:
with st.popover("APAGAR"):
st.warning("Você está prestes a apagar dados. Esta ação não pode ser desfeita.")
confirmation = st.text_input("Digite 'APAGAR' e pressione ENTER para confirmar a deleção:")
if confirmation == "APAGAR":
if st.button("CONFIRMAR"):
with st.spinner('Delentando arquivos...'):
delete_selected_rows(selected_ids, engine, session)
st.success(f'Os seguintes documentos foram apagados: {selected_docs}')
selected_ids = []
time.sleep(3)
st.rerun()