Skip to content

Commit a98b4b0

Browse files
Wrap extension file opening failures with HyperbrowserError
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent fb40e56 commit a98b4b0

File tree

3 files changed

+51
-14
lines changed

3 files changed

+51
-14
lines changed

hyperbrowser/client/managers/async_manager/extension.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,20 @@ async def create(self, params: CreateExtensionParams) -> ExtensionResponse:
1616

1717
# Check if file exists before trying to open it
1818
if not os.path.exists(file_path):
19-
raise FileNotFoundError(f"Extension file not found at path: {file_path}")
19+
raise HyperbrowserError(f"Extension file not found at path: {file_path}")
2020

21-
with open(file_path, "rb") as extension_file:
22-
response = await self._client.transport.post(
23-
self._client._build_url("/extensions/add"),
24-
data=payload,
25-
files={"file": extension_file},
26-
)
21+
try:
22+
with open(file_path, "rb") as extension_file:
23+
response = await self._client.transport.post(
24+
self._client._build_url("/extensions/add"),
25+
data=payload,
26+
files={"file": extension_file},
27+
)
28+
except OSError as exc:
29+
raise HyperbrowserError(
30+
f"Failed to open extension file at path: {file_path}",
31+
original_error=exc,
32+
) from exc
2733
return ExtensionResponse(**response.data)
2834

2935
async def list(self) -> List[ExtensionResponse]:

hyperbrowser/client/managers/sync_manager/extension.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,20 @@ def create(self, params: CreateExtensionParams) -> ExtensionResponse:
1616

1717
# Check if file exists before trying to open it
1818
if not os.path.exists(file_path):
19-
raise FileNotFoundError(f"Extension file not found at path: {file_path}")
19+
raise HyperbrowserError(f"Extension file not found at path: {file_path}")
2020

21-
with open(file_path, "rb") as extension_file:
22-
response = self._client.transport.post(
23-
self._client._build_url("/extensions/add"),
24-
data=payload,
25-
files={"file": extension_file},
26-
)
21+
try:
22+
with open(file_path, "rb") as extension_file:
23+
response = self._client.transport.post(
24+
self._client._build_url("/extensions/add"),
25+
data=payload,
26+
files={"file": extension_file},
27+
)
28+
except OSError as exc:
29+
raise HyperbrowserError(
30+
f"Failed to open extension file at path: {file_path}",
31+
original_error=exc,
32+
) from exc
2733
return ExtensionResponse(**response.data)
2834

2935
def list(self) -> List[ExtensionResponse]:

tests/test_extension_manager.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import asyncio
22
from pathlib import Path
3+
import pytest
34

45
from hyperbrowser.client.managers.async_manager.extension import (
56
ExtensionManager as AsyncExtensionManager,
67
)
78
from hyperbrowser.client.managers.sync_manager.extension import (
89
ExtensionManager as SyncExtensionManager,
910
)
11+
from hyperbrowser.exceptions import HyperbrowserError
1012
from hyperbrowser.models.extension import CreateExtensionParams
1113

1214

@@ -104,3 +106,26 @@ async def run():
104106
transport.received_file is not None and transport.received_file.closed is True
105107
)
106108
assert transport.received_data == {"name": "my-extension"}
109+
110+
111+
def test_sync_extension_create_raises_hyperbrowser_error_when_file_missing(tmp_path):
112+
transport = _SyncTransport()
113+
manager = SyncExtensionManager(_FakeClient(transport))
114+
missing_path = tmp_path / "missing-extension.zip"
115+
params = CreateExtensionParams(name="missing-extension", file_path=missing_path)
116+
117+
with pytest.raises(HyperbrowserError, match="Extension file not found"):
118+
manager.create(params)
119+
120+
121+
def test_async_extension_create_raises_hyperbrowser_error_when_file_missing(tmp_path):
122+
transport = _AsyncTransport()
123+
manager = AsyncExtensionManager(_FakeClient(transport))
124+
missing_path = tmp_path / "missing-extension.zip"
125+
params = CreateExtensionParams(name="missing-extension", file_path=missing_path)
126+
127+
async def run():
128+
with pytest.raises(HyperbrowserError, match="Extension file not found"):
129+
await manager.create(params)
130+
131+
asyncio.run(run())

0 commit comments

Comments
 (0)