Spaces:
Sleeping
Sleeping
File size: 4,687 Bytes
2a1a0bb 9c64c2a 2a1a0bb 9c64c2a 2a1a0bb b2ed3a7 2a1a0bb d974879 beba5c6 7f663ee 4bda1b3 d974879 2a1a0bb beba5c6 2a1a0bb b2ed3a7 2a1a0bb 9c64c2a 2a1a0bb 9c64c2a 2a1a0bb beba5c6 2a1a0bb 9c64c2a 257a3b6 9c64c2a 2a1a0bb ba922c7 51e47a1 ba922c7 51e47a1 ba922c7 217f6f5 f5b5257 ba922c7 217f6f5 965f7c0 f5b5257 ba922c7 27cfdc8 ba922c7 9c64c2a 06e718f 9c64c2a 6c15d60 965f7c0 6c15d60 9c64c2a 2a1a0bb 9c64c2a e5eb1a5 bfdafe7 e5eb1a5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
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()
|