import streamlit as st import pandas as pd from sqlalchemy import create_engine from filter import filter_dataframe import toml import os # 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) 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.header('⛰️ Banco de Dados - GeoCosmos') 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, placeholder="Selecione uma ou mais colunas", default=[] ) if selected_columns: displayed_df = filtered_df[selected_columns] else: displayed_df = filtered_df st.write('Tabela Atualizada') st.dataframe(displayed_df, column_order=selected_columns if selected_columns else None)