Skip to content

Commit 4af806e

Browse files
Reject string-subclass session timestamp inputs
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 4bde808 commit 4af806e

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

hyperbrowser/models/session.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ def parse_timestamp(cls, value: Optional[Union[str, int]]) -> Optional[int]:
144144
"""Convert string timestamps to integers."""
145145
if value is None:
146146
return None
147-
if isinstance(value, str):
147+
if type(value) is str:
148148
return int(value)
149+
if isinstance(value, str):
150+
raise ValueError("timestamp string values must be plain strings")
149151
return value
150152

151153

tests/test_session_models.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import pytest
2+
from pydantic import ValidationError
3+
4+
from hyperbrowser.models.session import Session
5+
6+
7+
def _build_session_payload() -> dict:
8+
return {
9+
"id": "session-1",
10+
"teamId": "team-1",
11+
"status": "active",
12+
"createdAt": "2025-01-01T00:00:00Z",
13+
"updatedAt": "2025-01-01T00:00:00Z",
14+
"sessionUrl": "https://example.com/session/1",
15+
"proxyDataConsumed": "0",
16+
}
17+
18+
19+
def test_session_model_converts_plain_string_timestamps_to_int():
20+
payload = _build_session_payload()
21+
payload["startTime"] = "1735689600"
22+
payload["endTime"] = "1735689660"
23+
24+
model = Session.model_validate(payload)
25+
26+
assert model.start_time == 1735689600
27+
assert model.end_time == 1735689660
28+
29+
30+
def test_session_model_rejects_string_subclass_timestamps():
31+
class _TimestampString(str):
32+
pass
33+
34+
payload = _build_session_payload()
35+
payload["startTime"] = _TimestampString("1735689600")
36+
37+
with pytest.raises(
38+
ValidationError, match="timestamp string values must be plain strings"
39+
):
40+
Session.model_validate(payload)

0 commit comments

Comments
 (0)