| import gradio as gr |
|
|
| _enabled_sources: list = [] |
|
|
| def get_enabled_sources() -> list: |
| return _enabled_sources |
|
|
| SOURCE_GROUPS = { |
| "Alto Impacto (Global)": { |
| "SEMANTIC": {"name": "Semantic Scholar", "free": True, "key": "SEMANTIC_SCHOLAR_API_KEY"}, |
| "SCOPUS": {"name": "Scopus", "free": False, "key": "SCOPUS_API_KEY"}, |
| "OPENALEX": {"name": "OpenAlex", "free": True, "key": None}, |
| "ARXIV": {"name": "arXiv", "free": True, "key": None}, |
| "CROSSREF": {"name": "Crossref", "free": True, "key": None}, |
| }, |
| "Latinoamérica": { |
| "REDALYC": {"name": "Redalyc", "free": True, "key": "REDALYC_TOKEN"}, |
| "SCIELO": {"name": "SciELO", "free": True, "key": None}, |
| "LA_REFERENCIA": {"name": "La Referencia", "free": True, "key": None}, |
| }, |
| "Ciencia Abierta": { |
| "CORE": {"name": "CORE", "free": True, "key": "CORE_API_KEY"}, |
| "OPENAIRE": {"name": "OpenAIRE", "free": True, "key": None}, |
| "DOAJ": {"name": "DOAJ", "free": True, "key": None}, |
| "ZENODO": {"name": "Zenodo", "free": True, "key": None}, |
| "PUBMED": {"name": "PubMed", "free": True, "key": None}, |
| }, |
| "Repositorios Nacionales": { |
| "CONACYT": {"name": "CONAHCyT 🇲🇽", "free": True, "key": None}, |
| "UNAM": {"name": "UNAM 🇲🇽", "free": True, "key": None}, |
| "ANID": {"name": "ANID 🇨🇱", "free": True, "key": None}, |
| "OASISBR": {"name": "Oasisbr 🇧🇷", "free": True, "key": None}, |
| "SNRD": {"name": "SNRD 🇦🇷", "free": True, "key": None}, |
| "MINCIENCIAS": {"name": "MinCiencias 🇨🇴", "free": True, "key": None}, |
| "BDTD": {"name": "BDTD 🇧🇷", "free": True, "key": None}, |
| "RRAAE": {"name": "RRAAE 🇪🇨", "free": True, "key": None}, |
| "RECOLECTA": {"name": "Recolecta 🇪🇸", "free": True, "key": None}, |
| "KIMUK": {"name": "KIMUK 🇨🇷", "free": True, "key": None}, |
| "TIMBO": {"name": "Timbó 🇺🇾", "free": True, "key": None}, |
| "REDICCES": {"name": "REDICCES 🇸🇻", "free": True, "key": None}, |
| }, |
| } |
|
|
| def _get_enabled_sources(source_toggles): |
| return [sid for sid, toggle in source_toggles.items() if toggle.value] |
|
|
|
|
| def create_sources_config_tab(): |
| with gr.Tab("📡 Fuentes Config", id="sources_config"): |
| gr.Markdown("## 📡 Configuración de Fuentes Académicas") |
| gr.Markdown("Selecciona qué bases de datos usar en la búsqueda") |
|
|
| source_toggles = {} |
| all_toggle_components = [] |
|
|
| for group_name, sources in SOURCE_GROUPS.items(): |
| with gr.Accordion(f"📂 {group_name}", open=True): |
| with gr.Row(): |
| for source_id, source_info in sources.items(): |
| key_status = "🔑" if source_info["key"] else "🆓" |
| toggle = gr.Checkbox( |
| value=True, label=f"{key_status} {source_info['name']}", |
| interactive=True |
| ) |
| source_toggles[source_id] = toggle |
| all_toggle_components.append(toggle) |
|
|
| with gr.Accordion("🇵🇪 Panel Perú", open=False): |
| gr.Markdown("Filtros especializados para repositorios peruanos") |
| alicia_general = gr.Checkbox(value=True, label="ALICIA General") |
| alicia_universities = gr.Checkbox(value=True, label="ALICIA Universidades") |
| alicia_institutes = gr.Checkbox(value=True, label="ALICIA Institutos") |
| renati_general = gr.Checkbox(value=True, label="RENATI General") |
| renati_public = gr.Checkbox(value=True, label="RENATI Públicas") |
| renati_private = gr.Checkbox(value=True, label="RENATI Privadas") |
| university_filter = gr.Textbox(label="Filtro por Universidad", placeholder="Ej: UNMSM") |
|
|
| with gr.Accordion("📅 Filtros de Año", open=False): |
| with gr.Row(): |
| year_start = gr.Textbox(label="Año Inicio", placeholder="2020") |
| year_end = gr.Textbox(label="Año Fin", placeholder="2025") |
|
|
| enabled_sources_state = gr.State(value=list(source_toggles.keys())) |
|
|
| def _update_enabled(*args): |
| global _enabled_sources |
| _enabled_sources = [sid for sid, val in zip(source_toggles.keys(), args) if val] |
| return _enabled_sources |
|
|
| for toggle in all_toggle_components: |
| toggle.change( |
| fn=_update_enabled, |
| inputs=all_toggle_components, |
| outputs=[enabled_sources_state], |
| ) |
|
|
| _enabled_sources = list(source_toggles.keys()) |
|
|
| return source_toggles, year_start, year_end, enabled_sources_state |
|
|