Skip to content

Custodio ​

Aplicación de escritorio portable que usa la comisión de elaboración para validar, consolidar y cifrar los bancos de preguntas antes de entregarlos al sistema.

Flujo ​

  1. Cada área entrega un banco .xlsx con las hojas Preguntas, Respuestas y _metadata (generadas por el sistema).
  2. Custodio valida que cada banco esté completo: todas las preguntas habilitadas con sus 4 incisos, respuesta correcta y justificación.
  3. Consolida los bancos válidos en Preguntas.xlsx y Respuestas.xlsx (una hoja por área).
  4. Cifra ambos archivos con la clave pública key.pub. Solo el sistema, que tiene la clave privada, puede descifrarlos.

El ejecutable se ubica en la misma carpeta que key.pub y la carpeta de bancos. Las versiones distribuidas se registran en el portal administrativo del SPS (app custodio_integration).

Estructura ​

text
custodio/
├── custodio.py               # Interfaz gráfica (Tkinter)
├── custodio_core.py          # Lógica de negocio sin interfaz (validación, consolidación, cifrado)
├── generar_claves_sistema.py # Utilidad de referencia: genera un par de claves X25519 (lado sistema)
├── tests/                    # Pruebas pytest de custodio_core
├── Custodio.spec             # Configuración de PyInstaller
└── requirements.txt

La separación entre custodio.py y custodio_core.py permite probar la lógica en CI sin entorno gráfico.

Dependencias ​

PaqueteVersiónUso
PyNaCl1.6.2Cifrado con clave pública (X25519)
openpyxl3.1.5Lectura y escritura de los bancos Excel
Pillow11.0.0Redimensionar las imágenes incluidas en las preguntas al consolidar
pyinstaller6.22.0Empaquetado como ejecutable portable
pytest9.1.1Pruebas

Requiere Python 3.12 con Tkinter.

Ejecución y build ​

sh
pip install -r requirements.txt

# Ejecutar en desarrollo
python custodio.py

# Pruebas
python -m pytest tests/ -v

# Ejecutable (dist/Custodio o dist/Custodio.exe)
pyinstaller Custodio.spec --clean

PyInstaller no hace compilación cruzada: el ejecutable de Windows se genera en Windows. El pipeline de publicación se describe en Pipelines CI/CD.