Saltar al contenido principal

Errores

Los errores con los que un programa puede hacer algo tienen su propia clase, y sus mensajes hablan en términos de Moodle: el módulo, la estructura del curso, volver a iniciar sesión. Nunca nombran las herramientas ni los ajustes propios de un programa, así que un programa puede mostrarlos tal cual o explicarlos con sus propias palabras.

Tampoco llevan nunca la sesión de la persona, así que pueden registrarse tal cual: cuando una petición a Moodle agota su tiempo de espera, el mensaje de Playwright lista las cabeceras de la petición, y el driver sustituye en él la cookie de sesión y la sesskey por [redacted].

Términos: código de error.

Capturarlos​

Todo error que el driver lanza a propósito es un MoodleError, o una de sus subclases, con un code estable y un name igual al nombre de su clase. Compara por clase, por name o por code, nunca por mensaje: el texto puede cambiar en cualquier versión. error.name y error.code también funcionan entre bundles distintos.

import { NotLoggedInError, MoodleServiceError, FormError } from "@falkenslab/moodle-driver";

try {
await moodle.gradeSubmission(35, 7, { grade: "150" });
} catch (error) {
if (error instanceof NotLoggedInError) {
// La sesión ha terminado: moodle.logIn() otra vez (se abre una ventana) y reintenta.
} else if (error instanceof FormError) {
for (const { field, message } of error.fields) console.error(`${field}: ${message}`);
} else if (error instanceof MoodleServiceError) {
console.error(error.methodname, error.errorcode, error.message);
} else {
throw error;
}
}

Los errores sin clase propia son MoodleError con un código genérico:

CódigoCuándo
invalid-inputUn argumento no puede funcionar: una ruta relativa, un mensaje vacío, content para un módulo que no tiene, downloadFile sin carpeta
not-foundLo indicado no está: una sección del curso, un archivo local, un archivo del sitio (Moodle respondió 404)
not-availableLa actividad no lo tiene: una tarea sin comentarios de retroalimentación, un foro sin archivos adjuntos, un módulo sin archivos
outside-siteUn archivo que descargar no está en el sitio
unexpected-pageUna página no tiene lo que el driver lee de ella
logout-failedMoodle no cerró la sesión
chromium-install-failedEl instalador de Playwright falló
background-browserUn navegador en segundo plano (moodle open) no arrancó, no responde o se cerró mientras se usaba
browser-busyOtro comando está trabajando con el navegador en segundo plano del perfil: vuelve a intentarlo cuando termine
import { MoodleError } from "@falkenslab/moodle-driver";

try {
await moodle.downloadFile("https://campus.example.org/pluginfile.php/1/x.pdf", "/home/ada/files");
} catch (error) {
if (error instanceof MoodleError && error.code === "not-found") console.error("Ya no está, o no lo puedes ver.");
else throw error;
}

El código de cada clase es su nombre en kebab-case sin Error (NotLoggedInError es not-logged-in, SurveyError es survey); el tipo MoodleErrorCode los lista todos.

La sesión y el navegador​

ErrorCuándo
NotLoggedInErrorNo hay sesión de Moodle, o ha caducado. Cualquier función que lee el sitio lo lanza. Vuelve a iniciar sesión con logIn().
LoginTimeoutErrorlogIn() esperó timeoutMs y nadie inició sesión; la ventana se cerró.
LoginWindowClosedErrorLa persona cerró la ventana de inicio de sesión antes de iniciar sesión.
NoDisplayErrorHacía falta una ventana (para iniciar sesión, setVisible(true)) donde no hay pantalla.
BrowserNotFoundErrorNo se pudo lanzar ningún navegador instalado, y no se permite descargar Chromium.
BrowserDownloadingErrorChromium se está descargando en segundo plano: vuelve a intentarlo en un minuto o dos.
MoodleUrlErrorUna URL de sitio no es una URL, no es http(s) o no es un sitio Moodle.

Errores genéricos de Moodle​

ErrorCuándoQué lleva
MoodleServiceErrorUn servicio AJAX de Moodle respondió con una excepción que el driver no traducemethodname, errorcode (el de Moodle, p. ej. nopermissions, invalidrecord), el mensaje de Moodle
FormErrorMoodle rechazó un formulario (sus mensajes de validación por campo), un campo que hay que fijar no está en el formulario, o está desactivado hasta que otro campo lo activafields: { field, message }[]

Un FormError por un campo desactivado ocurre donde Moodle no lo guardaría: por ejemplo, la calificación máxima de una tarea una vez que existen calificaciones, hasta que se elige grade[modgrade_rescalegrades]. Fija antes el campo que lo activa, en la misma llamada.

Errores de las áreas​

Cada área tiene su propia clase para lo que le es específico: el id no es de ese tipo de actividad, la persona no puede hacer eso ahora, Moodle rechazó la acción. Sus mensajes dicen qué hacer.

ErrorÁrea
NotViewableErrorContenido: la actividad no es del tipo pedido, o no se puede ver
ActivitySettingsErrorActividades: no hay formulario de configuración que leer
CourseErrorCursos: la configuración del curso no se puede cambiar, o no se puede reiniciar
BackupErrorCopia, copia de seguridad y restauración: Moodle se negó, o no terminó a tiempo
SubmissionErrorTareas: nada que entregar, no se puede editar la entrega…
NotAnAssignmentError, GradingErrorCalificación: no es una tarea que la persona pueda calificar; Moodle no guardó la calificación
WorkshopErrorCalificación: no es un taller; Moodle se negó a cambiar su fase o no ofrece ninguna evaluación
QuizErrorCuestionarios: intentos, revisiones, resultados, excepciones, estructura
QuestionBankErrorBancos de preguntas
NotAForumError, ForumErrorForos
SurveyError, ChoiceErrorEncuestas y consultas
LessonErrorLecciones
NotAnH5PActivityErrorH5P
ScormErrorSCORM
NoGradeReportError, GradebookErrorCalificaciones y libro de calificaciones
CompletionErrorFinalización
NoParticipantsError, EnrolmentErrorParticipantes: no puede ver los participantes; Moodle se negó a matricular, desmatricular o asignar un rol
ReportErrorRegistros e informes: la persona no puede ver el informe, o la actividad no es del curso
CalendarErrorCalendario
MessageErrorMensajes

Los mensajes propios de Moodle​

Cuando Moodle se niega con una página de error (sin permiso, no existe ese registro), el driver incluye el mensaje de Moodle, en el idioma del sitio, después de su propia explicación: "You can't see course 3's grader report: Sorry, but you do not currently have permissions to do that (View grader report)". moodleErrorMessage(page) lee ese mensaje de una página tuya.