import gradio as gr import json from backend.tools.metadata import fetch_metadata, recover_metadata from .utils import format_error async def metadata_handler(doi, url, title, action): if not doi and not url and not title: return "**Error:** Proporcione al menos un DOI, URL o título." try: if action == "fetch": result = await fetch_metadata(doi=doi or None, url=url or None, title=title or None) elif action == "recover": result = await recover_metadata(doi=doi or None, url=url or None, title=title or None) elif action == "enrich": result = await fetch_metadata(doi=doi or None, url=url or None, title=title or None) else: return "**Error:** Acción no válida." if "error" in result: return f"**Error:** {result['error']}" return json.dumps(result, indent=2, ensure_ascii=False, default=str) except Exception as e: return format_error(e) def create_metadata_tab(): with gr.Tab("📋 Metadatos", id="metadata"): gr.Markdown("## Gestión de Metadatos Académicos") with gr.Row(): with gr.Column(): doi = gr.Textbox(label="DOI", placeholder="10.1038/s41586-020-2649-2") url = gr.Textbox(label="URL / Handle", placeholder="https://hdl.handle.net/20.500.12672/12345") title = gr.Textbox(label="Título", placeholder="Attention Is All You Need") action = gr.Radio(choices=["fetch", "recover", "enrich"], value="fetch", label="Acción") meta_btn = gr.Button("📋 Obtener Metadatos", variant="primary", size="lg") with gr.Column(): output_json = gr.Code(label="Resultado JSON", language="json") meta_btn.click(fn=metadata_handler, inputs=[doi, url, title, action], outputs=[output_json])