Skip to content

Commit 098b4ce

Browse files
committed
Add USER_AGENT constant and update OverkizClient to use it in headers; implement tests for User-Agent functionality
1 parent dabbb6e commit 098b4ce

5 files changed

Lines changed: 34 additions & 11 deletions

File tree

pyoverkiz/client.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from pyoverkiz._case import decamelize
2525
from pyoverkiz.action_queue import ActionQueue, ActionQueueSettings
2626
from pyoverkiz.auth import AuthStrategy, Credentials, build_auth_strategy
27-
from pyoverkiz.const import SUPPORTED_SERVERS
27+
from pyoverkiz.const import SUPPORTED_SERVERS, USER_AGENT
2828
from pyoverkiz.converter import converter
2929
from pyoverkiz.enums import APIType, ExecutionMode, Protocol, Server
3030
from pyoverkiz.exceptions import (
@@ -211,9 +211,7 @@ def __init__(
211211
self.gateways: list[Gateway] = []
212212
self.event_listener_id: str | None = None
213213

214-
self.session = session or ClientSession(
215-
headers={"User-Agent": "python-overkiz-api"}
216-
)
214+
self.session = session or ClientSession(headers={"User-Agent": USER_AGENT})
217215
self._ssl = verify_ssl
218216

219217
if self.server_config.api_type == APIType.LOCAL and verify_ssl:

pyoverkiz/const.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22

33
from __future__ import annotations
44

5+
from importlib.metadata import version
6+
57
from pyoverkiz.enums import Server
68
from pyoverkiz.enums.server import APIType
79
from pyoverkiz.models import ServerConfig
810

11+
USER_AGENT = f"pyoverkiz/{version('pyoverkiz')}"
12+
913
COZYTOUCH_ATLANTIC_API = "https://apis.groupe-atlantic.com"
1014
COZYTOUCH_CLIENT_ID = (
1115
"Q3RfMUpWeVRtSUxYOEllZkE3YVVOQmpGblpVYToyRWNORHpfZHkzNDJVSnFvMlo3cFNKTnZVdjBh"

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ dependencies = [
2525
[project.optional-dependencies]
2626
docs = [
2727
"mkdocs>=1.5.0,<2.0",
28-
"mkdocs-material>=9.5.0,<10.0",
29-
"mkdocstrings[python]>=0.24.0,<1.0",
30-
"mkdocs-autorefs>=1.0.0,<2.0",
28+
"mkdocs-material>=9.5.0",
29+
"mkdocstrings[python]>=0.24.0",
30+
"mkdocs-autorefs>=1.0.0",
3131
"pymdown-extensions>=10.0",
3232
]
3333

tests/test_client.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from pyoverkiz.action_queue import ActionQueueSettings
1414
from pyoverkiz.auth import UsernamePasswordCredentials
1515
from pyoverkiz.client import OverkizClient, OverkizClientSettings
16+
from pyoverkiz.const import USER_AGENT
1617
from pyoverkiz.enums import (
1718
APIType,
1819
DataType,
@@ -1208,6 +1209,26 @@ async def test_local_schedule_persisted_action_group_unknown_object(
12081209
)
12091210

12101211

1212+
class TestUserAgent:
1213+
"""Tests for the User-Agent header sent by OverkizClient."""
1214+
1215+
def test_user_agent_contains_version(self):
1216+
"""Verify the USER_AGENT constant follows the pyoverkiz/{version} format."""
1217+
assert USER_AGENT.startswith("pyoverkiz/")
1218+
version_part = USER_AGENT.split("/", 1)[1]
1219+
assert version_part # not empty
1220+
assert all(c.isdigit() or c == "." for c in version_part)
1221+
1222+
@pytest.mark.asyncio
1223+
async def test_client_session_uses_user_agent(self):
1224+
"""Verify that a client-created session includes the correct User-Agent header."""
1225+
client = OverkizClient(
1226+
server=Server.SOMFY_EUROPE,
1227+
credentials=UsernamePasswordCredentials("user", "pass"),
1228+
)
1229+
assert client.session.headers["User-Agent"] == USER_AGENT
1230+
1231+
12111232
class TestOverkizClientSettings:
12121233
"""Tests for the OverkizClientSettings integration with OverkizClient."""
12131234

uv.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)