Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/carlosgomezc7/plataforma_aprendizaje/llms.txt

Use this file to discover all available pages before exploring further.

El módulo de Progreso ilustra un patrón de buffering en tiempo real: la actividad del estudiante se acumula primero en una estructura de datos en memoria (la cola) y sólo se persiste en disco cuando el usuario decide sincronizar. Esta separación entre captura y persistencia es un patrón habitual en sistemas que necesitan absorber ráfagas de eventos sin bloquear la interfaz o la base de datos en cada operación.

Cola FIFO (ColaProgreso)

Una cola FIFO (First-In, First-Out / Primero en entrar, primero en salir) garantiza que los registros se procesen exactamente en el orden en que fueron generados — el progreso más antiguo es siempre el primero en sincronizarse. Esto es crítico en un contexto educativo donde el orden cronológico de la actividad del estudiante debe preservarse con fidelidad. La clase ColaProgreso implementa esta estructura usando una lista Python de forma que insert(0, ...) agrega al frente (posición más reciente) y pop() extrae desde el final (posición más antigua):
class ColaProgreso:
    def __init__(self):
        self.items = []

    def encolar(self, progreso):
        self.items.insert(0, progreso)  # Inserta al principio

    def desencolar(self):
        if not self.esta_vacia():
            return self.items.pop()  # Saca del final (El más antiguo)
        return None

    def esta_vacia(self):
        return len(self.items) == 0
MétodoComplejidadDescripción
encolar(progreso)O(n)Inserta un nuevo registro al inicio de la lista interna.
desencolar()O(1)Extrae y retorna el elemento más antiguo (último de la lista).
esta_vacia()O(1)Retorna True si no hay elementos pendientes.

Simular Actividad (Encolar)

Al presionar el botón “Simular Actividad (Encolar)”, el método encolar_actividad() genera un nombre de módulo aleatorio (Módulo N, donde N es un entero entre 1 y 10) y encola el siguiente diccionario de progreso:
{"estudiante": "Juan_Perez", "modulo": "Módulo N"}
La vista de texto (txt_cola) se refresca inmediatamente mostrando todos los elementos actuales en la cola con su posición:
Posición 1: Juan_Perez completó Módulo 7
Posición 2: Juan_Perez completó Módulo 3
Posición 3: Juan_Perez completó Módulo 9
La posición 1 es siempre el elemento más reciente; el de mayor posición es el más antiguo y será el próximo en sincronizarse.

Sincronizar a BD (Desencolar)

Al presionar “Sincronizar a BD (Desencolar)”, el método procesar_cola() ejecuta los siguientes pasos:
  1. Verifica que la cola no esté vacía (muestra aviso si lo está).
  2. Llama a self.cola_progreso.desencolar(), extrayendo el registro más antiguo.
  3. Persiste el registro llamando a db.guardar_progreso(estudiante, modulo), que añade una entrada al arreglo "progresos" dentro de db_local.json y escribe el archivo en disco.
  4. Refresca la vista de la cola.
  5. Muestra un cuadro de confirmación con el elemento sincronizado.
El registro queda almacenado permanentemente en db_local.json con la siguiente forma:
{
  "estudiante": "Juan_Perez",
  "modulo": "Módulo 7"
}

Ejemplo de flujo

1

Encolar tres actividades

El usuario presiona “Simular Actividad (Encolar)” tres veces. La cola en memoria contiene:
Posición 1: Juan_Perez completó Módulo 7  ← más reciente
Posición 2: Juan_Perez completó Módulo 3
Posición 3: Juan_Perez completó Módulo 9  ← más antiguo
2

Sincronizar el primer elemento

El usuario presiona “Sincronizar a BD (Desencolar)”. procesar_cola() extrae Módulo 9 (el más antiguo) y lo guarda en db_local.json. La cola ahora tiene:
Posición 1: Juan_Perez completó Módulo 7
Posición 2: Juan_Perez completó Módulo 3
3

Confirmar persistencia

Se muestra el diálogo: "Sincronizado en Base de Datos Local: {'estudiante': 'Juan_Perez', 'modulo': 'Módulo 9'}". El registro ya existe en disco y sobrevivirá a cualquier reinicio de la aplicación.
4

Vaciar la cola completamente

El usuario repite el paso anterior dos veces más para sincronizar Módulo 3 y luego Módulo 7. Cuando la cola está vacía, presionar el botón muestra: "No hay progresos pendientes por sincronizar.".

Los elementos encolados con “Simular Actividad” residen únicamente en memoria. Si la aplicación se cierra o se reinicia antes de sincronizarlos con “Sincronizar a BD”, esos registros se perderán permanentemente y no podrán recuperarse desde db_local.json.

Para la referencia completa de la clase consulta:

Build docs developers (and LLMs) love