Skip to content

Latest commit

 

History

History
651 lines (463 loc) · 29.7 KB

CHANGELOG.md

File metadata and controls

651 lines (463 loc) · 29.7 KB

Change Log

3.2.0 - 2023-05-25

New Endpoint Coverage

General

  • Added support for pagination with metadata when headers are missing (Thanks, @bennettscience)
  • Added support for Python 3.11

Bugfixes

  • Fixed an issue where Course.create_discussion_topic wouldn't accept attachment files.

3.1.0 - 2023-04-21

New Endpoint Coverage

  • Account Calendars (Thanks, @dmols)
    • List available account calendars
    • Get a single account calendar
    • Update a calendar's visibility
    • Update many calendars' visibility
    • List all account calendars
  • Enrollments (Thanks, @svanderwulp)
    • Accept Course Invitation
    • Reject Course Invitation
  • File (Thanks, @bennettscience)
    • Update File
  • JWTs (Thanks @dmols)
    • Create JWTs
    • Refresh JWTs
  • Moderation Grading (Moderation Set)
    • List students selected for moderation
    • Select students for moderation
  • Query Course Events (Thanks, @dmols)
    • Query by course
    • Query by account
  • Rubrics (Thanks, @bennettscience)
    • Create, Update, and Delete Rubric Assessments
    • Create a Rubric Association
  • Users

General

  • Updated Codecov action to v3

Bugfixes

  • Fixed an issue where kwargs were not passed along to Canvas in Course.get_module(). (Thanks, @bennettscience)
  • Fixed an issue where not all functions allowed arbitrary keyword arguments. Added a test to detect and prevent this for the future.
  • Fixed an issue with Course.get_enabled_features() where it would throw an error trying to paginate. It now returns a list of strings directly. (Thanks, @bennettscience)
  • Added missing docs for AssignmentOverride. (Thanks, @lafent)
  • Fixed a typo in Canvas.create_calendar_event() where an error message improperly listed the missing key as 'context_codes' instead of 'context_code'. (Thanks, @dmols and @mikesuhan)

3.0.0 - 2022-09-21

New Endpoint Coverage

General

  • Added support for Python 3.10
  • Smart DateTimes now support any ISO 8601 format, including time offsets. (Thanks, @kailukaitisBrendan)

Bugfixes

  • Fixed an issue where kwargs were not passed along to Canvas in User.get_profile(). (Thanks, @breed)

Breaking Changes

  • Dropped support for Python 3.6
  • Update QuizSubmission.get_submission_events to return a PaginatedList. (Thanks, @stevenbell)
  • Update Course.get_course_level_student_summary_data to return a PaginatedList of CourseStudentSummary items instead of a dictionary. (Thanks, @craigdsthompson)
  • Update Course.get_outcome_results to return a PaginatedList of OutcomeResult items instead of a dictionary. (Thanks, @bennettscience)
  • Remove unnecessary id parameter from delete, reorder_question_group, and update methods in QuizGroup class. (Thanks, @kailukaitisBrendan)
  • Update Submission to return attachments as File objects instead of dictionaries. (Thanks, @laitingsheng)

2.2.0 - 2021-03-25

New Endpoint Coverage

General

  • 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 the Forbidden 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

Bugfixes

  • Fixed an issue where Canvas.create_poll() did not work due to an incorrect parameter.
  • Canvas.get_todo_items() now correctly returns a PaginatedList of Todo items (Thanks, @bennettscience)
  • Fixed an issue where Favorite.remove() did not handle parameters properly. (Thanks, @deundrewilliams)

2.1.0 - 2020-12-04

New Endpoint Coverage

General

  • 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 parameter context_codes, which accepts a list of course IDs or Course objects.
  • Updated contributing guide
  • Added missing documentation for the "Smart DateTimes" feature
  • Added basic troubleshooting guide to documentation

Bugfixes

  • 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)

Deprecation Warnings

  • The enrollment_type argument on Course.enroll_user is now deprecated. Pass this information to enrollment[type] as a keyword argument instead. e.g. enroll_user(enrollment={'type': 'StudentEnrollment'})

2.0.0 - 2020-08-14

General

  • Added support for arbitrary keyword arguments across the entire library

New Endpoint Coverage

Bugfixes

  • Fixed an issue where Quiz.get_quiz_group incorrectly set course_id to the quiz ID. (Thanks,@hcolclou)
  • Fixed an issue where Course.create_external_tool didn't accept client_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 set group_id to the page ID. Now correctly sets group_id or course_id appropriately.

Breaking Changes

  • Course.create_external_tool no longer supports positional arguments for its required parameters. Use keyword arguments instead.

1.0.0 - 2020-07-09

General

  • 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

Bugfixes

  • Fixed an issue where the user-provided API_URL/base_url wasn't run through cleanup.

Deprecation Warnings

  • 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 contain api/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

New Endpoint Coverage

General

  • Updated README to use updated parameters for getting a user's courses by enrollment state (Thanks,@Vishvak365)

Deprecation Warnings

  • ⚠️ This is the final release with support for Python 2.7 ⚠️
  • ⚠️ This is the final release with support for Python 3.4 ⚠️
  • 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.

Bugfixes

  • Fixed an issue where Quiz.get_submission() ignored data added from using the include kwarg. (Thanks,@Mike-Nahmias)
  • Fixed the broken __str__ method on the ChangeRecord 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

New Endpoint Coverage

General

  • Throw IndexError when using negative indexes on PaginatedList objects (Thanks, @UniversalSuperBox)
  • Assignment.overrides now returns a list of AssignmentOverride objects.

Deprecation Warnings

  • 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.

Bugfixes

  • Fixed an issue where util.clean_headers() would throw a ValueError 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

New Endpoint Coverage

  • 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

General

  • Removed overzealous global enabling of DeprecationWarning. (Thanks, @Screeeech)
    • Note: DeprecationWarnings are disabled by default, so you may need to run your code with python -Wd to see them.

0.13.0 - 2019-07-08

New Endpoint Coverage

General

Deprecation Warnings

  • Quiz.get_all_quiz_submissions is now deprecated. Use Quiz.get_submissions instead.

Bugfixes

  • 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 to get_multiple_submissions would be ignored. These methods now return a GroupedSubmission object containing multiple Submission objects, instead of ignoring. (Thanks, @bennettscience)

0.12.0 - 2019-04-03

New Endpoint Coverage

General

Bugfixes

  • Fixed an issue where Section.edit() didn't accept keyword arguments (Thanks, @wjw27)

0.11.0 - 2018-09-17

New Endpoint Coverage

General

Bugfixes

  • 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

New Endpoint Coverage

General

Deprecation Warnings

  • All methods starting with list_ have been deprecated. Each has been replaced with a corresponding method starting with get_. For example, Course.list_groups() is now Course.get_groups(). The list_ methods will be removed in a future release. (Thanks @qwertynerd97 for doing the bulk of the grunt work.)
  • Course.update_tab() is now deprecated. Use Tab.update() instead.

Bugfixes

  • Fixed a bug where taking a slice of a PaginatedList where the start 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

New Endpoint Coverage

  • Quiz Questions

General

  • 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.

Deprecation Warnings

  • ⚠️ Dropped support for Python 3.3 ⚠️
  • Several methods in the Course and Section classes relating to assignments and submissions have been deprecated.
    • Comparable methods have been implemented in the Assignment and Submission 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.
  • Course.list_sections() has been deprecated. Use Course.get_sections() instead.

Bugfixes

  • 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

Bugfixes

  • Fixed an issue where editing and deleting user logins would use incorrect IDs.

0.8.1 - 2018-01-23

General

  • Fixed several incorrect and missing docstrings

Bugfixes

  • 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

New Endpoint Coverage

  • 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)

General

  • 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 the requester object. (e.g. course._requester._cache)
  • Files can now be downloaded directly from the File object in one of two ways: (Thanks, @DanBrink91)
    1. get_contents will directly return the contents of the file. (e.g. file.get_contents())
    2. 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 called CurrentUser. There is a new method in the Canvas class called get_current_user to access this object. (e.g. canvas.get_current_user()) (Thanks, @DanBrink91)

Bugfixes

  • Fixed a bug where creating conversations wouldn't work until the user iterated over the response.
  • Lots of formatting fixes and spelling corrections.

Deprecation Warning

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!

New Endpoint Coverage

  • Upload file to a Submission Comment (Submission.upload_comment())

General

  • Switched to flake8 instead of just pyflakes and pycodestyle.
  • 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.

Bugfixes

  • 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 to True. It now correctly always sets grouped to False 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

General

  • Added support for SIS IDs to get accounts, courses, groups and sections. (Thanks for the suggestion, @sigurdurb!)

0.5.1 - 2017-08-02

General

Bugfixes

  • 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

New Endpoint Coverage

  • Files (Get file from Canvas, Course, Group, or User)

General

  • Added support for Python 3.3, 3.4, 3.5, and 3.6 while maintaining 2.7 compatibility.

Bugfixes

  • Fixed an issue where non-ASCII characters in CanvasObject data would throw UnicodeEncodeError exceptions.

0.4.0 - 2017-06-16

New Endpoint Coverage

  • Analytics
  • Announcement External Feeds
  • Authentication Providers
  • Communications Channels
  • Files
  • Logins
  • Notification Preferences
  • Submissions
  • Search
  • Tabs
  • User Observees

General

  • 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

New Endpoint Coverage

  • Appointment Groups
  • Assignment Groups
  • Bookmarks
  • Calendar Events
  • Discussions
  • External Tools

General

  • Updated CHANGELOG.md format
  • Created AUTHORS.md
  • Added LICENSE
  • Added pycodestyle and pyflakes 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

New Endpoint Coverage

  • Groups
  • Roles
  • Page Revisions
  • Sections
  • Conversations

General

  • 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.

Bugfixes

  • Moved some incorrectly placed enrollment methods to the Enrollment class.
  • Corrected Process class to Progress
  • Minor text fixes.

0.1.2 - 2016-07-22

New Endpoint Coverage

  • Getting a Group
  • Uploading a file to a Course or User
  • Several Page related endpoints

General

  • 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

Bugfixes

  • Added some missing parameters
  • Fixed some incorrectly defined parameters
  • Fixed an issue where tests would fail due to an improperly configured requires block