Skip to content

fix: don't override per_page in PaginatedList #686

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Let’s look at how we can use the `PaginatedList` returned by our `get_courses(
# Access the first element in our list.
#
# You'll notice the first call takes a moment, but the next N-1
# elements (where N = the per_page argument supplied; the default is 10)
# elements (where N = the per_page argument supplied; the default in canvasapi is 100)
# will be instantly accessible.
>>> print(courses[0])
TST101 Test Course (1234567)
Expand Down
2 changes: 1 addition & 1 deletion canvasapi/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -1168,7 +1168,7 @@ def get_grading_periods(self, **kwargs):
"accounts/{}/grading_periods".format(self.id),
{"account_id": self.id},
_root="grading_periods",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_grading_standards(self, **kwargs):
Expand Down
10 changes: 5 additions & 5 deletions canvasapi/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def get_unsynced_changes(self, **kwargs):
"courses/{}/blueprint_templates/{}/unsynced_changes".format(
self.course_id, self.id
),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def list_blueprint_migrations(self, **kwargs):
Expand All @@ -126,7 +126,7 @@ def list_blueprint_migrations(self, **kwargs):
self.course_id, self.id
),
{"course_id": self.course_id},
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def show_blueprint_migration(self, migration, **kwargs):
Expand Down Expand Up @@ -201,7 +201,7 @@ def get_details(self, **kwargs):
"courses/{}/blueprint_templates/{}/migrations/{}/details".format(
self.course_id, self.template_id, self.id
),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_import_details(self, **kwargs):
Expand All @@ -224,7 +224,7 @@ def get_import_details(self, **kwargs):
"courses/{}/blueprint_subscriptions/{}/migrations/{}/details".format(
self.course_id, self.subscription_id, self.id
),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)


Expand Down Expand Up @@ -258,7 +258,7 @@ def list_blueprint_imports(self, **kwargs):
self.course_id, self.id
),
{"course_id": self.id},
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def show_blueprint_import(self, migration, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion canvasapi/canvas.py
Original file line number Diff line number Diff line change
Expand Up @@ -820,7 +820,7 @@ def get_epub_exports(self, **kwargs):
"GET",
"epub_exports",
_root="courses",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_file(self, file, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion canvasapi/collaboration.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def get_collaborators(self, **kwargs):
"GET",
"collaborations/{}/members".format(self.id),
_root="collaborators",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)


Expand Down
16 changes: 8 additions & 8 deletions canvasapi/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -978,7 +978,7 @@ def get_collaborations(self, **kwargs):
"GET",
"courses/{}/collaborations".format(self.id),
_root="collaborations",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_content_export(self, content_export, **kwargs):
Expand Down Expand Up @@ -1018,7 +1018,7 @@ def get_content_exports(self, **kwargs):
self._requester,
"GET",
"courses/{}/content_exports".format(self.id),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_content_migration(self, content_migration, **kwargs):
Expand Down Expand Up @@ -1535,7 +1535,7 @@ def get_gradebook_history_details(self, date, **kwargs):
self._requester,
"GET",
"courses/{}/gradebook_history/{}".format(self.id, date),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_grading_period(self, grading_period, **kwargs):
Expand Down Expand Up @@ -1579,7 +1579,7 @@ def get_grading_periods(self, **kwargs):
"courses/{}/grading_periods".format(self.id),
{"course_id": self.id},
_root="grading_periods",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_grading_standards(self, **kwargs):
Expand Down Expand Up @@ -1719,7 +1719,7 @@ def get_lti_resource_links(self, **kwargs):
self._requester,
"GET",
f"courses/{self.id}/lti_resource_links",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_migration_systems(self, **kwargs):
Expand Down Expand Up @@ -2279,7 +2279,7 @@ def get_submission_history(self, date, grader_id, assignment_id, **kwargs):
"courses/{}/gradebook_history/{}/graders/{}/assignments/{}/submissions".format(
self.id, date, grader_id, assignment_id
),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_tabs(self, **kwargs):
Expand Down Expand Up @@ -2341,7 +2341,7 @@ def get_uncollated_submissions(self, **kwargs):
self._requester,
"GET",
"courses/{}/gradebook_history/feed".format(self.id),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_user(self, user, user_id_type=None, **kwargs):
Expand Down Expand Up @@ -2511,7 +2511,7 @@ def list_blueprint_subscriptions(self, **kwargs):
"GET",
"courses/{}/blueprint_subscriptions".format(self.id),
{"course_id": self.id},
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def preview_html(self, html, **kwargs):
Expand Down
4 changes: 2 additions & 2 deletions canvasapi/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ def get_collaborations(self, **kwargs):
"GET",
"groups/{}/collaborations".format(self.id),
_root="collaborations",
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_content_export(self, content_export, **kwargs):
Expand Down Expand Up @@ -353,7 +353,7 @@ def get_content_exports(self, **kwargs):
self._requester,
"GET",
"groups/{}/content_exports".format(self.id),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_content_migration(self, content_migration, **kwargs):
Expand Down
15 changes: 13 additions & 2 deletions canvasapi/paginated_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def __init__(
extra_attribs=None,
_root=None,
_url_override=None,
_kwargs=None,
**kwargs,
):
"""
Expand All @@ -50,14 +51,24 @@ def __init__(
Other URLs may be specified for third-party requests.
:type _url_override: str
:rtype: :class:`canvasapi.paginated_list.PaginatedList` of type content_class
:param _kwargs: A list of 2-tuples representing processed
keyword arguments to be sent to Canvas as params or data.
:type _kwargs: list[tuple[str, Any]]
"""
self._elements = list()

self._requester = requester
self._content_class = content_class
self._first_url = first_url
self._first_params = kwargs or {}
self._first_params["per_page"] = kwargs.get("per_page", 100)
_kwargs = _kwargs or []
for key, value in _kwargs:
if key == "per_page":
break
else:
# change kwargs such that if per_page is given as a keyword argument,
# we don't override it.
kwargs.setdefault("per_page", 100)
self._first_params = {"_kwargs": _kwargs, **kwargs}
self._next_url = first_url
self._next_params = self._first_params
self._extra_attribs = extra_attribs or {}
Expand Down
2 changes: 1 addition & 1 deletion canvasapi/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ def get_content_exports(self, **kwargs):
self._requester,
"GET",
"users/{}/content_exports".format(self.id),
kwargs=combine_kwargs(**kwargs),
_kwargs=combine_kwargs(**kwargs),
)

def get_content_migration(self, content_migration, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ Let’s look at how we can use the :code:`PaginatedList` returned by our :code:`
# Access the first element in our list.
#
# You'll notice the first call takes a moment, but the next N-1
# elements (where N = the per_page argument supplied; the default is 10)
# elements (where N = the per_page argument supplied; the default in canvasapi is 100)
# will be instantly accessible.
>>> print(courses[0])
TST101 Test Course (1234567)
Expand Down
10 changes: 5 additions & 5 deletions tests/fixtures/paginated_list.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
},
"4_2_pages_p1": {
"method": "ANY",
"endpoint": "four_objects_two_pages",
"endpoint": "four_objects_two_pages?per_page=2",
"data": [
{
"id": "1",
Expand Down Expand Up @@ -66,7 +66,7 @@
},
"6_3_pages_p1": {
"method": "ANY",
"endpoint": "six_objects_three_pages",
"endpoint": "six_objects_three_pages?per_page=2",
"data": [
{
"id": "1",
Expand Down Expand Up @@ -117,7 +117,7 @@
},
"no_header_4_2_pages_p1": {
"method": "ANY",
"endpoint": "no_header_four_objects_two_pages",
"endpoint": "no_header_four_objects_two_pages?per_page=2",
"data": {
"assessments": [
{
Expand All @@ -131,15 +131,15 @@
],
"meta": {
"pagination": {
"next": "https://example.com/api/v1/no_header_four_objects_two_pages?page=2"
"next": "https://example.com/api/v1/no_header_four_objects_two_pages?page=2&per_page=2"
}
}
},
"status_code": 200
},
"no_header_4_2_pages_p2": {
"method": "ANY",
"endpoint": "no_header_four_objects_two_pages?page=2",
"endpoint": "no_header_four_objects_two_pages?page=2&per_page=2",
"data": {
"assessments": [
{
Expand Down
Loading