Skip to content

Course

py_moodle.course

Course management module for Moodle.

Provides functions to list courses, retrieve course details, and enumerate course sections using AJAX endpoints.

Classes:

Name Description
MoodleCourseError

Exception raised for errors in course operations.

Functions:

Name Description
get_course_context_id

Get the context ID for a course by scraping its main page.

list_courses

List all courses visible to the user.

create_course

Create a new course using the web form.

delete_course

Delete a course by ID using the web interface.

get_course

Get details for a specific course.

get_course_with_sections_and_modules

Return full course data with sections and modules.

list_sections

Extract a list of sections from course contents.

Classes

MoodleCourseError

Bases: Exception

Exception raised for errors in course operations.

Functions

get_course_context_id

get_course_context_id(
    session: Session, base_url: str, course_id: int
) -> int

Get the context ID for a course by scraping its main page.

This mimics how the frontend retrieves the ID, making it the most reliable method.

Parameters:

Name Type Description Default
session Session

Authenticated requests session.

required
base_url str

Base URL of the Moodle instance.

required
course_id int

Identifier of the course.

required

Returns:

Name Type Description
int int

Context ID of the course.

Raises:

Type Description
MoodleCourseError

If the context ID cannot be found.

list_courses

list_courses(
    session: Session,
    base_url: str,
    *,
    token: str | None = None,
    sesskey: str | None = None
) -> List[Dict[str, Any]]

List all courses visible to the user.

Uses the core_course_get_courses webservice when a token is available and falls back to the AJAX endpoint otherwise.

Parameters:

Name Type Description Default
session Session

Authenticated requests session.

required
base_url str

Base URL of the Moodle instance.

required
token str | None

Webservice token for REST API (optional, preferred).

None
sesskey str | None

Session key for AJAX calls (optional, fallback).

None

Returns:

Type Description
List[Dict[str, Any]]

List[Dict[str, Any]]: List of course dictionaries.

Raises:

Type Description
MoodleCourseError

If the request fails.

create_course

create_course(
    session: Session,
    base_url: str,
    sesskey: str,
    fullname: str,
    shortname: str,
    categoryid: int = 1,
    visible: int = 1,
    summary: str = "",
    startdate: dict = None,
    enddate: dict = None,
    numsections: int = 4,
) -> Dict[str, Any]

Create a new course using the web form.

Simulates browser behavior by posting to edit.php.

Parameters:

Name Type Description Default
session Session

Authenticated requests session.

required
base_url str

Base URL of the Moodle instance.

required
sesskey str

Session key for AJAX calls.

required
fullname str

Full name of the course.

required
shortname str

Short name of the course.

required
categoryid int

Category ID.

1
visible int

Visibility flag (1 for visible, 0 for hidden).

1
summary str

Course summary.

''
startdate dict

Dict with keys day, month, year, hour, minute.

None
enddate dict

Dict with keys enabled, day, month, year, hour, minute.

None
numsections int

Number of sections.

4

Returns:

Type Description
Dict[str, Any]

Dict[str, Any]: Created course dictionary with at least id, fullname and shortname.

Raises:

Type Description
MoodleCourseError

If the request fails.

delete_course

delete_course(
    session: Session,
    base_url: str,
    sesskey: str,
    courseid: int,
    force: bool = False,
) -> None

Delete a course by ID using the web interface.

Parameters:

Name Type Description Default
session Session

Authenticated requests session.

required
base_url str

Base URL of the Moodle instance.

required
sesskey str

Session key for AJAX calls.

required
courseid int

ID of the course to delete.

required
force bool

Whether to skip confirmation and delete directly.

False

Raises:

Type Description
MoodleCourseError

If the request fails.

get_course

get_course(
    session: Session,
    base_url: str,
    sesskey: str,
    courseid: int,
    token: str = None,
) -> List[Dict[str, Any]]

Get details for a specific course.

Attempts the webservice first and falls back to AJAX if necessary.

Parameters:

Name Type Description Default
session Session

Authenticated requests session.

required
base_url str

Base URL of the Moodle instance.

required
sesskey str

Session key for AJAX calls.

required
courseid int

Identifier of the course to fetch.

required
token str

Webservice token (optional).

None

Returns:

Type Description
List[Dict[str, Any]]

List[Dict[str, Any]]: Course contents including sections and modules.

Raises:

Type Description
MoodleCourseError

If both webservice and AJAX requests fail.

get_course_with_sections_and_modules

get_course_with_sections_and_modules(
    session: Session,
    base_url: str,
    sesskey: str,
    courseid: int,
    token: str = None,
) -> Dict[str, Any]

Return full course data with sections and modules.

Parameters:

Name Type Description Default
session Session

Authenticated requests session.

required
base_url str

Base URL of the Moodle instance.

required
sesskey str

Session key for AJAX calls.

required
courseid int

Identifier of the course to fetch.

required
token str

Webservice token (optional).

None

Returns:

Type Description
Dict[str, Any]

Dict[str, Any]: Course dictionary with keys id, fullname,

Dict[str, Any]

shortname and a list of sections containing their modules.

list_sections

list_sections(
    course_contents: List[Dict[str, Any]],
) -> List[Dict[str, Any]]

Extract a list of sections from course contents.

Parameters:

Name Type Description Default
course_contents List[Dict[str, Any]]

Output from get_course.

required

Returns:

Type Description
List[Dict[str, Any]]

List[Dict[str, Any]]: Each dictionary represents a section.

Notes

This function expects the output of get_course.