diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fb3063..4e0e4aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Changelog +## Unreleased + +- Send the `tibiawikisql/ (+https://github.com/tibia-sh/tibiawiki-sql)` User-Agent with every TibiaWiki API + request. Before, requests carried the `requests` library's default, `python-requests/`. + ## 9.0.0+tibiash.8 - Retry a TibiaWiki API request that gets no response within 60 seconds, a response cut short mid-body, a 429 or 5xx diff --git a/tests/tests_wikiapi.py b/tests/tests_wikiapi.py index 95ab282..bc78d68 100644 --- a/tests/tests_wikiapi.py +++ b/tests/tests_wikiapi.py @@ -6,6 +6,7 @@ import requests from tests import load_resource +from tibiawikisql import __version__ from tibiawikisql.api import Article, WikiClient, WikiEntry, Image from tibiawikisql.errors import WikiApiError @@ -313,3 +314,13 @@ def test_images_info_stops_after_retry_budget(self): self.assertEqual(context.exception.status, 502) self.assert_requests(5) self.assertEqual(self.sleep.call_args_list, [call(5), call(15), call(30), call(60)]) + + def test_requests_carry_the_user_agent(self): + client = WikiClient() + + request = client.session.prepare_request(requests.Request("GET", WikiClient.ENDPOINT)) + + self.assertEqual( + request.headers["User-Agent"], + f"tibiawikisql/{__version__} (+https://github.com/tibia-sh/tibiawiki-sql)", + ) diff --git a/tibiawikisql/api.py b/tibiawikisql/api.py index d51fda7..93f6f91 100644 --- a/tibiawikisql/api.py +++ b/tibiawikisql/api.py @@ -93,7 +93,7 @@ class WikiClient: ENDPOINT: ClassVar[str] = f"{BASE_URL}/api.php" headers: ClassVar[dict[str, str]]= { - "User-Agent": f'tibiawikisql/{__version__}', # noqa: Q000 + "User-Agent": f"tibiawikisql/{__version__} (+https://github.com/tibia-sh/tibiawiki-sql)", } def __init__(self, sleep: Callable[[float], None] = time.sleep) -> None: @@ -104,6 +104,7 @@ def __init__(self, sleep: Callable[[float], None] = time.sleep) -> None: """ self.session = requests.Session() + self.session.headers.update(self.headers) self._sleep = sleep def _get_json(self, params: dict) -> dict: