Skip to content

Commit d126fdb

Browse files
committed
fix: don't override per_page in PaginatedList
Currently a default is set for `per_page` to 100, but later the manner of passing params to the functions was updated such that it is not the default but instead overrides `per_page`. You would get a dict of `{"_kwargs": [("per_page": 1)], "per_page": 100} which then converts to the following request https://institution/api/v1/courses?per_page=1&per_page=100 since we define `per_page` later it will also be put in later when expanded with .items(). keeps the same behaviour as before except that _kwargs now must be list[tuple[str,Any]], this doesn't break anything internally, but can break other people's code. Also made _kwargs keyword consistent for all PaginatedList calls, couldn't find any reason why they were different.
1 parent 45ba5ac commit d126fdb

10 files changed

+34
-23
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Let’s look at how we can use the `PaginatedList` returned by our `get_courses(
123123
# Access the first element in our list.
124124
#
125125
# You'll notice the first call takes a moment, but the next N-1
126-
# elements (where N = the per_page argument supplied; the default is 10)
126+
# elements (where N = the per_page argument supplied; the default in canvasapi is 100)
127127
# will be instantly accessible.
128128
>>> print(courses[0])
129129
TST101 Test Course (1234567)

canvasapi/account.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,7 @@ def get_grading_periods(self, **kwargs):
11681168
"accounts/{}/grading_periods".format(self.id),
11691169
{"account_id": self.id},
11701170
_root="grading_periods",
1171-
kwargs=combine_kwargs(**kwargs),
1171+
_kwargs=combine_kwargs(**kwargs),
11721172
)
11731173

11741174
def get_grading_standards(self, **kwargs):

canvasapi/blueprint.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def get_unsynced_changes(self, **kwargs):
103103
"courses/{}/blueprint_templates/{}/unsynced_changes".format(
104104
self.course_id, self.id
105105
),
106-
kwargs=combine_kwargs(**kwargs),
106+
_kwargs=combine_kwargs(**kwargs),
107107
)
108108

109109
def list_blueprint_migrations(self, **kwargs):
@@ -126,7 +126,7 @@ def list_blueprint_migrations(self, **kwargs):
126126
self.course_id, self.id
127127
),
128128
{"course_id": self.course_id},
129-
kwargs=combine_kwargs(**kwargs),
129+
_kwargs=combine_kwargs(**kwargs),
130130
)
131131

132132
def show_blueprint_migration(self, migration, **kwargs):
@@ -201,7 +201,7 @@ def get_details(self, **kwargs):
201201
"courses/{}/blueprint_templates/{}/migrations/{}/details".format(
202202
self.course_id, self.template_id, self.id
203203
),
204-
kwargs=combine_kwargs(**kwargs),
204+
_kwargs=combine_kwargs(**kwargs),
205205
)
206206

207207
def get_import_details(self, **kwargs):
@@ -224,7 +224,7 @@ def get_import_details(self, **kwargs):
224224
"courses/{}/blueprint_subscriptions/{}/migrations/{}/details".format(
225225
self.course_id, self.subscription_id, self.id
226226
),
227-
kwargs=combine_kwargs(**kwargs),
227+
_kwargs=combine_kwargs(**kwargs),
228228
)
229229

230230

@@ -258,7 +258,7 @@ def list_blueprint_imports(self, **kwargs):
258258
self.course_id, self.id
259259
),
260260
{"course_id": self.id},
261-
kwargs=combine_kwargs(**kwargs),
261+
_kwargs=combine_kwargs(**kwargs),
262262
)
263263

264264
def show_blueprint_import(self, migration, **kwargs):

canvasapi/canvas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,7 @@ def get_epub_exports(self, **kwargs):
820820
"GET",
821821
"epub_exports",
822822
_root="courses",
823-
kwargs=combine_kwargs(**kwargs),
823+
_kwargs=combine_kwargs(**kwargs),
824824
)
825825

826826
def get_file(self, file, **kwargs):

canvasapi/collaboration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def get_collaborators(self, **kwargs):
2222
"GET",
2323
"collaborations/{}/members".format(self.id),
2424
_root="collaborators",
25-
kwargs=combine_kwargs(**kwargs),
25+
_kwargs=combine_kwargs(**kwargs),
2626
)
2727

2828

canvasapi/course.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@ def get_collaborations(self, **kwargs):
978978
"GET",
979979
"courses/{}/collaborations".format(self.id),
980980
_root="collaborations",
981-
kwargs=combine_kwargs(**kwargs),
981+
_kwargs=combine_kwargs(**kwargs),
982982
)
983983

984984
def get_content_export(self, content_export, **kwargs):
@@ -1018,7 +1018,7 @@ def get_content_exports(self, **kwargs):
10181018
self._requester,
10191019
"GET",
10201020
"courses/{}/content_exports".format(self.id),
1021-
kwargs=combine_kwargs(**kwargs),
1021+
_kwargs=combine_kwargs(**kwargs),
10221022
)
10231023

10241024
def get_content_migration(self, content_migration, **kwargs):
@@ -1535,7 +1535,7 @@ def get_gradebook_history_details(self, date, **kwargs):
15351535
self._requester,
15361536
"GET",
15371537
"courses/{}/gradebook_history/{}".format(self.id, date),
1538-
kwargs=combine_kwargs(**kwargs),
1538+
_kwargs=combine_kwargs(**kwargs),
15391539
)
15401540

15411541
def get_grading_period(self, grading_period, **kwargs):
@@ -1579,7 +1579,7 @@ def get_grading_periods(self, **kwargs):
15791579
"courses/{}/grading_periods".format(self.id),
15801580
{"course_id": self.id},
15811581
_root="grading_periods",
1582-
kwargs=combine_kwargs(**kwargs),
1582+
_kwargs=combine_kwargs(**kwargs),
15831583
)
15841584

15851585
def get_grading_standards(self, **kwargs):
@@ -1719,7 +1719,7 @@ def get_lti_resource_links(self, **kwargs):
17191719
self._requester,
17201720
"GET",
17211721
f"courses/{self.id}/lti_resource_links",
1722-
kwargs=combine_kwargs(**kwargs),
1722+
_kwargs=combine_kwargs(**kwargs),
17231723
)
17241724

17251725
def get_migration_systems(self, **kwargs):
@@ -2279,7 +2279,7 @@ def get_submission_history(self, date, grader_id, assignment_id, **kwargs):
22792279
"courses/{}/gradebook_history/{}/graders/{}/assignments/{}/submissions".format(
22802280
self.id, date, grader_id, assignment_id
22812281
),
2282-
kwargs=combine_kwargs(**kwargs),
2282+
_kwargs=combine_kwargs(**kwargs),
22832283
)
22842284

22852285
def get_tabs(self, **kwargs):
@@ -2341,7 +2341,7 @@ def get_uncollated_submissions(self, **kwargs):
23412341
self._requester,
23422342
"GET",
23432343
"courses/{}/gradebook_history/feed".format(self.id),
2344-
kwargs=combine_kwargs(**kwargs),
2344+
_kwargs=combine_kwargs(**kwargs),
23452345
)
23462346

23472347
def get_user(self, user, user_id_type=None, **kwargs):
@@ -2511,7 +2511,7 @@ def list_blueprint_subscriptions(self, **kwargs):
25112511
"GET",
25122512
"courses/{}/blueprint_subscriptions".format(self.id),
25132513
{"course_id": self.id},
2514-
kwargs=combine_kwargs(**kwargs),
2514+
_kwargs=combine_kwargs(**kwargs),
25152515
)
25162516

25172517
def preview_html(self, html, **kwargs):

canvasapi/group.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ def get_collaborations(self, **kwargs):
309309
"GET",
310310
"groups/{}/collaborations".format(self.id),
311311
_root="collaborations",
312-
kwargs=combine_kwargs(**kwargs),
312+
_kwargs=combine_kwargs(**kwargs),
313313
)
314314

315315
def get_content_export(self, content_export, **kwargs):
@@ -353,7 +353,7 @@ def get_content_exports(self, **kwargs):
353353
self._requester,
354354
"GET",
355355
"groups/{}/content_exports".format(self.id),
356-
kwargs=combine_kwargs(**kwargs),
356+
_kwargs=combine_kwargs(**kwargs),
357357
)
358358

359359
def get_content_migration(self, content_migration, **kwargs):

canvasapi/paginated_list.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def __init__(
3131
extra_attribs=None,
3232
_root=None,
3333
_url_override=None,
34+
_kwargs=None,
3435
**kwargs,
3536
):
3637
"""
@@ -50,14 +51,24 @@ def __init__(
5051
Other URLs may be specified for third-party requests.
5152
:type _url_override: str
5253
:rtype: :class:`canvasapi.paginated_list.PaginatedList` of type content_class
54+
:param _kwargs: A list of 2-tuples representing processed
55+
keyword arguments to be sent to Canvas as params or data.
56+
:type _kwargs: list[tuple[str, Any]]
5357
"""
5458
self._elements = list()
5559

5660
self._requester = requester
5761
self._content_class = content_class
5862
self._first_url = first_url
59-
self._first_params = kwargs or {}
60-
self._first_params["per_page"] = kwargs.get("per_page", 100)
63+
_kwargs = _kwargs or []
64+
for key, value in _kwargs:
65+
if key == "per_page":
66+
break
67+
else:
68+
# change kwargs such that if per_page is given as a keyword argument,
69+
# we don't override it.
70+
kwargs.setdefault("per_page", 100)
71+
self._first_params = {"_kwargs": _kwargs, **kwargs}
6172
self._next_url = first_url
6273
self._next_params = self._first_params
6374
self._extra_attribs = extra_attribs or {}

canvasapi/user.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ def get_content_exports(self, **kwargs):
371371
self._requester,
372372
"GET",
373373
"users/{}/content_exports".format(self.id),
374-
kwargs=combine_kwargs(**kwargs),
374+
_kwargs=combine_kwargs(**kwargs),
375375
)
376376

377377
def get_content_migration(self, content_migration, **kwargs):

docs/getting-started.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ Let’s look at how we can use the :code:`PaginatedList` returned by our :code:`
9090
# Access the first element in our list.
9191
#
9292
# You'll notice the first call takes a moment, but the next N-1
93-
# elements (where N = the per_page argument supplied; the default is 10)
93+
# elements (where N = the per_page argument supplied; the default in canvasapi is 100)
9494
# will be instantly accessible.
9595
>>> print(courses[0])
9696
TST101 Test Course (1234567)

0 commit comments

Comments
 (0)