Skip to content

Commit 69a0514

Browse files
Require upload and extension paths to reference files
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 46f9947 commit 69a0514

6 files changed

Lines changed: 60 additions & 2 deletions

File tree

hyperbrowser/client/managers/async_manager/extension.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ async def create(self, params: CreateExtensionParams) -> ExtensionResponse:
1717
# Check if file exists before trying to open it
1818
if not os.path.exists(file_path):
1919
raise HyperbrowserError(f"Extension file not found at path: {file_path}")
20+
if not os.path.isfile(file_path):
21+
raise HyperbrowserError(
22+
f"Extension file path must point to a file: {file_path}"
23+
)
2024

2125
try:
2226
with open(file_path, "rb") as extension_file:

hyperbrowser/client/managers/async_manager/session.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ async def upload_file(
115115
) -> UploadFileResponse:
116116
if isinstance(file_input, (str, PathLike)):
117117
file_path = os.fspath(file_input)
118+
if not os.path.exists(file_path):
119+
raise HyperbrowserError(f"Upload file not found at path: {file_path}")
120+
if not os.path.isfile(file_path):
121+
raise HyperbrowserError(
122+
f"Upload file path must point to a file: {file_path}"
123+
)
118124
try:
119125
with open(file_path, "rb") as file_obj:
120126
files = {"file": file_obj}

hyperbrowser/client/managers/sync_manager/extension.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ def create(self, params: CreateExtensionParams) -> ExtensionResponse:
1717
# Check if file exists before trying to open it
1818
if not os.path.exists(file_path):
1919
raise HyperbrowserError(f"Extension file not found at path: {file_path}")
20+
if not os.path.isfile(file_path):
21+
raise HyperbrowserError(
22+
f"Extension file path must point to a file: {file_path}"
23+
)
2024

2125
try:
2226
with open(file_path, "rb") as extension_file:

hyperbrowser/client/managers/sync_manager/session.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ def upload_file(
107107
) -> UploadFileResponse:
108108
if isinstance(file_input, (str, PathLike)):
109109
file_path = os.fspath(file_input)
110+
if not os.path.exists(file_path):
111+
raise HyperbrowserError(f"Upload file not found at path: {file_path}")
112+
if not os.path.isfile(file_path):
113+
raise HyperbrowserError(
114+
f"Upload file path must point to a file: {file_path}"
115+
)
110116
try:
111117
with open(file_path, "rb") as file_obj:
112118
files = {"file": file_obj}

tests/test_extension_manager.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,24 @@ async def run():
129129
await manager.create(params)
130130

131131
asyncio.run(run())
132+
133+
134+
def test_sync_extension_create_rejects_directory_path(tmp_path):
135+
transport = _SyncTransport()
136+
manager = SyncExtensionManager(_FakeClient(transport))
137+
params = CreateExtensionParams(name="dir-extension", file_path=tmp_path)
138+
139+
with pytest.raises(HyperbrowserError, match="must point to a file"):
140+
manager.create(params)
141+
142+
143+
def test_async_extension_create_rejects_directory_path(tmp_path):
144+
transport = _AsyncTransport()
145+
manager = AsyncExtensionManager(_FakeClient(transport))
146+
params = CreateExtensionParams(name="dir-extension", file_path=tmp_path)
147+
148+
async def run():
149+
with pytest.raises(HyperbrowserError, match="must point to a file"):
150+
await manager.create(params)
151+
152+
asyncio.run(run())

tests/test_session_upload_file.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def test_sync_session_upload_file_raises_hyperbrowser_error_for_missing_path(tmp
163163
manager = SyncSessionManager(_FakeClient(_SyncTransport()))
164164
missing_path = tmp_path / "missing-file.txt"
165165

166-
with pytest.raises(HyperbrowserError, match="Failed to open upload file"):
166+
with pytest.raises(HyperbrowserError, match="Upload file not found"):
167167
manager.upload_file("session_123", missing_path)
168168

169169

@@ -172,7 +172,24 @@ def test_async_session_upload_file_raises_hyperbrowser_error_for_missing_path(tm
172172
missing_path = tmp_path / "missing-file.txt"
173173

174174
async def run():
175-
with pytest.raises(HyperbrowserError, match="Failed to open upload file"):
175+
with pytest.raises(HyperbrowserError, match="Upload file not found"):
176176
await manager.upload_file("session_123", missing_path)
177177

178178
asyncio.run(run())
179+
180+
181+
def test_sync_session_upload_file_rejects_directory_path(tmp_path):
182+
manager = SyncSessionManager(_FakeClient(_SyncTransport()))
183+
184+
with pytest.raises(HyperbrowserError, match="must point to a file"):
185+
manager.upload_file("session_123", tmp_path)
186+
187+
188+
def test_async_session_upload_file_rejects_directory_path(tmp_path):
189+
manager = AsyncSessionManager(_FakeClient(_AsyncTransport()))
190+
191+
async def run():
192+
with pytest.raises(HyperbrowserError, match="must point to a file"):
193+
await manager.upload_file("session_123", tmp_path)
194+
195+
asyncio.run(run())

0 commit comments

Comments
 (0)