-
Notifications
You must be signed in to change notification settings - Fork 186
Open
Description
Bug Description
The NewQuiz.update() method sends parameters in the wrong format, causing Canvas API to return "quiz is missing" errors even when the quiz exists and is accessible.
Expected Behavior
According to the Canvas New Quizzes API documentation, parameters should be formatted as:
quiz[title]=New Titlequiz[points_possible]=100
Actual Behavior
The canvasapi library sends parameters as:
title=New Titlepoints_possible=100
Steps to Reproduce
from canvasapi import Canvas
canvas = Canvas(API_URL, API_KEY)
course = canvas.get_course(COURSE_ID)
new_quiz = course.get_new_quiz(ASSIGNMENT_ID)
# This works - quiz is accessible
print(new_quiz.title)
# This fails with "quiz is missing" error
new_quiz.update(title="Updated Title")Error Response
{"errors":[{"message":"quiz is missing"}]}Root Cause
In canvasapi/new_quiz.py, the update() method uses combine_kwargs() which outputs parameters without the required quiz[] prefix that the Canvas API expects.
Workaround
Direct API calls with correct parameter formatting work:
import requests
data = {'quiz[title]': 'Updated Title'}
response = requests.patch(
f"{api_url}/api/quiz/v1/courses/{course_id}/quizzes/{assignment_id}",
headers={'Authorization': f'Bearer {api_key}'},
data=data
)Environment
- canvasapi version: 3.3.0
- Python version: 3.12
Suggested Fix
Prefix parameters with quiz[] in the update() method before calling combine_kwargs().