canvasapi icon indicating copy to clipboard operation
canvasapi copied to clipboard

PaginatedList doesn't process per_page and other kwargs

Open superle3 opened this issue 11 months ago • 0 comments

Describe the bug

PaginatedList hasn't been updated for the combine_kwargs method. It expects **kwargs being formatted as PaginatedList(..., **kwargs) instead of PaginatedList(...,_kwargs=combine_kwargs(**kwargs)) or PaginatedList(..., kwargs=combine_kwargs(**kwargs)).

Some functions use _kwargs=.. and others use kwargs=.., but the requester method uses _kwargs as a input so I am guessing _kwargs should be used for all.

currently this is done

        self._first_params = kwargs or {}
        self._first_params["per_page"] = kwargs.get("per_page", 100)

where 100 is the default instead of the 10 mentioned in the documentation.

To Reproduce

import time
CANVAS_TOKEN = ...; API_URL = ...;
canvas = Canvas(CANVAS_TOKEN, API_URL)
start = time.perf_counter()
list(canvas.get_courses(per_page=1))
print(time.perf_counter() - start)
start2 = time.perf_counter()
list(canvas.get_courses(per_page=30))
print(time.perf_counter() - start2)

Expected behavior

one would take longer then the other, but they take the same since both have per_page set to 100. kwargs will be {'_kwargs': [('per_page', 1)]} or {'_kwargs': [('per_page', 30)]}, but since per_page is not in it, the default is used and self._first_params = {'_kwargs': [('per_page', 1)], 'per_page': 100}

Environment information

it is still in the latest version of the github repo,

  • CanvasAPI version 3.3.0

Additional context

edit: from the logging 2025-03-19 14:16:43,560 - canvasapi.requester - DEBUG - Data: [('per_page', 1), ('per_page', 100)] which when converted to dictionary uses the last occurence so 100.

fix could be to remove self._first_params["per_page"] = kwargs.get("per_page", 100), or insert it in the beginning of _kwargs such that it gets overrided when the user gives it. Also documentation should be updated if this is the desired behaviour.

superle3 avatar Mar 19 '25 12:03 superle3