Skip to content

Commit 100da37

Browse files
Validate transport api_key type and emptiness
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 13b982f commit 100da37

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

hyperbrowser/transport/async_transport.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ class AsyncTransport(AsyncTransportStrategy):
1313
"""Asynchronous transport implementation using httpx"""
1414

1515
def __init__(self, api_key: str, headers: Optional[Mapping[str, str]] = None):
16+
if not isinstance(api_key, str):
17+
raise HyperbrowserError("api_key must be a string")
18+
normalized_api_key = api_key.strip()
19+
if not normalized_api_key:
20+
raise HyperbrowserError("api_key must not be empty")
1621
merged_headers = {
17-
"x-api-key": api_key,
22+
"x-api-key": normalized_api_key,
1823
"User-Agent": f"hyperbrowser-python-sdk/{__version__}",
1924
}
2025
normalized_headers = normalize_headers(

hyperbrowser/transport/sync.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@ class SyncTransport(SyncTransportStrategy):
1313
"""Synchronous transport implementation using httpx"""
1414

1515
def __init__(self, api_key: str, headers: Optional[Mapping[str, str]] = None):
16+
if not isinstance(api_key, str):
17+
raise HyperbrowserError("api_key must be a string")
18+
normalized_api_key = api_key.strip()
19+
if not normalized_api_key:
20+
raise HyperbrowserError("api_key must not be empty")
1621
merged_headers = {
17-
"x-api-key": api_key,
22+
"x-api-key": normalized_api_key,
1823
"User-Agent": f"hyperbrowser-python-sdk/{__version__}",
1924
}
2025
normalized_headers = normalize_headers(

tests/test_custom_headers.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ def test_sync_transport_rejects_non_string_header_pairs():
2828
SyncTransport(api_key="test-key", headers={"X-Correlation-Id": 123}) # type: ignore[dict-item]
2929

3030

31+
def test_sync_transport_rejects_invalid_api_key_values():
32+
with pytest.raises(HyperbrowserError, match="api_key must be a string"):
33+
SyncTransport(api_key=None) # type: ignore[arg-type]
34+
with pytest.raises(HyperbrowserError, match="api_key must not be empty"):
35+
SyncTransport(api_key=" ")
36+
37+
3138
def test_sync_transport_rejects_empty_header_name():
3239
with pytest.raises(HyperbrowserError, match="header names must not be empty"):
3340
SyncTransport(api_key="test-key", headers={" ": "value"})
@@ -61,6 +68,13 @@ def test_async_transport_rejects_non_string_header_pairs():
6168
AsyncTransport(api_key="test-key", headers={"X-Correlation-Id": 123}) # type: ignore[dict-item]
6269

6370

71+
def test_async_transport_rejects_invalid_api_key_values():
72+
with pytest.raises(HyperbrowserError, match="api_key must be a string"):
73+
AsyncTransport(api_key=None) # type: ignore[arg-type]
74+
with pytest.raises(HyperbrowserError, match="api_key must not be empty"):
75+
AsyncTransport(api_key=" ")
76+
77+
6478
def test_async_transport_rejects_empty_header_name():
6579
with pytest.raises(HyperbrowserError, match="header names must not be empty"):
6680
AsyncTransport(api_key="test-key", headers={" ": "value"})

0 commit comments

Comments
 (0)