07. Feature: catálogo y selección de materias
Objetivo
Mantener un catálogo declarativo de materias (campus) y decidir cuáles cursos de Moodle procesar en cada ejecución del pipeline.
Entradas
- Archivo
config/campus.yml. - Variable de entorno
TRACKED_SUBJECTS(opcional).
Salidas
- Lista de materias activas (dicts) a trackear.
- Lista de
moodle_course_id(strings) para pasar al scraper.
API de módulo
Código: scripts/catalog.py
load_campus_catalog(catalog_path=...) -> dictparse_tracked_subjects(value) -> set[str] | Noneselect_tracked_subjects(catalog, tracked_subjects) -> list[dict]get_course_ids(subjects) -> list[str]
Reglas de selección
- El catálogo se carga desde YAML.
- Se consideran solo subjects con
enabled != false. - Si
TRACKED_SUBJECTSes:all, vacío o no definido → se procesan todas las habilitadas.- lista CSV (ej:
analisis-i, algebra) → se filtra porslug(case-insensitive).
- Para cada materia seleccionada, si
moodle_course_idestá presente → se agrega acourse_ids.
Manejo de errores y edge cases
- Si
config/campus.ymlno existe → el catálogo se considera vacío y el pipeline continúa (warning enload_campus_catalog). - Si el YAML no es un mapping o
subjectsno es lista → se lanzaValueError(error de configuración). - Materias sin
moodle_course_id:- se mantienen en la lista de subjects (para UI / futuro),
- pero no generan
course_ids(no se descargan materiales).
Razones de diseño
slugpermite estabilidad incluso si el nombre humano cambia.enabledpermite desactivar temporalmente sin borrar historial.