Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
from sqlalchemy import create_engine | |
from filter import filter_dataframe | |
import toml | |
import os | |
# Caminho para o arquivo secrets.toml na pasta .streamlit | |
secrets_path = os.path.join(".streamlit", "secrets.toml") | |
# Verificar se o arquivo secrets.toml existe | |
if not os.path.isfile(secrets_path): | |
st.error("O arquivo 'secrets.toml' não foi encontrado. Certifique-se de que ele está na pasta '.streamlit'.") | |
st.stop() | |
# Carregar as informações de secrets.toml | |
secrets = toml.load(secrets_path) | |
# Dados de login | |
USERNAME = secrets["login"]["username"] | |
PASSWORD = secrets["login"]["password"] | |
# 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.title('Tela de Login') | |
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: | |
db_config = secrets["database"] | |
dialect = db_config["dialect"] | |
driver = db_config["driver"] | |
username = db_config["username"] | |
password = db_config["password"] | |
host = db_config["host"] | |
port = db_config["port"] | |
database = db_config["database"] | |
connection_url = f"{dialect}+{driver}://{username}:{password}@{host}:{port}/{database}" | |
engine = create_engine(connection_url) | |
with open('query.sql', 'r', encoding='utf-8') as file: | |
query = file.read() | |
df = pd.read_sql(query, engine) | |
return df | |
# 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.title('Tabela Future Mining') | |
df = load_data() | |
filtered_df = filter_dataframe(df) | |
all_columns = filtered_df.columns.tolist() | |
selected_columns = st.multiselect( | |
'Escolha as colunas para exibir:', | |
options=all_columns, | |
default=[] | |
) | |
if selected_columns: | |
displayed_df = filtered_df[selected_columns] | |
else: | |
displayed_df = filtered_df | |
st.write('Tabela com Colunas Selecionadas') | |
st.dataframe(displayed_df, column_order=selected_columns if selected_columns else None) | |
# Botão para download | |
csv = convert_df_to_csv(displayed_df) | |
st.download_button( | |
label="Baixar CSV", | |
data=csv, | |
file_name='dados_filtrados.csv', | |
mime='text/csv', | |
) | |