Skip to content

Code Examples

Prerequisites: Complete the Setup in the getting started guide first.

All examples assume you have a client initialized:

from canvasconnector import CanvasClient
from dotenv import load_dotenv
import os

load_dotenv()
client = CanvasClient(
    api_key=os.getenv("CANVAS_API_TOKEN"),
    canvas_url=os.getenv("CANVAS_URL"),
    timezone=os.getenv("TIMEZONE")
)

Getting Your Courses

from canvasconnector import get_courses_polars

# Get all courses (current only or all)
courses = get_courses_polars(client, current_only=True)
print(courses)

Fetching Assignments

from canvasconnector import get_assignments, get_assignments_all_courses

# Get assignments for a single course
assignments = get_assignments(
    client,
    course_code=396812,         # Change to one of your course IDs
    assignment_weights=True
)

# Get assignments for all your courses (parallel processing)
all_assignments = get_assignments_all_courses(
    client,
    courses["course_id"],
    max_workers=10              # Fetch 10 courses at once
)

Finding Upcoming Assignments

from canvasconnector import get_upcoming_assignments

# Get assignments due in the next 2 weeks
upcoming = get_upcoming_assignments(
    client,
    courses["course_id"],
    days=14
)
print(upcoming)

# Get assignments due in the next week
upcoming_week = get_upcoming_assignments(
    client,
    courses["course_id"],
    days=7
)

Assignment Detials

from canvasconnector import get_assignment_details

# Get full assignment context (useful for LLMs)
details = get_assignment_details(client, course_id=396812, assignment_id=16622655)
print(details["description"])
print(details["rubric"])
print(details["links"])

# Get a quick summary of submission requirements only
details_only = get_assignment_details(
    client,
    course_id=396812,
    assignment_id=16622655,
    details_only=True
)
print(details_only["submission_types"])
print(details_only["allowed_attempts"])

Submitting an Assignment

# Submit a URL assignment (type is detected automatically)
submit_assignment(
    client,
    course_id=396812,
    assignment_id=16622657,
    submission_url="https://example.com/my-project"
)

# Submit a text entry assignment
submit_assignment(
    client,
    course_id=396812,
    assignment_id=16622655,
    body="My submission text here..."
)

# Submit a file upload assignment (Carefule about the upload type...)
submit_assignment(
    client,
    course_id=396812,
    assignment_id=16622659,
    file_path="/path/to/my_file.pdf"
)

Submission Comments

from canvasconnector import get_submission_comments, post_submission_comment

# Get comments on a submission
comments = get_submission_comments(client, course_id=396812, assignment_id=16622659)
print(comments)

# Post a comment on a submission
post_submission_comment(
    client,
    course_id=396812,
    assignment_id=16622659,
    comment="Great feedback, thank you!"
)

Submission and Comment Together

# Submit and leave a comment in one flow
if submit_assignment(
    client,
    course_id=396812,
    assignment_id=16622657,
    submission_url="https://example.com/my-project"
):
    post_submission_comment(
        client,
        course_id=396812,
        assignment_id=16622657,
        comment="Submitted! Let me know if you have any questions."
    )

Getting Peer Information

from canvasconnector import get_all_peers, get_best_friends

# Get all peers from your courses
peers = get_all_peers(client, courses["course_id"])

# Find your most common classmates
best_friends = get_best_friends(
    client,
    peers,
    students_only=True
)
print(best_friends)

Discussion

from canvasconnector import (
    get_discussions,
    get_discussion_entries,
    get_discussion_replies,
    get_all_discussion_posts,
    post_discussion_entry,
    post_discussion_reply,
    like_discussion_post,
    like_all_discussion_posts,
)

# Get all discussion topics for a course
discussions = get_discussions(client, course_id=396812)
print(discussions)

# Get entries (top-level posts) for a discussion
entries = get_discussion_entries(client, course_id=396812, discussion_id=9875322)

# Get replies to a specific entry
replies = get_discussion_replies(
    client,
    course_id=396812,
    discussion_id=9875322,
    entry_id=78441102
)

# Get all posts and replies in one flat DataFrame
all_posts = get_all_discussion_posts(client, course_id=396812, discussion_id=9875322)

# Post a top-level entry
post_discussion_entry(
    client,
    course_id=396812,
    discussion_id=9875322,
    message="Here is my initial post..."
)

# Reply to an existing entry
post_discussion_reply(
    client,
    course_id=396812,
    discussion_id=9875322,
    entry_id=entries["entry_id"][4],
    message="I randomly responde to the 5th entry!"
)

# Like a specific post
like_discussion_post(
    client,
    course_id=396812,
    discussion_id=9875322,
    post_id=entries["entry_id"][4]
)

# Like all posts in a discussion (25% of posts randomly liked by default)
all_posts = get_all_discussion_posts(client, course_id=396812, discussion_id=9875322)
like_all_discussion_posts(client, all_posts)

# Increase the probability
like_all_discussion_posts(client, all_posts, probability=0.5)