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', )