Import Grade Comments

(23)
Problem:

Instructors need to upload comments for each student for an external assignment and have it displayed in the gradebook view for students.

 

Use Case:

This is especially significant when uploading assignment scores from an external system (student response "clicker" tools, Scantron services, external learning assessments). Often those external tools have a comments field with important details regarding the student's performance. In some cases the external system includes critical item information (e.g. "You answered A; The correct answer was B").

 

Proposed Solution:

  1. Allow a comments field (column) in the gradebook import csv file.
  2. Display the comment in a similar way that assignment comments are currently handled.
  3. BONUS POINTS: Allow the comments to be exported in the Gradebook export csv
129 Comments
gresham
Community Novice

I'm new to using canvas and I'm finding grading to be rather awkward. Adding in the comment through .csv file would be a really significant improvement/time saver/benefit to students because it would encourage more productive feedback from instructors.

watkinso
Community Novice

yet another feature that should've been there since the beginning but is now thrown into the forgotten pile. Typical for Canvas

jeff_quinlan
Community Explorer

Not sure I'm that cynical, but it would be wonderful if this was adopted soon. I was looking forward to seeing it in 2019, as Canvas had previously planned. 

jsraquet
Community Member

Any idea if this made it on the radar to be incorporated (soon)? I have not seen any progress made but it would be great to know.

JamesAshby
Community Contributor

Hi everyone. I developed a browser enhancement, driven by TamperMonkey, that lets you import a spreadsheet of comments into the grade book. The spreadsheet looks a lot like a grade import, except you supply comments instead of scores. Take a look at the install guide and let me know if you have any feedback: Comments Importer

m_ataei
Community Novice

I have developed this code (GitHub - mehdiataei/quercus-bots: This is my repository for the bots that I have developed for Querc... ) using the native API for batch uploading grades and comments. Feel free to open an issue if you need help with it. 

Mehdi Ataei


PhD candidate,

University of Toronto

mq11
Community Novice

This is a great idea. Especially since we cannot discuss certain course confidential information through email, it would be excellent if we could import comments (using each student ID as an identifier) for exam results, on how to calculate their grade, etc...

I give essay-type tests on paper, and assign points to each question. Then I type this in a excel file, where each column represents a question number, and each row is represents a Student. This helps me double check that I did not make any mistakes in calculating their grades, because I can see student's points for each question in one single excel row.

I don't give back their exams, but I do post a solution on CANVAS, and I would love for them to be able to know how many points they earned per question. So if I could upload this information in bulk on CANVAS, it would be great.

I cannot use SpeedGrader because my exams are on paper, and even if they were online exams, entering this information per question per student would take an enormous amount of time (since I would have to scroll down the window, enter the points in each box, and go student by student). Its speedier if I enter their points in excel, and then upload a CSV file.

As well, for large classes, where I cannot hand out their scantrons back due to the fact that it would be time consuming, I would love to upload their particular answers per question on CANVAS, so they can compare each answer they entered to the ones in my posted solution.

Please develop this as soon as possible.

maguire
Community Champion
mq11
Community Novice

Thank you so much!! This helped me a lot, I am new to CANVAS, but not new to python, so knowing that there is a solution to add comments in bulk for any assignment using python has made my life so much easier.

Thanks again!!!

jfb42
Community Explorer

I'm not sure why this is not yet implemented. It feels like a really basic feature that most people need, and coming from Blackboard - and at a university where we have to keep copies of grades on our own computers - the lack of comment upload is just baffling.

I don't have permission to use the API so sadly the Python scripts are useless to me. I typically teach classes of 100-200 students (yes, I know) and it's unreasonable to expect my graders to manually copy-and-paste comments into each student's grade, one by one. A huge waste of time.

nhge
Community Member

I tried to run the a browser enhancement provided by James Ashby (3-23-2020 post). I was able to get an "Import comments: " button to show up on my Canvas, but I got an error.txt when I tried to import comments for 408 students. Every line in this txt file is like this: 

Failed to post comment for student XXXXXXX and assignment Test assignment (627576) using endpoint /api/v1/courses/YYYYY/assignments/627576/submissions/sis_user_id:XXXXXXX. Response: 404 - Not Found 

So it did not work for me. I don't know how to run Python scripts either. Another user (jfb42) said that running Python requires permission to use API. I don't know whether the error I got here also means that I don't have permission to use API. Are there any other ways to get comments imported? 

 

IanStevenson
Community Member

I would like to be able to upload a CSV file with grades and text comments in the gradebook. This works well in Blackboard and is essential for small weekly formative tasks. The SpeedGrader is SLOW compared to simple CSV upload.

SeanMDavis
Community Member

Some way to upload grading comments is essential, and long overdue in this online/Covid era. 

I have to copy-paste hundreds of comments into the Speedgrader each semester (often 500+ for 100+ students). CSV/Excel importable *feedback* should be as easy as the existing importable grades. Just add a text field option, please.

jfb42
Community Explorer

It's inexcusable that this hasn't yet been implemented and I wish we could get some official response on *why* it hasn't.

SeanMDavis
Community Member

JFB42 --

Inexcusable, yes. And if the Python /API hack works (sounds like a hack to me), why doesn't Canvas roll it out? (How about a beta, Canvas?)

However, there may be wonderfully good news: We'll have "confetti" soon as a gamified reward when students submit on time. (That is in development. Uploadable comments, it seems, are still not.)

Students in your large courses *won't get detailed feedback* on assignments, but they'll get CONFETTI when they submit. 

Now, it is only virtual confetti, on a screen. But ... it IS confetti. That's gotta be worth something, right? I mean, how could one prioritize a way to deliver feedback on how well our students are achieving learning objectives ... when they don't yet have ... CONFETTI.

SeanMDavis
Community Member

Oh, and my mistake. It appears confetti has been out A WHILE. The additional development in-process is to add MORE options ... for the CONFETTI. 

I want to be clear that I'm not anti-confetti.

The benefits from confetti may be immeasurable, but there still is no CSV uploadable feedback. On a thread started in 2015.

nhge
Community Member

I have a piece of happy news to report after I posted my comment on 11-18-2020. With the help of the staff members from our Office of Information Technology and James Ashby, I was able to upload comments for a 400+ class using James Ashby's script (see his 3-23-2020 post). After our OIT staff contacted James about my issue, he kindly pushed out a modified version that fixed the issue and allowed comments importing to work. I cannot thank James Ashby enough! 

After you follow James' post, all you need to do is click "Check for user script updates" in TamperMonkey (see below screenshot for clarification). That will download the new version of the importer script. This version works! 

TamperMonkey.png

 

 

 

 

 

 

One additional problem I needed to fix in my CSV upload was that the "SIS User ID" column in the CSV file should look something like this: 000001234567. My original file was missing five zeros in front of all the student SIS User IDs. It's likely due to Excel stripping out those zeros when I open the CSV file. Herewith what Our OIT staff told me to fix the problem:

1) Manually add back five zeros in front of each students SIS User ID using a text editor; or
2) If you're starting from a fresh CSV export from Canvas, try using these instructions to import the data as "text" and specify that SIS User ID column as a "Text" column to prevent it getting the zeros truncated. Keep in mind you will need to start this process with a blank Excel sheet. 
These instructions are for Windows, but is pretty close to the same steps for Mac OS:
https://provider.www.upenn.edu/computing/da/bo/webi/qna/iv_csvLeadingZeros.html

Based on these instructions, I chose the 2) method. It worked! I am very happy that I was able to upload comments for my students after their exam and gave them feedback and encouragement. I am truly grateful to all the people who have helped me tremendously throughout the process. 

IanStevenson
Community Member

Hi @nhge ,

Could you please provide a link to James Ashby's 3-23-2020 post, I can't find it by searching.

Thanks,
Ian

IanStevenson
Community Member

Here's my contribution to the discussion. You would need to be able to code in Python and use the command line to make any use of this:

#CanvasGrader.py
#Ian Stevenson 17-02-2021

############################################
#DESCRIPTION
# This script reads in a CSV downloaded from the Canvas gradebook and uploads a grade and comment for the selected assignment that you have manually entered into the CSV file
# add a 'comment' column for your text comment
#
# command line arguments: CSV filename, column header for assignment, course number from Canvas URL
#
#
#REFERENCES#
############################################
#https://canvasapi.readthedocs.io/en/stable/getting-started.html
#https://canvasapi.readthedocs.io/en/stable/submission-ref.html
#https://canvas.instructure.com/doc/api/submissions.html#method.submissions_api.bulk_update
#https://community.canvaslms.com/t5/Developers-Group/Canvas-APIs-Getting-started-the-practical-ins-an...
#
#/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
#comment[text_comment] string #Add a textual comment to the submission.
#
#see useful code snippets at the bottom of file
############################################


# Import the Canvas class
from canvasapi import Canvas
## 'inspect' is used by canvasapi to inspect the class members
import inspect, sys, csv

#check command line arguments
if len(sys.argv)<4: #only infile specified
print ('Missing argument, usage: Python3 CanvasGrader.py infile AssignmentColumnTitle Course')
exit()

# Canvas API URL
API_URL = "https://canvas.uts.edu.au"
# Canvas API key
API_KEY = "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"

# Initialize a new Canvas object
canvas = Canvas(API_URL, API_KEY)
course = canvas.get_course(sys.argv[3]) #Obtained from Canvas Course URL in cmd line
print('Course: ' + course.name)
print()

#Get user ids
# users = course.get_users(enrollment_type=['student'])
# for user in users:
# print(user)
# print("Canvas user id: "+ str(user.id))
# print("Student number: "+ str(user.sis_user_id))

#Display assignment ids
print('List of Assignments')
assignments = course.get_assignments()
for assignment in assignments:
print(assignment)
print()

#Confirm assignment selected to grade from cmd line
print("Selected Assignment: "+ sys.argv[2])
print()

#Extract assignment number from column header
assArgList = sys.argv[2].split("(")
assArgList = assArgList[1].split(")")
assignmentNum = assArgList[0]
print("Assignment ID: " + assignmentNum)

#Get assignment object
assignment = course.get_assignment(assignmentNum) #requires assignment ID

#open csv and upload data
with open(sys.argv[1]) as csvfile:
reader=csv.DictReader(csvfile)
#column headings = "Student", "ID", "SIS User ID", "SIS Login ID", "Section", etc...
for row in reader: #get name and student number
if row['ID']:
submission = assignment.get_submission(row['ID']) #requires user ID
grade = row[sys.argv[2]] #use column header from cmd line argument
commentTxt = row['comment']
print(row['Student'] + " " + row['ID'] +': ' + grade + ', ' + commentTxt)
submission.edit(submission={'posted_grade':grade})
submission.edit(comment={'text_comment':commentTxt})

jkmt
Community Novice

Switched to canvas this academic year. Used a workflow with CSV files and comments with the competitor, but found out that this is not possible in Canvas. Then I read here that it has been on the radar for almost a decade?!?!

This simple feature is costing me hours per course!