Spaces:
Runtime error
Runtime error
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'<style>{archivo.read()}</style>', 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') | |
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() | |
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() | |