Download app.py from IvanRes25/IMSS: direct link, hf CLI and curl.
- Browser
- Download file 5.2 kB
-
https://huggingface.co/spaces/IvanRes25/IMSS/resolve/main/app.py
- Command line
-
hf download hf://spaces/IvanRes25/IMSS/app.py
-
curl -L -o app.py https://huggingface.co/spaces/IvanRes25/IMSS/resolve/main/app.py
5.2 kB
| import gradio as gr | |
| import pandas as pd | |
| import re | |
| from datetime import datetime | |
| from hashlib import sha256 | |
| import os | |
| from huggingface_hub import HfApi, hf_hub_download | |
| from PIL import Image | |
| import requests | |
| from io import BytesIO | |
| from huggingface_hub import HfApi | |
| # Configuración | |
| CSV_FILE = "registros_incidencias.csv" | |
| PASSWORD_HASH = "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" | |
| REPO_ID = "IvanRes25/IMSS" # Cambiar por tu usuario/repo de HF | |
| HF_TOKEN = os.getenv("IMSS") # Se autodetecta del Space | |
| PRESTACIONES = [ | |
| "1. PROFESIONALIZACIÓN", | |
| "2. ESTIMULOS DE PRODUCTIVIDAD", | |
| "3. UNIFORMES", | |
| "4. DESCUENTOS INJUSTIFICADOS", | |
| "5. SEGURO DE VIDA", | |
| "6. AHORRO SOLIDARIO", | |
| "7. OTROS" | |
| ] | |
| # Funciones para CSV | |
| def cargar_csv(): | |
| try: | |
| return pd.read_csv(hf_hub_download( | |
| repo_id=REPO_ID, | |
| filename=CSV_FILE, | |
| repo_type="space", | |
| token=os.getenv("IMSS") | |
| )) | |
| except: | |
| df = pd.DataFrame(columns=[ | |
| "Fecha_Registro", "Entidad", "Nombre", | |
| "CURP", "Prestacion", "Quincena" | |
| ]) | |
| guardar_csv(df) | |
| return df | |
| def guardar_csv(df): | |
| api = HfApi(token=HF_TOKEN) | |
| api.upload_file( | |
| path_or_fileobj="registros.csv", | |
| path_in_repo="registros.csv", | |
| repo_id=REPO_ID, | |
| repo_type="space" | |
| ) | |
| def guardar_registro(entidad, nombre, curp, prestacion, quincena): | |
| if not all([entidad, nombre, curp, prestacion, quincena]): | |
| return "⚠️ Todos los campos son obligatorios" | |
| if not re.match(r'^[A-Z]{4}[0-9]{6}[HM][A-Z]{5}[A-Z0-9]{2}$', curp.upper()): | |
| return "⚠️ CURP inválido" | |
| try: | |
| df = cargar_csv() | |
| nuevo_registro = { | |
| "Fecha_Registro": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), | |
| "Entidad": entidad.strip().upper(), | |
| "Nombre": nombre.strip().title(), | |
| "CURP": curp.upper(), | |
| "Prestacion": prestacion, | |
| "Quincena": quincena | |
| } | |
| df = pd.concat([df, pd.DataFrame([nuevo_registro])], ignore_index=True) | |
| guardar_csv(df) | |
| return "✅ Registro guardado permanentemente" | |
| except Exception as e: | |
| return f"❌ Error: {str(e)}" | |
| def verificar_credenciales(username, password): | |
| return username == "admin" and sha256(password.encode()).hexdigest() == PASSWORD_HASH | |
| # Interfaz | |
| with gr.Blocks(title="Sistema de Captura") as app: | |
| logged_in = gr.State(False) | |
| with gr.Column(visible=True) as login_col: | |
| # Intenta cargar la imagen local | |
| try: | |
| # Carga la imagen y redimensiona | |
| img = Image.open("d5bb4c4a-f9e5-4c70-a53c-23b7dc3872a1.jpg") | |
| img.thumbnail((300, 300)) # Ajusta el tamaño según necesites | |
| # Muestra la imagen en la interfaz | |
| gr.Image( | |
| value=img, # Usamos la imagen directamente | |
| label="", | |
| show_label=False, | |
| interactive=False | |
| ) | |
| except Exception as e: | |
| print(f"Error cargando imagen: {e}") | |
| # Muestra un marcador de posición si falla | |
| gr.Markdown("") | |
| # Resto de tu interfaz de login | |
| gr.Markdown("# Sistema de Captura de Incidencias") | |
| username = gr.Textbox(label="Usuario") # 8 espacios (4 del with + 4 del componente) | |
| password = gr.Textbox(label="Contraseña", type="password") | |
| login_btn = gr.Button("Ingresar") | |
| login_msg = gr.Textbox(label="Mensaje", interactive=False) | |
| # Captura (mismo nivel que el bloque de login) | |
| with gr.Column(visible=False) as captura_col: | |
| gr.Markdown("## Captura de Datos") | |
| entidad = gr.Textbox(label="Entidad Federativa") | |
| nombre = gr.Textbox(label="Nombre completo") | |
| curp = gr.Textbox(label="CURP") | |
| prestacion = gr.Dropdown(PRESTACIONES, label="Prestación afectada") | |
| quincena = gr.Textbox(label="Quincena (AAAA-MM-DD)") | |
| submit_btn = gr.Button("Guardar") | |
| resultado = gr.Textbox(label="Resultado") | |
| logout_btn = gr.Button("Cerrar sesión") | |
| # Eventos (también dentro de gr.Blocks) | |
| def autenticar(user, pwd): | |
| if verificar_credenciales(user, pwd): | |
| return { | |
| login_col: gr.update(visible=False), | |
| captura_col: gr.update(visible=True), | |
| login_msg: "" | |
| } | |
| return { | |
| login_msg: "⚠️ Credenciales incorrectas" | |
| } | |
| def cerrar_sesion(): | |
| return { | |
| login_col: gr.update(visible=True), | |
| captura_col: gr.update(visible=False), | |
| login_msg: "" | |
| } | |
| login_btn.click( | |
| autenticar, | |
| inputs=[username, password], | |
| outputs=[login_col, captura_col, login_msg] | |
| ) | |
| logout_btn.click( | |
| cerrar_sesion, | |
| outputs=[login_col, captura_col, login_msg] | |
| ) | |
| submit_btn.click( | |
| guardar_registro, | |
| inputs=[entidad, nombre, curp, prestacion, quincena], | |
| outputs=resultado | |
| ) | |
| app.launch() |