From e1781e2615fd9baea39d47f3baedf902000a1b96 Mon Sep 17 00:00:00 2001 From: Matthew Emond Date: Mon, 22 Dec 2025 19:50:34 -0500 Subject: [PATCH 1/2] Add User-Agent --- CHANGELOG.md | 4 ++++ canvasapi/requester.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fcd585b0..899f37cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### General + +- Add a default User-Agent header + ## [3.4.0] - 2025-11-10 ### New Endpoint Coverage diff --git a/canvasapi/requester.py b/canvasapi/requester.py index 81b9c4de..5cc064aa 100644 --- a/canvasapi/requester.py +++ b/canvasapi/requester.py @@ -133,7 +133,7 @@ def request( _url=None, _kwargs=None, json=False, - **kwargs + **kwargs, ): """ Make a request to the Canvas API and return the response. @@ -167,6 +167,8 @@ def request( :type json: `bool` :rtype: :class:`requests.Response` """ + from canvasapi import __version__ + # Check for specific URL endpoints available from Canvas. If not # specified, pass the given URL and move on. if not _url: @@ -185,6 +187,9 @@ def request( auth_header = {"Authorization": "Bearer {}".format(self.access_token)} headers.update(auth_header) + if "User-Agent" not in headers: + headers["User-Agent"] = f"python-canvasapi/{__version__}" + # Convert kwargs into list of 2-tuples and combine with _kwargs. _kwargs = _kwargs or [] _kwargs.extend(kwargs.items()) From ff09ba601d86399656b4e5a280a4466a1d592c1b Mon Sep 17 00:00:00 2001 From: Matthew Emond Date: Mon, 22 Dec 2025 19:53:05 -0500 Subject: [PATCH 2/2] Add dbosk as contributor from issue #706 --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index fb1924bd..7df4e013 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -35,6 +35,7 @@ - Craig Thompson [@craigdsthompson](https://github.com/craigdsthompson) - Dalton Durst [@UniversalSuperBox](https://github.com/UniversalSuperBox) - Damian Sweeney [@damianfs](https://github.com/damianfs) +- Daniel Bosk [@dbosk](https://github.com/dbosk) - Daniel Brinkman [@DanBrink91](https://github.com/DanBrink91) - Daniel Grobani [@dgrobani](https://github.com/dgrobani) - Daniel Molares [@dmols](https://github.com/dmols)