not created by, affiliated with, or supported by Doist
Transferring assignments from your student Canvas account to your Todoist account couldn't be easier.
This project provides you with an easy way to transfer all of your assignments from a Canvas account into a Todoist account with appropraite due dates and assignment to auto-generated projects that match course names.
Easy run allows all configuration to be done inside of the program, avoiding the hassle of creating the config file directly. Just install the dependencies and follow the instructions on screen.
- Obtain your API Keys for Todoist and Canvas
- On Canvas desktop go to settings and click on
New Access Token
under Approved Integrations - On Todoist desktop go to settings and the API token will be listed under the
Integrations Tab
. You can also generate an application-specific token at https://developer.todoist.com/appconsole.html - Install required packages with
pip install -r requirements.txt
- Run
python easy_run.py
and follow up the prompts - A config.json file will be created with your selections so it can be run again in the future using the same keys and/or classes
❗ Every teacher uses Canvas slighly differently. We cannot be 100% responsible for any grades or assignments missed. It is YOUR resoponsibility to reeview Canvas regularly to ensure you are not behind.
Due Date Updates: The script will update due dates when they are modified. However it will not remove a due date if one is already set in Todoist, even if it is removed in Canvas, as Todoist API does not accept "NULL" as a due date update value. Due dates will not be updated in the event that they are REMOVED in Canvas, only updated if they are added or are changed to a different date.
Name or Assignment Changes: The script will not modify or remove Todist tasks retroactively, so if a teacher deletes or modifies an assignment, it will not be removed from Todoist. In the case of a name change, a new task would be created in Todoist with the new assignment name.
Graded Assignments: This script ignores any assignments once they are graded.
⚠️ This means that if a teacher enters "0" the assignment will be ignored, even if you have additional opportunities to submit it. Thus, it is recommended that you do not remove a task from Todoist until you are complete.
Submissions: This script assumes assignments with submissions do not need to be added.
⚡ You must keep track of any re-submissions or regrades seperately; this script does not have logic to handle them.
Duplicate tasks: Tasks are tracked based on the the class name and assigment title within Canvas. The script does not delete or remove tasks. If a teacher renames an assignment, you will end up with two assignments in Todoist (one under the old name, one under the new name) - only the new one will be kept up to date with any date changes.
☝️ Every teacher uses Canvas differently - there are several options available to handle different things teachers do in Canvas (such as creating ungraded/unsubmittable assignments, locked assignments, etc).
I recommend synching all assignments at the beginning of the semester, then adjusting your settings to exclude ungraded and null assignments once they are fully added.
Q: Why are Priority numbers different?
A: The Todoist API Priority numbers go from 1 (Default) to 4 (Very Urgent), which is the opposite as the UI (https://developer.todoist.com/rest/v2/#create-a-new-task)
Q: What are null/unsubmittable assignments?
A: Teachers can set submission method for an assignment to "none" or "not graded". This filters out those assignments (since you can't actually submit them)
Q: What are locked assignments?
A: Teachers can lock assignments so they cannot be viewed or done. These locks can be because a module is not unlocked, or they can be set to unlock at a certain date. If the setting to not sync locked assignments is enabled, any assignment which is locked (or is not set to unlock within the next 24 hours) will not be synced.
I use this regularly for my classes to sync to Todoist (which is my work System of Record), please open an issue for any problems you encounter or questions you have!
If you encounter any issues, please open an Issue with the appropriate data
Thanks to all the below for their contributions!
Scott Quach 💻 |
Jesse 💻 🐛 |
Andrei Cozma 🐛 |
Nassuel N. Valera 🐛 |
Luke Weiler 🐛 |
Caleb Stanford 🤔 🧑🏫 |