Skip to content

Commit 6253181

Browse files
Require concrete session ID strings in computer-action managers
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 22faaff commit 6253181

3 files changed

Lines changed: 38 additions & 2 deletions

File tree

hyperbrowser/client/managers/async_manager/computer_action.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,12 @@ def __init__(self, client):
3030
async def _execute_request(
3131
self, session: Union[SessionDetail, str], params: ComputerActionParams
3232
) -> ComputerActionResponse:
33-
if isinstance(session, str):
33+
if type(session) is str:
3434
session = await self._client.sessions.get(session)
35+
elif isinstance(session, str):
36+
raise HyperbrowserError(
37+
"session must be a plain string session ID or SessionDetail"
38+
)
3539

3640
if not session.computer_action_endpoint:
3741
raise HyperbrowserError(

hyperbrowser/client/managers/sync_manager/computer_action.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,12 @@ def __init__(self, client):
3030
def _execute_request(
3131
self, session: Union[SessionDetail, str], params: ComputerActionParams
3232
) -> ComputerActionResponse:
33-
if isinstance(session, str):
33+
if type(session) is str:
3434
session = self._client.sessions.get(session)
35+
elif isinstance(session, str):
36+
raise HyperbrowserError(
37+
"session must be a plain string session ID or SessionDetail"
38+
)
3539

3640
if not session.computer_action_endpoint:
3741
raise HyperbrowserError(

tests/test_computer_action_manager.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,31 @@ async def run() -> None:
3939
await manager.screenshot(session)
4040

4141
asyncio.run(run())
42+
43+
44+
def test_sync_computer_action_manager_rejects_string_subclass_session_ids():
45+
class _SessionId(str):
46+
pass
47+
48+
manager = SyncComputerActionManager(_DummyClient())
49+
50+
with pytest.raises(
51+
HyperbrowserError,
52+
match="session must be a plain string session ID or SessionDetail",
53+
):
54+
manager.screenshot(_SessionId("sess_123"))
55+
56+
57+
def test_async_computer_action_manager_rejects_string_subclass_session_ids():
58+
class _SessionId(str):
59+
pass
60+
61+
async def run() -> None:
62+
manager = AsyncComputerActionManager(_DummyClient())
63+
with pytest.raises(
64+
HyperbrowserError,
65+
match="session must be a plain string session ID or SessionDetail",
66+
):
67+
await manager.screenshot(_SessionId("sess_123"))
68+
69+
asyncio.run(run())

0 commit comments

Comments
 (0)