letxinet / modules /config /sources_config_tab.py
C2MV's picture
Initial upload for Build Small Hackathon
68fb5e2 verified
Raw
History Blame Contribute Delete
4.74 kB
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