hyperbrowser 0.85.0__tar.gz → 0.87.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/PKG-INFO +1 -1
  2. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/sandbox.py +33 -0
  3. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_files.py +17 -6
  4. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/sandbox.py +33 -0
  5. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_files.py +17 -6
  6. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/__init__.py +12 -0
  7. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/sandbox.py +49 -4
  8. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/pyproject.toml +1 -1
  9. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/LICENSE +0 -0
  10. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/README.md +0 -0
  11. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/__init__.py +0 -0
  12. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/async_client.py +0 -0
  13. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/base.py +0 -0
  14. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/agents/__init__.py +0 -0
  15. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/agents/browser_use.py +0 -0
  16. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/agents/claude_computer_use.py +0 -0
  17. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/agents/cua.py +0 -0
  18. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +0 -0
  19. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/agents/hyper_agent.py +0 -0
  20. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/computer_action.py +0 -0
  21. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
  22. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
  23. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/extract.py +0 -0
  24. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
  25. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/sandboxes/__init__.py +0 -0
  26. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_processes.py +0 -0
  27. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_terminal.py +0 -0
  28. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/sandboxes/sandbox_transport.py +0 -0
  29. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
  30. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/session.py +0 -0
  31. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/team.py +0 -0
  32. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/web/__init__.py +0 -0
  33. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/web/batch_fetch.py +0 -0
  34. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/async_manager/web/crawl.py +0 -0
  35. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sandboxes/__init__.py +0 -0
  36. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sandboxes/shared.py +0 -0
  37. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/agents/__init__.py +0 -0
  38. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/agents/browser_use.py +0 -0
  39. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +0 -0
  40. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/agents/cua.py +0 -0
  41. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py +0 -0
  42. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/agents/hyper_agent.py +0 -0
  43. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/computer_action.py +0 -0
  44. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
  45. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
  46. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/extract.py +0 -0
  47. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
  48. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/sandboxes/__init__.py +0 -0
  49. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_processes.py +0 -0
  50. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_terminal.py +0 -0
  51. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/sandboxes/sandbox_transport.py +0 -0
  52. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
  53. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/session.py +0 -0
  54. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/team.py +0 -0
  55. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/web/__init__.py +0 -0
  56. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/web/batch_fetch.py +0 -0
  57. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/managers/sync_manager/web/crawl.py +0 -0
  58. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/client/sync.py +0 -0
  59. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/config.py +0 -0
  60. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/exceptions.py +0 -0
  61. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/agents/browser_use.py +0 -0
  62. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/agents/claude_computer_use.py +0 -0
  63. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/agents/cua.py +0 -0
  64. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/agents/gemini_computer_use.py +0 -0
  65. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/agents/hyper_agent.py +0 -0
  66. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/computer_action.py +0 -0
  67. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/consts.py +0 -0
  68. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/crawl.py +0 -0
  69. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/extension.py +0 -0
  70. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/extract.py +0 -0
  71. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/profile.py +0 -0
  72. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/scrape.py +0 -0
  73. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/session.py +0 -0
  74. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/team.py +0 -0
  75. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/web/batch_fetch.py +0 -0
  76. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/web/common.py +0 -0
  77. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/web/crawl.py +0 -0
  78. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/web/fetch.py +0 -0
  79. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/models/web/search.py +0 -0
  80. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/sandbox_common.py +0 -0
  81. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/tools/__init__.py +0 -0
  82. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/tools/anthropic.py +0 -0
  83. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/tools/openai.py +0 -0
  84. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/tools/schema.py +0 -0
  85. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/transport/async_transport.py +0 -0
  86. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/transport/base.py +0 -0
  87. {hyperbrowser-0.85.0 → hyperbrowser-0.87.0}/hyperbrowser/transport/sync.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperbrowser
3
- Version: 0.85.0
3
+ Version: 0.87.0
4
4
  Summary: Python SDK for hyperbrowser
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -7,9 +7,14 @@ from ....models.sandbox import (
7
7
  SandboxExecParams,
8
8
  SandboxExposeParams,
9
9
  SandboxExposeResult,
10
+ SandboxImageListResponse,
11
+ SandboxListParams,
12
+ SandboxListResponse,
10
13
  SandboxMemorySnapshotParams,
11
14
  SandboxMemorySnapshotResult,
12
15
  SandboxRuntimeSession,
16
+ SandboxSnapshotListParams,
17
+ SandboxSnapshotListResponse,
13
18
  StartSandboxFromSnapshotParams,
14
19
  )
15
20
  from ....models.session import BasicResponse
@@ -288,6 +293,34 @@ class SandboxManager:
288
293
  await sandbox.connect()
289
294
  return sandbox
290
295
 
296
+ async def list(
297
+ self, params: SandboxListParams = SandboxListParams()
298
+ ) -> SandboxListResponse:
299
+ if not isinstance(params, SandboxListParams):
300
+ raise TypeError("params must be a SandboxListParams instance")
301
+ payload = await self._request(
302
+ "GET",
303
+ "/sandboxes",
304
+ params=params.model_dump(exclude_none=True, by_alias=True),
305
+ )
306
+ return SandboxListResponse(**payload)
307
+
308
+ async def list_images(self) -> SandboxImageListResponse:
309
+ payload = await self._request("GET", "/images")
310
+ return SandboxImageListResponse(**payload)
311
+
312
+ async def list_snapshots(
313
+ self, params: SandboxSnapshotListParams = SandboxSnapshotListParams()
314
+ ) -> SandboxSnapshotListResponse:
315
+ if not isinstance(params, SandboxSnapshotListParams):
316
+ raise TypeError("params must be a SandboxSnapshotListParams instance")
317
+ payload = await self._request(
318
+ "GET",
319
+ "/snapshots",
320
+ params=params.model_dump(exclude_none=True, by_alias=True),
321
+ )
322
+ return SandboxSnapshotListResponse(**payload)
323
+
291
324
  async def stop(self, sandbox_id: str) -> BasicResponse:
292
325
  payload = await self._request("PUT", f"/sandbox/{sandbox_id}/stop")
293
326
  return BasicResponse(**payload)
@@ -18,6 +18,7 @@ from .....models.sandbox import (
18
18
  SandboxFileCopyParams,
19
19
  SandboxFileDeleteParams,
20
20
  SandboxFileInfo,
21
+ SandboxFileMoveParams,
21
22
  SandboxFileReadResult,
22
23
  SandboxFileSystemEvent,
23
24
  SandboxFileWriteEntry,
@@ -461,14 +462,24 @@ class SandboxFilesApi:
461
462
  ) -> bool:
462
463
  return await self.make_dir(path, parents=parents, mode=mode)
463
464
 
464
- async def rename(self, old_path: str, new_path: str) -> SandboxFileInfo:
465
+ async def rename(
466
+ self,
467
+ old_path: str,
468
+ new_path: str,
469
+ *,
470
+ overwrite: Optional[bool] = None,
471
+ ) -> SandboxFileInfo:
472
+ payload = SandboxFileMoveParams(
473
+ source=old_path,
474
+ destination=new_path,
475
+ overwrite=overwrite,
476
+ ).model_dump(exclude_none=True)
477
+ payload["from"] = payload.pop("source")
478
+ payload["to"] = payload.pop("destination")
465
479
  payload = await self._transport.request_json(
466
480
  "/sandbox/files/move",
467
481
  method="POST",
468
- json_body={
469
- "from": old_path,
470
- "to": new_path,
471
- },
482
+ json_body=payload,
472
483
  headers={"content-type": "application/json"},
473
484
  )
474
485
  return _normalize_file_info(payload["entry"])
@@ -480,7 +491,7 @@ class SandboxFilesApi:
480
491
  destination: str,
481
492
  overwrite: Optional[bool] = None,
482
493
  ) -> SandboxFileInfo:
483
- return await self.rename(source, destination)
494
+ return await self.rename(source, destination, overwrite=overwrite)
484
495
 
485
496
  async def remove(self, path: str, *, recursive: Optional[bool] = None) -> None:
486
497
  await self._transport.request_json(
@@ -7,9 +7,14 @@ from ....models.sandbox import (
7
7
  SandboxExecParams,
8
8
  SandboxExposeParams,
9
9
  SandboxExposeResult,
10
+ SandboxImageListResponse,
11
+ SandboxListParams,
12
+ SandboxListResponse,
10
13
  SandboxMemorySnapshotParams,
11
14
  SandboxMemorySnapshotResult,
12
15
  SandboxRuntimeSession,
16
+ SandboxSnapshotListParams,
17
+ SandboxSnapshotListResponse,
13
18
  StartSandboxFromSnapshotParams,
14
19
  )
15
20
  from ....models.session import BasicResponse
@@ -288,6 +293,34 @@ class SandboxManager:
288
293
  sandbox.connect()
289
294
  return sandbox
290
295
 
296
+ def list(
297
+ self, params: SandboxListParams = SandboxListParams()
298
+ ) -> SandboxListResponse:
299
+ if not isinstance(params, SandboxListParams):
300
+ raise TypeError("params must be a SandboxListParams instance")
301
+ payload = self._request(
302
+ "GET",
303
+ "/sandboxes",
304
+ params=params.model_dump(exclude_none=True, by_alias=True),
305
+ )
306
+ return SandboxListResponse(**payload)
307
+
308
+ def list_images(self) -> SandboxImageListResponse:
309
+ payload = self._request("GET", "/images")
310
+ return SandboxImageListResponse(**payload)
311
+
312
+ def list_snapshots(
313
+ self, params: SandboxSnapshotListParams = SandboxSnapshotListParams()
314
+ ) -> SandboxSnapshotListResponse:
315
+ if not isinstance(params, SandboxSnapshotListParams):
316
+ raise TypeError("params must be a SandboxSnapshotListParams instance")
317
+ payload = self._request(
318
+ "GET",
319
+ "/snapshots",
320
+ params=params.model_dump(exclude_none=True, by_alias=True),
321
+ )
322
+ return SandboxSnapshotListResponse(**payload)
323
+
291
324
  def stop(self, sandbox_id: str) -> BasicResponse:
292
325
  payload = self._request("PUT", f"/sandbox/{sandbox_id}/stop")
293
326
  return BasicResponse(**payload)
@@ -17,6 +17,7 @@ from .....models.sandbox import (
17
17
  SandboxFileCopyParams,
18
18
  SandboxFileDeleteParams,
19
19
  SandboxFileInfo,
20
+ SandboxFileMoveParams,
20
21
  SandboxFileReadResult,
21
22
  SandboxFileSystemEvent,
22
23
  SandboxFileWriteEntry,
@@ -442,14 +443,24 @@ class SandboxFilesApi:
442
443
  ) -> bool:
443
444
  return self.make_dir(path, parents=parents, mode=mode)
444
445
 
445
- def rename(self, old_path: str, new_path: str) -> SandboxFileInfo:
446
+ def rename(
447
+ self,
448
+ old_path: str,
449
+ new_path: str,
450
+ *,
451
+ overwrite: Optional[bool] = None,
452
+ ) -> SandboxFileInfo:
453
+ payload = SandboxFileMoveParams(
454
+ source=old_path,
455
+ destination=new_path,
456
+ overwrite=overwrite,
457
+ ).model_dump(exclude_none=True)
458
+ payload["from"] = payload.pop("source")
459
+ payload["to"] = payload.pop("destination")
446
460
  payload = self._transport.request_json(
447
461
  "/sandbox/files/move",
448
462
  method="POST",
449
- json_body={
450
- "from": old_path,
451
- "to": new_path,
452
- },
463
+ json_body=payload,
453
464
  headers={"content-type": "application/json"},
454
465
  )
455
466
  return _normalize_file_info(payload["entry"])
@@ -461,7 +472,7 @@ class SandboxFilesApi:
461
472
  destination: str,
462
473
  overwrite: Optional[bool] = None,
463
474
  ) -> SandboxFileInfo:
464
- return self.rename(source, destination)
475
+ return self.rename(source, destination, overwrite=overwrite)
465
476
 
466
477
  def remove(self, path: str, *, recursive: Optional[bool] = None) -> None:
467
478
  self._transport.request_json(
@@ -246,6 +246,12 @@ from .sandbox import (
246
246
  StartSandboxFromSnapshotParams,
247
247
  SandboxListParams,
248
248
  SandboxListResponse,
249
+ SandboxImageListResponse,
250
+ SandboxImageSummary,
251
+ SandboxSnapshotStatus,
252
+ SandboxSnapshotListResponse,
253
+ SandboxSnapshotSummary,
254
+ SandboxSnapshotListParams,
249
255
  SandboxMemorySnapshotParams,
250
256
  SandboxMemorySnapshotResult,
251
257
  SandboxExposeParams,
@@ -490,6 +496,12 @@ __all__ = [
490
496
  "StartSandboxFromSnapshotParams",
491
497
  "SandboxListParams",
492
498
  "SandboxListResponse",
499
+ "SandboxImageListResponse",
500
+ "SandboxImageSummary",
501
+ "SandboxSnapshotStatus",
502
+ "SandboxSnapshotListResponse",
503
+ "SandboxSnapshotSummary",
504
+ "SandboxSnapshotListParams",
493
505
  "SandboxMemorySnapshotParams",
494
506
  "SandboxMemorySnapshotResult",
495
507
  "SandboxExposeParams",
@@ -23,6 +23,7 @@ SandboxProcessStatus = Literal[
23
23
  "killed",
24
24
  "timed_out",
25
25
  ]
26
+ SandboxSnapshotStatus = Literal["creating", "created", "failed"]
26
27
  SandboxFileType = Literal["file", "dir"]
27
28
  SandboxFileEncoding = Literal["utf8", "base64"]
28
29
  SandboxFileReadFormat = Literal["text", "bytes", "blob", "stream"]
@@ -164,10 +165,9 @@ class StartSandboxFromSnapshotParams(CreateSandboxParams):
164
165
 
165
166
 
166
167
  class SandboxListParams(SandboxBaseModel):
167
- status: Optional[SandboxStatus] = None
168
- page: Optional[int] = None
169
- limit: Optional[int] = None
170
- search: Optional[str] = None
168
+ status: Optional[SandboxStatus] = Field(default=None, exclude=None)
169
+ page: int = Field(default=1, ge=1)
170
+ limit: int = Field(default=10, ge=1)
171
171
 
172
172
 
173
173
  class SandboxListResponse(SandboxBaseModel):
@@ -177,6 +177,51 @@ class SandboxListResponse(SandboxBaseModel):
177
177
  per_page: int = Field(alias="perPage")
178
178
 
179
179
 
180
+ class SandboxImageSummary(SandboxBaseModel):
181
+ id: str
182
+ image_name: str = Field(alias="imageName")
183
+ namespace: str
184
+ uploaded: bool
185
+ created_at: datetime = Field(alias="createdAt")
186
+ updated_at: datetime = Field(alias="updatedAt")
187
+
188
+
189
+ class SandboxImageListResponse(SandboxBaseModel):
190
+ images: List[SandboxImageSummary]
191
+ # TODO: add pagination metadata when /api/images supports it.
192
+ # total_count: Optional[int] = Field(default=None, alias="totalCount")
193
+ # page: Optional[int] = None
194
+ # per_page: Optional[int] = Field(default=None, alias="perPage")
195
+
196
+
197
+ class SandboxSnapshotSummary(SandboxBaseModel):
198
+ id: str
199
+ snapshot_name: str = Field(alias="snapshotName")
200
+ namespace: str
201
+ image_namespace: str = Field(alias="imageNamespace")
202
+ image_name: str = Field(alias="imageName")
203
+ image_id: str = Field(alias="imageId")
204
+ status: SandboxSnapshotStatus
205
+ compatibility_tag: Optional[str] = Field(default=None, alias="compatibilityTag")
206
+ metadata: Dict[str, object]
207
+ uploaded: bool
208
+ created_at: datetime = Field(alias="createdAt")
209
+ updated_at: datetime = Field(alias="updatedAt")
210
+
211
+
212
+ class SandboxSnapshotListParams(SandboxBaseModel):
213
+ status: Optional[SandboxSnapshotStatus] = Field(default=None, exclude=None)
214
+ limit: Optional[int] = Field(default=None, ge=1)
215
+
216
+
217
+ class SandboxSnapshotListResponse(SandboxBaseModel):
218
+ snapshots: List[SandboxSnapshotSummary]
219
+ # TODO: add pagination metadata when /api/snapshots supports it.
220
+ # total_count: Optional[int] = Field(default=None, alias="totalCount")
221
+ # page: Optional[int] = None
222
+ # per_page: Optional[int] = Field(default=None, alias="perPage")
223
+
224
+
180
225
  class SandboxMemorySnapshotParams(SandboxBaseModel):
181
226
  snapshot_name: Optional[str] = Field(
182
227
  default=None, serialization_alias="snapshotName"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hyperbrowser"
3
- version = "0.85.0"
3
+ version = "0.87.0"
4
4
  description = "Python SDK for hyperbrowser"
5
5
  authors = ["Nikhil Shahi <nshahi1998@gmail.com>"]
6
6
  license = "MIT"
File without changes
File without changes