Skip to content

Examples

This page contains practical examples of using py-moodle for common tasks.

Course Management Examples

Create Multiple Courses

# Create courses from a list
for course in "Math 101" "Physics 201" "Chemistry 301"; do
    py-moodle courses create --fullname "$course" --shortname "$(echo $course | tr ' ' '-' | tr '[:upper:]' '[:lower:]')"
done

Bulk Content Creation

# Add welcome labels to all sections of a course
course_id=2
for section in {1..5}; do
    py-moodle modules add label \
        --course-id $course_id \
        --section-id $section \
        --name "Section $section Welcome" \
        --intro "<h2>Welcome to Section $section</h2><p>This section covers important topics.</p>"
done

File Management Examples

Upload Multiple Files

# Upload all PDFs in a directory to a course folder
course_id=2
section_id=1
folder_name="Course Materials"

# Create the folder first
py-moodle modules add folder --course-id $course_id --section-id $section_id --name "$folder_name"

# Upload files (you'll need to get the folder ID from the output above)
for file in *.pdf; do
    py-moodle files upload --course-id $course_id --file "$file"
done

SCORM Package Upload

# Upload and configure a SCORM package
py-moodle modules add scorm \
    --course-id 2 \
    --section-id 1 \
    --name "Interactive Lesson 1" \
    --path "./scorm-packages/lesson1.zip" \
    --intro "Complete this interactive lesson before the next class."

Python Library Examples

Automated Course Setup

from py_moodle import MoodleSession
from py_moodle.course import create_course, list_courses
from py_moodle.module import add_label, add_folder

# Initialize session
ms = MoodleSession.get()

# Create a new course
course_data = {
    'fullname': 'Automated Course Setup Demo',
    'shortname': 'auto-demo-001',
    'categoryid': 1
}

course = create_course(ms.session, ms.settings.url, course_data, token=ms.token)
print(f"Created course: {course['id']}")

# Add welcome content
add_label(
    ms.session,
    ms.settings.url,
    course_id=course['id'],
    section_id=1,
    name="Course Welcome",
    intro="<h1>Welcome!</h1><p>This course was created automatically.</p>",
    token=ms.token
)

# Add a materials folder
add_folder(
    ms.session,
    ms.settings.url,
    course_id=course['id'],
    section_id=1,
    name="Course Materials",
    intro="All course materials will be stored here.",
    token=ms.token
)

print("Course setup completed!")

Batch User Enrollment

from py_moodle import MoodleSession
from py_moodle.user import list_users
from py_moodle.course import enroll_user

ms = MoodleSession.get()

# List of users to enroll
user_emails = ['student1@example.com', 'student2@example.com', 'student3@example.com']
course_id = 2

# Get all users
users = list_users(ms.session, ms.settings.url, token=ms.token)

# Create email to user ID mapping
email_to_id = {user['email']: user['id'] for user in users}

# Enroll users
for email in user_emails:
    if email in email_to_id:
        user_id = email_to_id[email]
        enroll_user(ms.session, ms.settings.url, course_id, user_id, token=ms.token)
        print(f"Enrolled {email} in course {course_id}")
    else:
        print(f"User {email} not found")

Advanced Automation

Complete Course Deployment

import json
from py_moodle import MoodleSession
from py_moodle.course import create_course
from py_moodle.module import add_label, add_resource, add_scorm

# Load course configuration from JSON
with open('course_config.json', 'r') as f:
    config = json.load(f)

ms = MoodleSession.get()

# Create the course
course = create_course(ms.session, ms.settings.url, config['course'], token=ms.token)
print(f"Created course: {course['shortname']}")

# Add content according to configuration
for section_config in config['sections']:
    section_id = section_config['id']

    # Add section content
    for content in section_config['content']:
        if content['type'] == 'label':
            add_label(
                ms.session, ms.settings.url,
                course_id=course['id'],
                section_id=section_id,
                name=content['name'],
                intro=content['intro'],
                token=ms.token
            )
        elif content['type'] == 'scorm':
            add_scorm(
                ms.session, ms.settings.url,
                course_id=course['id'],
                section_id=section_id,
                name=content['name'],
                scorm_file=content['file'],
                token=ms.token
            )

print("Course deployment completed!")

Example course_config.json:

{
  "course": {
    "fullname": "Introduction to Python Programming",
    "shortname": "python-intro-2024",
    "categoryid": 1
  },
  "sections": [
    {
      "id": 1,
      "content": [
        {
          "type": "label",
          "name": "Course Introduction",
          "intro": "<h2>Welcome to Python Programming!</h2><p>This course will teach you the basics of Python.</p>"
        },
        {
          "type": "scorm",
          "name": "Python Basics Interactive",
          "file": "./scorm/python-basics.zip"
        }
      ]
    }
  ]
}

Troubleshooting Examples

Debug Session Issues

from py_moodle import MoodleSession

# Enable debug mode
ms = MoodleSession.get()
print(f"Session URL: {ms.settings.url}")
print(f"Session token: {ms.token[:10]}..." if ms.token else "No token")

# Test session validity
try:
    from py_moodle.course import list_courses
    courses = list_courses(ms.session, ms.settings.url, token=ms.token)
    print(f"Session valid - found {len(courses)} courses")
except Exception as e:
    print(f"Session error: {e}")

Error Handling

from py_moodle import MoodleSession
from py_moodle.course import create_course

ms = MoodleSession.get()

try:
    course_data = {
        'fullname': 'Test Course',
        'shortname': 'test-duplicate',  # This might already exist
        'categoryid': 1
    }

    course = create_course(ms.session, ms.settings.url, course_data, token=ms.token)
    print(f"Success: Created course {course['id']}")

except Exception as e:
    print(f"Error creating course: {e}")
    # Handle specific error cases
    if "shortname" in str(e).lower():
        print("Try using a unique shortname")
    elif "permission" in str(e).lower():
        print("Check your user permissions")