import streamlit as st import pandas as pd import hashlib from sqlalchemy import create_engine from Data import credentials from Data import vistas import os os.chdir('../') from apps import Comentarios class MultiApp: """Framework for combining multiple streamlit applications. Usage: def foo(): st.title("Hello Foo") def bar(): st.title("Hello Bar") app = MultiApp() app.add_app("Foo", foo) app.add_app("Bar", bar) app.run() It is also possible keep each application in a separate file. import foo import bar app = MultiApp() app.add_app("Foo", foo.app) app.add_app("Bar", bar.app) app.run() """ def __init__(self): self.apps = [] def add_app(self, title, func): """Adds a new application. Parameters ---------- func: the python function to render this app. title: title of the app. Appears in the dropdown in the sidebar. """ self.apps.append({ "title": title, "function": func }) def run(self): if len(self.apps) > 1: app = st.selectbox( '', self.apps, format_func=lambda app: app['title']) st.session_state['Subvista'] = app['title'] app['function']() else: self.apps[0]['function']() class Auth: ''' Clase generada para el proceso de autenticación esta clase permite el acceso a las distintas vistas del portal a través de la contraseña y el usuario ''' def __init__(self): self.user = "" self.password = "" self.state = "" self.cargo = "" self.mail = "" def log_in(self, user, password): url = credentials.credentials_postgresql["POSTGRESQL"] engine = create_engine(url, echo=False) credenciales = pd.read_sql_query("""select * from credenciales""", con=engine) credenciales.columns = ['Usuario', 'Password', 'Area', 'Cargo', 'Mail', 'Nombre'] password_enc = hashlib.sha256(password.encode()).hexdigest() credenciales = credenciales[credenciales["Usuario"] == user] if len(credenciales) > 0: passw = credenciales.iloc[0]["Password"] if password_enc == passw: self.area = credenciales.iloc[0]["Area"] self.user = credenciales.iloc[0]["Usuario"] self.mail = credenciales.iloc[0]["Mail"] self.cargo = credenciales.iloc[0]["Cargo"] self.state = password_enc == passw elif password == "": self.state="" else: self.state = False class ViewPortal: ''' Esta clase permite asignar vistas a las distintas areas de LV las vistas distintas vistas desarrolladas y asginar distinas funciones a las vistas correspondientes Para añadir una vista se debe agregar una nueva key en dict_app con el nombre respectivo a esa vista Para agregar una subvista, se debe añadir en el value de la key correspondiente a la vista a la cual se quiere asignar ''' def __init__(self): self.user = "" self.area = "" self.mail= "" dict_area = vistas.areas_port dict_app = vistas.views_port self.dict_apps = dict_app self.dict_area = dict_area def set_user(self, user, area, mail, cargo): self.user = user self.area = area self.mail = mail self.cargo = cargo def set_app(self, dict_apps): self.dict_apps = dict_apps def set_area(self, dict_area): self.dict_area = dict_area def run_views(self): ''' Con la función run_views se corren las vistas asginadas al usuario respectivo, generando las vistas en la sidebar y las subivistas ''' app = MultiApp() menu = self.dict_area[self.area] st.sidebar.subheader("Navegación") if self.user == "alehmann": menu.append("Análisis Inmobiliario") if self.cargo == "PM" or self.user == 'bull': menu.insert(1, "Admin Equity LATAM",) rad = st.sidebar.radio("", menu) if rad == "Home": col1, col2 = st.columns((7, 2)) col1.subheader("Hola " + self.user + ",") col1.title("Bienvenido al Portal LVAM") for name in self.dict_area[self.area]: if rad == name and rad != "Home": st.session_state['Funcion'] = name col1, col2 = st.columns((7, 2)) col1.markdown(""" # {Name} """.format(Name=name)) if rad == "Notas Analistas" and self.cargo == "Investment Analyst": app.add_app("Ingresar nota", Comentarios.ingresar_nota) for aplicacion in list(self.dict_apps[name].keys()): dic = self.dict_apps[name] app.add_app(aplicacion, dic[aplicacion]) # st.write('Para dejar tu feedback accede al siguiente [formulario](https://forms.office.com/Pages/ResponsePage.aspx?id=mpR0wfr-_kmELD83ivOlRhEm1JCbNapEi4UG-t7FamlUM0VNTUU4TFpXNzBQTFM2NEo4RzhWVFk3Si4u)') app.run() col2.image("img/logoDSTD.png")