Skip to content

Commit a2be91f

Browse files
Wrap missing computer action endpoint attribute errors
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 886064a commit a2be91f

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

hyperbrowser/client/managers/async_manager/computer_action.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,17 @@ async def _execute_request(
3737
"session must be a plain string session ID or SessionDetail"
3838
)
3939

40-
if not session.computer_action_endpoint:
40+
try:
41+
computer_action_endpoint = session.computer_action_endpoint
42+
except HyperbrowserError:
43+
raise
44+
except Exception as exc:
45+
raise HyperbrowserError(
46+
"session must include computer_action_endpoint",
47+
original_error=exc,
48+
) from exc
49+
50+
if not computer_action_endpoint:
4151
raise HyperbrowserError(
4252
"Computer action endpoint not available for this session"
4353
)
@@ -48,7 +58,7 @@ async def _execute_request(
4858
payload = params
4959

5060
response = await self._client.transport.post(
51-
session.computer_action_endpoint,
61+
computer_action_endpoint,
5262
data=payload,
5363
)
5464
return parse_response_model(

hyperbrowser/client/managers/sync_manager/computer_action.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,17 @@ def _execute_request(
3737
"session must be a plain string session ID or SessionDetail"
3838
)
3939

40-
if not session.computer_action_endpoint:
40+
try:
41+
computer_action_endpoint = session.computer_action_endpoint
42+
except HyperbrowserError:
43+
raise
44+
except Exception as exc:
45+
raise HyperbrowserError(
46+
"session must include computer_action_endpoint",
47+
original_error=exc,
48+
) from exc
49+
50+
if not computer_action_endpoint:
4151
raise HyperbrowserError(
4252
"Computer action endpoint not available for this session"
4353
)
@@ -48,7 +58,7 @@ def _execute_request(
4858
payload = params
4959

5060
response = self._client.transport.post(
51-
session.computer_action_endpoint,
61+
computer_action_endpoint,
5262
data=payload,
5363
)
5464
return parse_response_model(

tests/test_computer_action_manager.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,29 @@ async def run() -> None:
4141
asyncio.run(run())
4242

4343

44+
def test_sync_computer_action_manager_wraps_missing_endpoint_attribute():
45+
manager = SyncComputerActionManager(_DummyClient())
46+
47+
with pytest.raises(
48+
HyperbrowserError, match="session must include computer_action_endpoint"
49+
) as exc_info:
50+
manager.screenshot(SimpleNamespace())
51+
52+
assert isinstance(exc_info.value.original_error, AttributeError)
53+
54+
55+
def test_async_computer_action_manager_wraps_missing_endpoint_attribute():
56+
async def run() -> None:
57+
manager = AsyncComputerActionManager(_DummyClient())
58+
with pytest.raises(
59+
HyperbrowserError, match="session must include computer_action_endpoint"
60+
) as exc_info:
61+
await manager.screenshot(SimpleNamespace())
62+
assert isinstance(exc_info.value.original_error, AttributeError)
63+
64+
asyncio.run(run())
65+
66+
4467
def test_sync_computer_action_manager_rejects_string_subclass_session_ids():
4568
class _SessionId(str):
4669
pass

0 commit comments

Comments
 (0)