Download app.py from UPTC/TRL: direct link, hf CLI and curl.
- Browser
- Download file 7.23 kB
-
https://huggingface.co/spaces/UPTC/TRL/resolve/main/app.py
- Command line
-
hf download hf://spaces/UPTC/TRL/app.py
-
curl -L -o app.py https://huggingface.co/spaces/UPTC/TRL/resolve/main/app.py
7.23 kB
| # -*- coding: utf-8 -*- | |
| # App: Información general de la tecnología (versión inicial, sin descargas) | |
| # Requisitos: pip install gradio pandas | |
| import gradio as gr | |
| import pandas as pd | |
| from datetime import datetime | |
| # --- Listas de opciones ------------------------------------------------------- | |
| FACULTADES = [ | |
| "Facultad de Ciencias Agropecuarias", | |
| "Facultad de Ciencias", | |
| "Facultad de Ciencias de la Educación", | |
| "Facultad de Ciencias Económicas y Administrativas", | |
| "Facultad de Ciencias de la Salud", | |
| "Facultad de Derecho", | |
| "Facultad de Ingeniería", | |
| "Facultad de Estudios a Distancia", | |
| "Facultad Chiquinquirá", | |
| "Facultad Duitama", | |
| "Facultad Sogamoso", | |
| ] | |
| NIVELES_FORMACION = [ | |
| "Estudiante de pregrado", | |
| "Profesional", | |
| "Especialización", | |
| "Maestria", | |
| "Doctorado", | |
| ] | |
| TIPOS_VINCULACION = [ | |
| "Estudiante de pregrado", | |
| "Estudiante de posgrado", | |
| "Joven investigador", | |
| "Docente catedratico", | |
| "Docente ocasional medio tiempo", | |
| "Docente ocasional tiempo completo", | |
| "Docente de planta", | |
| "Contrato de Prestación de Servicios", | |
| "Externo (aliado)", | |
| ] | |
| TIPOS_DOCUMENTO = ["CC", "TI", "CE"] | |
| # --- Defaults sugeridos por Facultad (de tu tabla) ---------------------------- | |
| DEFAULTS = { | |
| "Facultad de Ciencias Agropecuarias": { | |
| "nivel": "Estudiante de pregrado", | |
| "vinc": "Estudiante de pregrado", | |
| }, | |
| "Facultad de Ciencias": { | |
| "nivel": "Profesional", | |
| "vinc": "Estudiante de posgrado", | |
| }, | |
| "Facultad de Ciencias de la Educación": { | |
| "nivel": "Especialización", | |
| "vinc": "Joven investigador", | |
| }, | |
| "Facultad de Ciencias Económicas y Administrativas": { | |
| "nivel": "Maestria", | |
| "vinc": "Docente catedratico", | |
| }, | |
| "Facultad de Ciencias de la Salud": { | |
| "nivel": "Doctorado", | |
| "vinc": "Docente ocasional medio tiempo", | |
| }, | |
| "Facultad de Derecho": { | |
| "nivel": None, | |
| "vinc": "Docente ocasional tiempo completo", | |
| }, | |
| "Facultad de Ingeniería": { | |
| "nivel": None, | |
| "vinc": "Docente de planta", | |
| }, | |
| "Facultad de Estudios a Distancia": { | |
| "nivel": None, | |
| "vinc": "Contrato de Prestación de Servicios", | |
| }, | |
| # Estas tres filas también fijan Tipo de documento: | |
| "Facultad Chiquinquirá": { | |
| "nivel": None, # en tu tabla aparece "TI" aquí, pero eso es tipo de documento; se fija abajo | |
| "vinc": "Externo (aliado)", | |
| "tdoc": "TI", | |
| }, | |
| "Facultad Duitama": { | |
| "nivel": None, | |
| "vinc": None, | |
| "tdoc": "CC", | |
| }, | |
| "Facultad Sogamoso": { | |
| "nivel": None, | |
| "vinc": None, | |
| "tdoc": "CE", | |
| }, | |
| } | |
| def aplicar_defaults_facultad(facultad): | |
| """Devuelve updates para nivel, vinculación y tipo de documento al cambiar la facultad.""" | |
| cfg = DEFAULTS.get(facultad, {}) | |
| upd_nivel = gr.update() # sin cambio por defecto | |
| upd_vinc = gr.update() | |
| upd_tdoc = gr.update() | |
| if cfg.get("nivel") in NIVELES_FORMACION: | |
| upd_nivel = gr.update(value=cfg["nivel"]) | |
| if cfg.get("vinc") in TIPOS_VINCULACION: | |
| upd_vinc = gr.update(value=cfg["vinc"]) | |
| if cfg.get("tdoc") in TIPOS_DOCUMENTO: | |
| upd_tdoc = gr.update(value=cfg["tdoc"]) | |
| return upd_nivel, upd_vinc, upd_tdoc | |
| def generar_ficha( | |
| codigo, fecha, facultad, grupo, nombre, | |
| pn, sn, pa, sa, | |
| tdoc, ndoc, profesion, nivel, vinculacion, | |
| correo, direccion, telefono | |
| ): | |
| """Devuelve una vista previa tipo tabla (sin archivos).""" | |
| fila = { | |
| "Código": codigo, | |
| "Fecha de ingreso": fecha, | |
| "Facultad": facultad, | |
| "Grupo de investigación": grupo, | |
| "Nombre de la tecnología": nombre, | |
| "Primer nombre": pn, | |
| "Segundo nombre": sn, | |
| "Primer apellido": pa, | |
| "Segundo apellido": sa, | |
| "Tipo de documento": tdoc, | |
| "Número de documento": ndoc, | |
| "Profesión": profesion, | |
| "Nivel de formación": nivel, | |
| "Tipo de vinculación": vinculacion, | |
| "Correo electrónico": correo, | |
| "Dirección": direccion, | |
| "Número de teléfono": telefono, | |
| "Generado": datetime.now().strftime("%Y-%m-%d %H:%M"), | |
| } | |
| df = pd.DataFrame([fila]) | |
| resumen = ( | |
| f"**{nombre or 'Tecnología'}** — {facultad or 'Sin facultad'}\n\n" | |
| f"Inventor/a: {pn} {sn} {pa} {sa}\n" | |
| f"Documento: {tdoc or ''} {ndoc or ''} | Nivel: {nivel or '-'} | Vinculación: {vinculacion or '-'}" | |
| ) | |
| return df, resumen | |
| with gr.Blocks(title="Información general de la tecnología") as demo: | |
| gr.Markdown("# Información general de la tecnología (versión inicial)") | |
| gr.Markdown( | |
| "Capture la ficha base. Los campos **Facultad**, **Nivel de formación** y **Tipo de vinculación** " | |
| "tienen listas de opciones; al cambiar *Facultad* se sugieren valores por defecto según su tabla." | |
| ) | |
| with gr.Row(): | |
| codigo = gr.Textbox(label="Código", value="P2024/") | |
| fecha = gr.Textbox(label="Fecha de ingreso", placeholder="YYYY-MM-DD") | |
| with gr.Row(): | |
| facultad = gr.Dropdown(choices=FACULTADES, label="Facultad") | |
| grupo = gr.Textbox(label="Grupo de investigación") | |
| nombre = gr.Textbox(label="Nombre de la tecnología") | |
| gr.Markdown("## Inventores (principal)") | |
| with gr.Row(): | |
| pn = gr.Textbox(label="Primer nombre") | |
| sn = gr.Textbox(label="Segundo nombre") | |
| with gr.Row(): | |
| pa = gr.Textbox(label="Primer apellido") | |
| sa = gr.Textbox(label="Segundo apellido") | |
| gr.Markdown("## Datos de contacto") | |
| with gr.Row(): | |
| tdoc = gr.Dropdown(choices=TIPOS_DOCUMENTO, label="Tipo de documento") | |
| ndoc = gr.Textbox(label="Número de documento") | |
| profesion = gr.Textbox(label="Profesión") | |
| with gr.Row(): | |
| nivel = gr.Dropdown(choices=NIVELES_FORMACION, label="Nivel de formación") | |
| vinculacion = gr.Dropdown(choices=TIPOS_VINCULACION, label="Tipo de vinculación") | |
| with gr.Row(): | |
| correo = gr.Textbox(label="Correo electrónico") | |
| direccion = gr.Textbox(label="Dirección") | |
| telefono = gr.Textbox(label="Número de teléfono") | |
| # Sugerir defaults al cambiar la Facultad | |
| facultad.change(aplicar_defaults_facultad, inputs=[facultad], outputs=[nivel, vinculacion, tdoc]) | |
| with gr.Row(): | |
| btn_generar = gr.Button("Generar ficha (vista previa)") | |
| btn_limpiar = gr.Button("Limpiar") | |
| tabla = gr.Dataframe(label="Vista previa", wrap=True) | |
| resumen_md = gr.Markdown() | |
| btn_generar.click( | |
| generar_ficha, | |
| inputs=[codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono], | |
| outputs=[tabla, resumen_md], | |
| ) | |
| def _limpiar(): | |
| return ( | |
| "P2024/", "", None, "", "", "", "", "", "", None, "", "", | |
| None, None, "", "", "" | |
| ) | |
| btn_limpiar.click( | |
| _limpiar, | |
| inputs=None, | |
| outputs=[codigo, fecha, facultad, grupo, nombre, pn, sn, pa, sa, tdoc, ndoc, profesion, nivel, vinculacion, correo, direccion, telefono], | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |