Spaces:
Sleeping
Sleeping
File size: 4,287 Bytes
bc2c36b 9b1b1fc 11c7767 bc2c36b 12b5ed5 11c7767 12b5ed5 a73f742 9b1b1fc 11c7767 12b5ed5 11c7767 12b5ed5 11c7767 a73f742 9b1b1fc 12b5ed5 a73f742 12b5ed5 a73f742 9b1b1fc bc2c36b a73f742 bc2c36b 9b1b1fc bc2c36b 9b1b1fc bc2c36b 1386c15 9b1b1fc 6ca45ef |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import gradio as gr
import comunicacion_gmail
import json
from urllib.parse import urlparse, parse_qs
def gmail_interface(accion, parametros):
"""Funci贸n que llama a gmail_tool y formatea la respuesta."""
try:
print(f"Acci贸n recibida: {accion}") # Depuraci贸n
print(f"Par谩metros recibidos: {parametros}") # Depuraci贸n
if parametros: # Si hay par谩metros, verifica si contiene el auth_code
try:
parametros = json.loads(parametros) # Convierte la cadena JSON a un diccionario
except json.JSONDecodeError as e:
return "Error al decodificar JSON: " + str(e), "" # Devolver dos valores
auth_code = parametros.get("auth_code")
if auth_code:
print(f"Auth code recibido: {auth_code}") # Depuraci贸n
try:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', comunicacion_gmail.SCOPES) # Accede a SCOPES desde comunicacion_gmail
flow.fetch_token(code=auth_code)
creds = flow.credentials
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
except Exception as e:
return f"Error en la autorizaci贸n OAuth: {e}"
# Vuelve a llamar a gmail_tool para ejecutar la acci贸n original (sin el auth_code)
del parametros["auth_code"] # Eliminar auth_code antes de la siguiente llamada
resultado = comunicacion_gmail.gmail_tool(accion, parametros)
else:
resultado = comunicacion_gmail.gmail_tool(accion, parametros)
else: # Si no hay par谩metros, llama a gmail_tool
resultado = comunicacion_gmail.gmail_tool(accion) # No enviar parametros vac铆os
if "requires_auth" in resultado and resultado["requires_auth"]:
auth_url = resultado["auth_url"]
return gr.update(visible=True, value=f"Por favor, visita esta URL para autorizar la aplicaci贸n:\n{auth_url}\n\nLuego, copia el c贸digo de autorizaci贸n y p茅galo aqu铆 como par谩metro JSON: {{\"auth_code\": \"TU_CODIGO\"}}."), gr.update(visible=True) # Deja el campo para pegar el c贸digo visible
# Formatear la respuesta de gmail_tool
if accion == "leer_correos":
messages = resultado.get("messages", [])
formatted_messages = ""
for message in messages:
formatted_messages += f"ID: {message['id']}\nCuerpo: {message['body']}\n---\n" # Formateo b谩sico. Adaptar seg煤n sea necesario.
return formatted_messages
elif accion == "enviar_correo":
message_id = resultado.get("message_id")
return f"Correo enviado con ID: {message_id}"
elif accion == "verificar_almacenamiento":
# Formatear la informaci贸n de almacenamiento
storage = resultado.get("storageQuota", {}) # Manejar el caso donde no hay storageQuota
formatted_storage = f"L铆mite: {storage.get('limit', 'N/A')}\nUso: {storage.get('usage', 'N/A')}\nEn Drive: {storage.get('usageInDrive', 'N/A')}"
return formatted_storage
elif "error" in resultado:
return f"Error en gmail_tool: {resultado['error']}", "" # Muestra el error de gmail_tool
else:
return str(resultado), "" # Respuesta por defecto
except Exception as e:
return f"Error en gmail_interface: {e}", ""
iface = gr.Interface(
fn=gmail_interface,
inputs=[
gr.Dropdown(["leer_correos", "enviar_correo", "verificar_almacenamiento"], label="Acci贸n", info="Selecciona la acci贸n que quieres realizar con Gmail."),
gr.Textbox(label="Par谩metros (JSON)", lines=3, info="Introduce los par谩metros en formato JSON (ej. {\"maxResults\": 5})."),
],
outputs=[gr.Textbox(label="Resultado"), gr.HTML(visible=False)], # A帽ade gr.HTML aunque no se use en este ejemplo
title="Herramienta de Gmail",
description="Herramienta para interactuar con Gmail.",
allow_flagging="never",
)
iface.queue().launch(share=True) # Agrega .queue().launch(share=True), importante para el flujo de OAuth. |