astro-blendDEV / app.py
Moibe's picture
Fix auth call
dfc9df3
raw
history blame
5.57 kB
import gradio as gr
import sulkuPypi
from funciones import mass
from data import usuarios
import time
import nycklar.nodes
import tools
#import auth
import ast
#Funciones
#Función principal
def perform(input1, input2):
print("Estando en perform, la cantidad de tokens es: ", gr.State.tokens)
print("Estando en perform, el usuario es: ", gr.State.usuario)
#Revisaremos de nuevo:
gr.State.tokens = sulkuPypi.getTokens(sulkuPypi.encripta(gr.State.usuario).decode("utf-8")) #Todo en una línea.
print("Ahora tienes: ", gr.State.tokens)
#Después autoriza.
#Si está autorizada puede ejecutar la tarea, ésta lógica si está a cargo aquí, por parte de la app y su desarrollador, no de Sulku.
autorizacion = sulkuPypi.authorize(gr.State.tokens, 'picswap')
print("La autorización es: ", autorizacion)
#info_window = ""
if autorizacion is True:
path = mass(input1,input2)
else:
info_window = "Out of credits..."
path = 'no-credits.png'
return path, info_window, html_credits, btn_buy
print(f"El path final fue {path}, si es no-result, no debites y controla la info window.")
print(f"El type de path es: ", type(path))
print("Convirtiendo path a string...")
path_string = str(path)
print("Path_string = ", path_string)
if "no-source-face" not in path_string:
#Si el path NO tiene no-result, todo funcionó bien, por lo tanto debita.
print("Se obtuvo un resultado, debitaremos.")
#Y finalmente debita los tokens.
gr.State.tokens = sulkuPypi.debitTokens(gr.State.capsule, "picswap")
print(f"Y ahora tienes: {gr.State.tokens} tokens.")
html_credits = tools.actualizar_creditos(gr.State.tokens)
print(f"html credits quedó como : {html_credits} y es del tipo: {type(html_credits)}")
info_window = "Image ready!"
else:
print("No se detectó un rostro...")
info_window = "No face in source path detected."
print(f"Y ahora tienes: {gr.State.tokens} tokens.")
html_credits = tools.actualizar_creditos(gr.State.tokens)
#No se hizo un proceso, por lo tanto no debitaremos.
#En el futuro, como regla de negocio, podría cambiar y que si debitemos.
return path, info_window, html_credits, btn_buy
def display_tokens():
print("Ejecutando display_tokens, tienes: ", gr.State.tokens)
print("Ejecutando display_tokens, eres: ", gr.State.usuario)
display = tools.actualizar_creditos(gr.State.tokens)
return display
#Inputs
source_image = gr.Image(label="Source")
destination_image = gr.Image(label="Destination")
#Outputs
print("En éste momento estoy creando los outputs...")
creditos = None
result_image = gr.Image(label="Blend Result")
txt_credits = gr.Textbox(label="Credits Available", value="", interactive=False)
html_credits = gr.HTML()
lbl_console = gr.Label(label="AI Terminal Messages", value="AI Engine ready...", container=True)
btn_buy = gr.Button("Buy More", visible=False, size='lg')
#Gradio themes:
# — gr.themes.Base()
# — gr.themes.Default()
# — gr.themes.Glass()
# — gr.themes.Monochrome()
# — gr.themes.Soft()
#valor = gr.State.tokens
valor = ""
with gr.Blocks(theme=gr.themes.Base(), css="footer {visibility: hidden}") as main:
#Función, input, output
main.load(display_tokens, None, html_credits )
#Declaración de función dentro de blocks:
def authenticate(username, password):
#Future: Obten el dict usuarios desde la API no localmente en ésta app.
cadena_usuarios = sulkuPypi.getData()
# Convertir la cadena en una lista de tuplas
print("Ahora voy a convertir la cadena de usuarios en una lista: ")
lista_usuarios = ast.literal_eval(cadena_usuarios)
for u, p, f in lista_usuarios:
#Si el usuario y la contraseña son correctas...
if username == u and password == p:
#Agrego el nombre del usuario al estado general.
gr.State.usuario = username
#Bienvenida al usuario...
print("Welcome ", gr.State.usuario)
if f == "new":
print("Usuario Nuevo...")
else:
print("Usuario Normal...")
#Capsule es el usuario encriptado que enviarás a la API de Sulku.
#El encriptador ahora será parte de Sulku, porque es una herramienta que se requiere para...
#...las comunicaciones con Sulku.
capsule = sulkuPypi.encripta(gr.State.usuario).decode("utf-8") #decode es para quitarle el 'b
gr.State.capsule = capsule
#Checa cuantos tokens tiene ese usuario via la API de Sulku:
gr.State.tokens = sulkuPypi.getTokens(capsule)
print(f"Tienes: {gr.State.tokens} tokens. ")
creditos = gr.State.tokens
print(f"Ésta es la cantidad guardada en creditos: {creditos}")
return True
#Si no hubo coincidencia regresas un false.
return False
with gr.Row():
demo = gr.Interface(
fn=perform,
title="",
inputs=[source_image, destination_image],
outputs=[result_image, lbl_console, html_credits, btn_buy],
allow_flagging='never'
)
main.launch(auth=authenticate)