import streamlit as BaseBuilder from PIL import Image import json class Page(): def __init__(self): self.__ = BaseBuilder self.imgg = Image def page(self): return self.__ def new_page(self, title: str, icon=str(), color_divider="rainbow"): self.page().set_page_config(page_title=title, page_icon=icon, layout="wide") self.page().title(f"Clasificación de imágenes con Visión Artificial", anchor="titulo-proyecto", help=None) self.page().subheader(f"{title} {icon}", anchor="titulo-pagina", divider=color_divider, help=None) self.check_password() def new_body(self, new=False): self.__body = BaseBuilder.empty() if new else self.page().container() def get_body(self): return self.__body def init_globals(self, globals=dict({})): for _k, _v in globals.items(): if self.get_global(_k,None) is None: self.set_global(_k, _v) def set_global(self, key=str(), value=None): self.page().session_state[key] = value def get_global(self, key=str(), default=None, is_secret=False): if is_secret: return self.page().secrets.get(key, default) else: return self.page().session_state.get(key, default) def cargar_css(self, archivo_css=str("default")): ruta = f"core/estilos/{archivo_css}.css" try: with open(ruta) as archivo: self.page().markdown( f'', unsafe_allow_html=True) except Exception as er: print(f"Error:\n{er}") def check_password(self): if self.user_logged_in(): self.page().sidebar.success("👨‍💻 Conectado") self.page().sidebar.button("Logout", use_container_width=True, type="primary", on_click=self.logout) return True else: self.page().sidebar.subheader("# ¡👨‍💻 Desbloquea todas las funciones!") self.page().sidebar.write("¡Ingresa tu Usuario y Contraseña!") self.page().sidebar.text_input("Usuario", value="", on_change=self.login, key="USUARIO") self.page().sidebar.text_input("Password", type="password", on_change=self.login, key="PASSWORD", value="") self.page().sidebar.button("LogIn", use_container_width=True, on_click=self.login) return False def user_logged_in(self): return self.get_global('logged_in', False) def login(self): _config = self.get_global('PRIVATE_CONFIG', dict({}), True) _usuario = self.get_global("USUARIO") _registros = self.get_global("registros", None, True) _factor = int(_config['FPSSWD']) if self.codificar(_usuario, _factor) in _registros: if self.codificar(self.get_global("PASSWORD"), _factor) == _registros[self.codificar(_usuario, _factor)]: del self.page().session_state["USUARIO"] del self.page().session_state["PASSWORD"] self.set_global('hf_key', _config['HUGGINGFACE_KEY']) self.set_global('logged_in', True) else: self.logout("😕 Ups! Contraseña Incorrecta") else: self.logout("😕 Ups! Nombre de Usuario Incorrecto") def logout(self, mensaje=str("¡Vuelva Pronto!")): self.page().sidebar.error(mensaje) self.set_global('hf_key') self.set_global('logged_in') @staticmethod def codificar(palabra=str(), modificador=None): # Acepta: # ABCDEFGHIJKLMNOPQRSTUVWXYZ # abcdefghijklmnopqrstuvwxyz # 1234567890!#$-_=%&/()*[] codigo = str() try: for _byte in bytearray(palabra.strip(), 'utf-8'): # x = f(y) => la variable 'x' estará en función de la variable 'y' # Si ... f(y) = y² * k => donde: # x es el valor decimal del input en bytes # modificador es un número real variable, definido por el usuario _y = int(format(_byte, 'b'), 2) _x = int(pow(_y, 2) * modificador) # magia codigo = f" {bin(_x)}{codigo}" except Exception as error: print(f"Error Codificando:\n{error}") return codigo.strip() @staticmethod def decodificar(codigo=str(), modificador=None): # SOLO DECODIFICA SU ECUACIÓN INVERSA... palabra = str() try: for _byte_str in codigo.strip().split(' '): # entonces...podemos decir que y = √(x/k) # es su ecuación inversa correspondiente _x = int(_byte_str, 2) _y = int(pow((_x/modificador), 1/2)) letra = _y.to_bytes(_y.bit_length(), 'big').decode() # magia palabra = f"{letra}{palabra}" except Exception as error: print(f"Error Decodificando:\n{error}") return palabra.stip()