2.2.0 - 2021-03-25
- Enroll a user in a section (Thanks, @damianfs)
- File quota for courses, groups, and users (Thanks, @deundrewilliams)
- Provisional Grades (Thanks, @zenith110)
- Added support for Python 3.9
- Added
RateLimitExceeded
exception to distinguish between being rate limited and being otherwise forbidden from accesing a resource. It is a subclass of theForbidden
exception. - File uploads now accept path-like objects (Thanks, @theunkn0wn1)
- Add list of CanvasAPI Projects to README (Thanks, @deundrewilliams)
- PyPI Package Description now uses README (Thanks, @bennettscience)
- Replaced Travis CI with GitHub Actions
- Fixed an issue where
Canvas.create_poll()
did not work due to an incorrect parameter. - Canvas.get_todo_items() now correctly returns a
PaginatedList
ofTodo
items (Thanks, @bennettscience) - Fixed an issue where
Favorite.remove()
did not handle parameters properly. (Thanks, @deundrewilliams)
2.1.0 - 2020-12-04
- Course TODO items (Thanks, @onomou)
- Create observer pairing code (Thanks, @bennettscience)
- Added missing documentation for the get_current_user method and clarifications to the
CurrentUser
class. (Thanks, @Xx-Ashutosh-xX) Canvas.get_announcement
now has a required parametercontext_codes
, which accepts a list of course IDs orCourse
objects.- Updated contributing guide
- Added missing documentation for the "Smart DateTimes" feature
- Added basic troubleshooting guide to documentation
- Fixed an issue where an
Announcement
object sometimes didn't have an associated course ID. (Thanks, @bennettscience) - Fixed an issue where an encoding problem could lead to file downloads hanging indefinitely. (Thanks, @blepabyte)
- The
enrollment_type
argument onCourse.enroll_user
is now deprecated. Pass this information toenrollment[type]
as a keyword argument instead. e.g.enroll_user(enrollment={'type': 'StudentEnrollment'})
2.0.0 - 2020-08-14
- Added support for arbitrary keyword arguments across the entire library
- Custom Gradebook Columns (Thanks,@aileenpongnon)
- Files
- Resolve Path (Thanks,@dsavransky)
- Fixed an issue where
Quiz.get_quiz_group
incorrectly setcourse_id
to the quiz ID. (Thanks,@hcolclou) - Fixed an issue where
Course.create_external_tool
didn't acceptclient_id
(LTI 1.3 support). - Fixed an issue where
Module.create_module_item
didn't (Thanks,@aileenpongnon and @onomou) - Fixed an issue where
Page.revert_to_revision
would incorrectly always setgroup_id
to the page ID. Now correctly setsgroup_id
orcourse_id
appropriately.
Course.create_external_tool
no longer supports positional arguments for its required parameters. Use keyword arguments instead.
1.0.0 - 2020-07-09
- Added support for Python 3.8
- Dropped support for Python 3.4, 3.5, and 2.7
- Removed all previously deprecated methods and attributes.
- Upgraded Ubuntu version for Travis (Thanks,@jonespm)
- Set up automatic deployments to PyPI via Travis
- Set up nightly build
0.16.1 - 2020-07-06
- Fixed an issue where the user-provided API_URL/base_url wasn't run through cleanup.
- Using
/api/v1/
in the API_URL has been deprecated since v0.8.0 and legacy support will be removed in the next release. Ensure your provided url doesn't containapi/v1/
. See deprecation warning in changelog for v0.8.0. ⚠️ This is the final release with support for Python 3.5⚠️
0.16.0 - 2020-06-26
- Enrollment Terms
- Get a Single Enrollment Term (Thanks, @lcamacho)
- Files
- Resolve Path for Course (Thanks,@dsavransky)
- GraphQL (Thanks,@jonespm)
- Late Policy (Thanks, @kennygperez)
- Quiz Assignment Overrides (Thanks, @kennygperez)
- Quiz Statistics (Thanks, @andrew-gardener)
- Updated README to use updated parameters for getting a user's courses by enrollment state (Thanks,@Vishvak365)
⚠️ This is the final release with support for Python 2.7⚠️ - Python 2.7 is end-of-life as of January 2020
- Future releases of CanvasAPI will NOT support any version of Python 2
⚠️ This is the final release with support for Python 3.4⚠️ - Python 3.4 is end-of-life as of March 2019
- Future releases of CanvasAPI will NOT support Python 3.4 or below
- This is the final deprecation warning for all methods marked as deprecated in this changelog or in our documentation. They will be removed in the next release.
- Fixed an issue where
Quiz.get_submission()
ignored data added from using theinclude
kwarg. (Thanks,@Mike-Nahmias) - Fixed the broken
__str__
method on theChangeRecord
class (Thanks,@Mike-Nahmias) - Fixed an issue where printing an
AccountReport
would fail due to not having an ID (Thanks,@Mike-Nahmias) - Fixed an issue where
"report_type"
was passed improperly (Thanks,@brucespang) - Fixed some new
flake8
issues (Thanks,@dsavransky and @jonespm) - Fixed an incorrect docstring for
Course.create_page()
(Thanks,@dsavransky) - Fixed an issue where extra whitespace in the user-supplied canvas URL would break
PaginatedList
(Thanks,@amorqiu)
0.15.0 - 2019-11-19
- Assignment Extensions (Thanks, @ljoks)
- AssignmentGroup (Thanks, @ctcuff)
- List Assignments
- Authentications Log (Thanks, @weining-li)
- Brand Configs (Thanks, @bennettscience)
- Comm Messages (Thanks, @ljoks)
- File Usage Rights (Thanks, @atarisafari and @joonro)
- Gradebook History (Thanks, @gdijkhoffz)
- Quiz Reports (Thanks, @atarisafari
- Quiz Submission Events (Thanks, @Goff-Davis)
- Quiz Submission User List (Thanks, @gdijkhoffz)
- Rubric Associations (Thanks, @weining-li)
- Throw
IndexError
when using negative indexes onPaginatedList
objects (Thanks, @UniversalSuperBox) Assignment.overrides
now returns a list ofAssignmentOverride
objects.
CanvasObject.attributes
is now deprecated and will be removed in a future version.CanvasObject.to_json()
is now deprecated and will be removed in a future version. To view the original attributes sent by Canvas, enable logs from the requests library.
- Fixed an issue where
util.clean_headers()
would throw aValueError
if a user accidentally included a space in their API token. (Thanks, @keeeeeegan) - Fixed an issue where
QuizSubmission
objects sometimes wouldn't have a course_id, making some methods unusable. (Thanks, @bennettscience) - Fixed an issue where
get_user()
did not accept arbitrary keyword arguments (Thanks, @eriktews) - Fixed an issue where an import was triggering a
DeprecationWarning
(Thanks, @Screeeech) - Fixed an issue where a GroupedSubmission wasn't saving the
submissions
attribute properly
0.14.0 - 2019-08-20
- API Token scopes (Thanks, @jrsilveti)
- List scopes
- Account Notifications (Thanks, @jrsilveti)
- Show a global notification
- Update a global notification
- Account Reports (Thanks, @jrsilveti)
- Start a report
- Status of a report
- Delete a report
- Collaborations (Thanks, @jrsilveti)
- List collaborations
- List members of a collaboration
- Feature Flags (Thanks, @cat0698)
- List features
- List enabled features
- Get feature flag
- Set feature flag
- Remove feature flag
- Rubric (Thanks, @cat0698)
- Create a single rubric
- Removed overzealous global enabling of
DeprecationWarning
. (Thanks, @Screeeech)- Note:
DeprecationWarnings
are disabled by default, so you may need to run your code withpython -Wd
to see them.
- Note:
0.13.0 - 2019-07-08
- Content Exports (Thanks, @weining-li)
- ePub Exports (Thanks, @jrsilveti)
- Favorites (Thanks, @atarisafari)
- Grading Periods (Thanks, @jrsilveti)
- Outcome Import (Thanks, @jrsilveti)
- Peer Reviews (Thanks, @vutoan1245)
- Planner (Thanks, @weining-li)
- Planner
- Planner Notes
- Planner Overrides
- Polls (Thanks, @Goff-Davis)
- Poll
- PollChoice
- PollSession
- PollSubmission
- Quiz Submission Questions (Thanks, @bradfordlynch)
- Added documentation for Debugging
- Added request and response logging to
Requester.request
- Added documentation for Exceptions
- Added generic error handling for unhandled 4XX+ HTTP errors
- Added Code of Conduct
- Added support for PATCH methods (Thanks, @us91)
- Added a warning when using a blank
CANVAS_URL
(Thanks, @gdijkhoffz) - Added Issue and Pull Request Templates
- Added CODEOWNERS file
Quiz.get_all_quiz_submissions
is now deprecated. UseQuiz.get_submissions
instead.
- Fixed an issue where creating an external tool did not properly send parameters to Canvas. (Thanks, @altgilbers)
- Fixed an issue where getting Quiz Submissions would only return up to the first 10 results (Thanks,@Mike-Nahmias)
- Fixed an issue where unhandled 4XX and 5XX HTTP errors would cause a JSONDecodeError
- Removed a limitation where the parameter
grouped
being passed toget_multiple_submissions
would be ignored. These methods now return aGroupedSubmission
object containing multipleSubmission
objects, instead of ignoring. (Thanks, @bennettscience)
0.12.0 - 2019-04-03
- Assignment Overrides
- Quiz Submissions (Thanks, @wallacetyler)
- Blueprints (Thanks, @gdijkhoffz)
- Create an Admin (Thanks, @altgilbers)
- SIS Imports (Thanks, @nottheswimmer)
- Create and Delete Communication Channels (Thanks, @matthewf-ucsd)
- Added support for HTTP response 409 (Thanks, @wallacetyler)
- Fixed an issue where
Section.edit()
didn't accept keyword arguments (Thanks, @wjw27)
0.11.0 - 2018-09-17
- Get all quiz submissions (Thanks, @petarGitNik)
- Upload a file to a submission (Thanks, @MarkLalor)
- Upload a file to a folder (Thanks, @elec3647)
- Get Admins in an account (Thanks, @kensler)
- Added support for Python 3.7
- Added a warning when using HTTP for the base url instead of HTTPS. This should help prevent some confusing behavior that Canvas exhibits when making HTTP requests to an HTTPS-enabled instance.
- Added more detailed documentation for passing complex parameters as keyword arguments.
- Fixed an issue where
Outcome.get_subgroups()
didn't have sufficient context to call other methods. - Fixed improper passing of keyword arguments when editing a Module (Thanks, @phaustin)
0.10.0 - 2018-06-01
- Content Migrations (Thanks, @qwertynerd97)
- Copy a File (Thanks, @qwertynerd97)
- Course Quiz Extensions
- List Announcements (Thanks, @rmanbaird)
- Grade/Comment on Multiple Submissions (Thanks, @rmanbaird)
- Quiz Extensions
- Lots of docstring fixes. (Thanks, @rmanbaird)
- All methods starting with
list_
have been deprecated. Each has been replaced with a corresponding method starting withget_
. For example,Course.list_groups()
is nowCourse.get_groups()
. Thelist_
methods will be removed in a future release. (Thanks @qwertynerd97 for doing the bulk of the grunt work.) Course.update_tab()
is now deprecated. UseTab.update()
instead.
- Fixed a bug where taking a slice of a
PaginatedList
where thestart
was larger than the list caused an infinite loop. - Fixed a typo that prevented
Assignment.submit()
from working properly. (Thanks, @Tobiaqs)
0.9.0 - 2018-03-01
- Quiz Questions
- Added example usage for several common endpoints to our documentation.
- Updated
PaginatedList
to allow specification of the root element to build the list from when given an atypical JSON response (see #146). (thanks @dfwarden) - Improved keyword argument support for
course.get_section()
(thanks @andrew-gardener) - When uploading a file to a submission with
Submission.upload_comment()
, it will automatically attached to a new comment.
⚠️ Dropped support for Python 3.3⚠️ - Python 3.3 is end-of-life as of September 2017
- Should continue to function in 3.3, but compatibility cannot be guaranteed going forward.
- Several methods in the
Course
andSection
classes relating to assignments and submissions have been deprecated.- Comparable methods have been implemented in the
Assignment
andSubmission
classes, as appropriate. - The deprecated methods now include a warning in the documentation with reference to the replacement. Additionally, the deprecated methods will raise a
DeprecationWarning
. - These methods will be removed in a future release.
- Comparable methods have been implemented in the
Course.list_sections()
has been deprecated. UseCourse.get_sections()
instead.
- Fixed an issue where booleans would be capitalized when sent to Canvas, causing Canvas to misinterpret them and set default values.
- Fixed an issue where unexpected JSON responses from Canvas would cause
PaginatedList
objects to fail.
0.8.2 - 2018-01-24
- Fixed an issue where editing and deleting user logins would use incorrect IDs.
0.8.1 - 2018-01-23
- Fixed several incorrect and missing docstrings
- Fixed an issue where Canvas returning
while(1);
at the beginning of a response to uploading a file prevented uploads from completing. - Fixed an issue where a trailing slash in the provided BASE_URL would cause
PaginatedList
objects to fail. - Fixed an issue where combine_kwargs was transposing empty brackets and keys when a dictionary had a list as a value.
0.8.0 - 2018-01-04
- Account
- Delete a sub account
- Grading Standards (Thanks, @JonGuilbe)
- Notification Preferences (Thanks, @a-goetz)
- Update a preference
- Update preferences by category
- Update multiple preferences
- Outcomes (Thanks, @a-goetz)
- Quiz Question Groups (Thanks, @JonGuilbe)
- Rubric (Thanks, @sigurdurb)
- Added support for other iterables as parameter values. (Thanks, @liblit)
- For many endpoints that accept an "object id", either a CanvasAPI Object or integer ID can now be passed. (Thanks, @a-goetz)
- Added a requester cache that remembers the last 5 requests to Canvas. It can be accessed as the attribute
_cache
of therequester object
. (e.g.course._requester._cache
) - Files can now be downloaded directly from the
File
object in one of two ways: (Thanks, @DanBrink91)get_contents
will directly return the contents of the file. (e.g.file.get_contents()
)download
will download the file and save it to the provided path. (e.g.file.download('example.txt')
)
- Moved several methods exclusive to the API Key owner's user from the
User
class to a new class calledCurrentUser
. There is a new method in theCanvas
class calledget_current_user
to access this object. (e.g.canvas.get_current_user()
) (Thanks, @DanBrink91)
- Fixed a bug where creating conversations wouldn't work until the user iterated over the response.
- Lots of formatting fixes and spelling corrections.
Including /api/v1/
at the end of the API URL passed to a new Canvas
object is now deprecated. Users should now only pass the root URL into the Canvas
object (e.g. "https://example.com/api/v1/"
should now be "https://example.com"
).
For now, users including /api/v1/
will see a DeprecationWarning
, but things will otherwise operate normally. The ability to continue using /api/v1/
will be removed in a future release.
0.7.0 - 2017-10-04
Thanks to all the contributors who helped with this release: @stephenwoosley, @jackrsteiner, and @allygator. You guys are awesome!
Huge thanks to @liblit for lots of issues, suggestions, and pull requests. Couldn't have done all this without you!
- Upload file to a Submission Comment (
Submission.upload_comment()
)
- Switched to
flake8
instead of justpyflakes
andpycodestyle
. - Added markdown linter and fixed related issues.
DateTime
"Smart Objects" are now timezone aware.- Keyword arguments now support lists and tuples. Can be nested in other lists and/or inside dictionaries. See issue #55 for details.
DateTime
objects passed as params now auto-format to ISO 8601 strings.- Added table of contents to README.
- Updated "Getting Started" page in Documentation to match README.
- Fixed an issue where editing a page would report a missing ID.
- Fixed an issue where kwargs weren't passed along in
Course.get_pages()
. - Fixed an issue where
Course.list_multiple_submissions()
would always set grouped toTrue
. It now correctly always sets grouped toFalse
by removing the param. - Fixed several issues relating to
DiscussionTopic
methods returning incorrect types. - Fixed an issue where reordering pinned topics had no valid values for the order param.
0.6.0 - 2017-08-15
- Added support for SIS IDs to get accounts, courses, groups and sections. (Thanks for the suggestion, @sigurdurb!)
0.5.1 - 2017-08-02
- Moved documentation to Read the Docs.
- Fixed an issue where kwargs in Python 2.7 wouldn't be properly formatted when converted to get parameters.
0.5.0 - 2017-07-10
- Files (Get file from Canvas, Course, Group, or User)
- Added support for Python 3.3, 3.4, 3.5, and 3.6 while maintaining 2.7 compatibility.
- Fixed an issue where non-ASCII characters in CanvasObject data would throw UnicodeEncodeError exceptions.
0.4.0 - 2017-06-16
- Analytics
- Announcement External Feeds
- Authentication Providers
- Communications Channels
- Files
- Logins
- Notification Preferences
- Submissions
- Search
- Tabs
- User Observees
- Set up TravisCI and Coveralls.
- Added Badges to README.
- Updated CONTRIBUTING.md to more accurately reflect our dev process.
0.3.0 - 2017-03-30
- Appointment Groups
- Assignment Groups
- Bookmarks
- Calendar Events
- Discussions
- External Tools
- Updated CHANGELOG.md format
- Created AUTHORS.md
- Added LICENSE
- Added
pycodestyle
andpyflakes
requirements - Added setup.cfg with
pycodestyle
max-line-length definition - Moved .coveragerc settings to setup.cfg
- Changed
assert
statements to use the assertion methods built into unittest.
0.2.0 - 2017-01-04
- Groups
- Roles
- Page Revisions
- Sections
- Conversations
- Standardized
__str__
methods. They now (generally) follow the convention of the value of the single most relevant field followed by an ID in parentheses. - Reworked how
requests_mock
is used in test suite. - Nested dictionaries are now allowed as kwargs
- Split 401 into two exceptions:
InvalidAccessToken
if'WWW-Authenticate'
header is present. Otherwise,Unauthorized
.
- Moved some incorrectly placed enrollment methods to the Enrollment class.
- Corrected
Process
class toProgress
- Minor text fixes.
0.1.2 - 2016-07-22
- Getting a Group
- Uploading a file to a Course or User
- Several Page related endpoints
- Added contribution guide
- Added Docker container for testing (e.g. with Jenkins)
- Split requirements files into three:
- dev_requirements.txt
- tests_requirements.txt
- requirements.txt
- Added some missing parameters
- Fixed some incorrectly defined parameters
- Fixed an issue where tests would fail due to an improperly configured requires block