hyperbrowser 0.18.0__tar.gz → 0.20.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.

Potentially problematic release.


This version of hyperbrowser might be problematic. Click here for more details.

Files changed (36) hide show
  1. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/PKG-INFO +1 -1
  2. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/async_client.py +2 -0
  3. hyperbrowser-0.20.0/hyperbrowser/client/managers/async_manager/extract.py +41 -0
  4. hyperbrowser-0.20.0/hyperbrowser/client/managers/sync_manager/extract.py +41 -0
  5. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/sync.py +3 -0
  6. hyperbrowser-0.20.0/hyperbrowser/models/extract.py +53 -0
  7. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/session.py +1 -0
  8. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/pyproject.toml +1 -1
  9. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/LICENSE +0 -0
  10. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/README.md +0 -0
  11. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/__init__.py +0 -0
  12. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/base.py +0 -0
  13. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
  14. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
  15. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
  16. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
  17. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/session.py +0 -0
  18. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
  19. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
  20. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
  21. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
  22. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/session.py +0 -0
  23. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/config.py +0 -0
  24. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/exceptions.py +0 -0
  25. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/consts.py +0 -0
  26. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/crawl.py +0 -0
  27. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/extension.py +0 -0
  28. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/profile.py +0 -0
  29. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/scrape.py +0 -0
  30. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/__init__.py +0 -0
  31. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/anthropic.py +0 -0
  32. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/openai.py +0 -0
  33. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/schema.py +0 -0
  34. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/transport/async_transport.py +0 -0
  35. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/transport/base.py +0 -0
  36. {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/transport/sync.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: hyperbrowser
3
- Version: 0.18.0
3
+ Version: 0.20.0
4
4
  Summary: Python SDK for hyperbrowser
5
5
  License: MIT
6
6
  Author: Nikhil Shahi
@@ -1,5 +1,6 @@
1
1
  from typing import Optional
2
2
 
3
+ from .managers.async_manager.extract import ExtractManager
3
4
  from .managers.async_manager.profile import ProfileManager
4
5
  from .managers.async_manager.session import SessionManager
5
6
  from .managers.async_manager.scrape import ScrapeManager
@@ -25,6 +26,7 @@ class AsyncHyperbrowser(HyperbrowserBase):
25
26
  self.sessions = SessionManager(self)
26
27
  self.scrape = ScrapeManager(self)
27
28
  self.crawl = CrawlManager(self)
29
+ self.extract = ExtractManager(self)
28
30
  self.profiles = ProfileManager(self)
29
31
  self.extensions = ExtensionManager(self)
30
32
 
@@ -0,0 +1,41 @@
1
+ import asyncio
2
+ from hyperbrowser.exceptions import HyperbrowserError
3
+ from hyperbrowser.models.extract import (
4
+ ExtractJobResponse,
5
+ StartExtractJobParams,
6
+ StartExtractJobResponse,
7
+ )
8
+
9
+
10
+ class ExtractManager:
11
+ def __init__(self, client):
12
+ self._client = client
13
+
14
+ async def start(self, params: StartExtractJobParams) -> StartExtractJobResponse:
15
+ if not params.schema_ and not params.prompt:
16
+ raise HyperbrowserError("Either schema or prompt must be provided")
17
+ if params.schema_:
18
+ if hasattr(params.schema_, "model_json_schema"):
19
+ params.schema_ = params.schema_.model_json_schema()
20
+
21
+ response = await self._client.transport.post(
22
+ self._client._build_url("/extract"),
23
+ data=params.model_dump(exclude_none=True, by_alias=True),
24
+ )
25
+ return StartExtractJobResponse(**response.data)
26
+
27
+ async def get(self, job_id: str) -> ExtractJobResponse:
28
+ response = await self._client.transport.get(
29
+ self._client._build_url(f"/extract/{job_id}")
30
+ )
31
+ return ExtractJobResponse(**response.data)
32
+
33
+ async def start_and_wait(self, params: StartExtractJobParams) -> ExtractJobResponse:
34
+ job_start_resp = await self.start(params)
35
+ if not job_start_resp.job_id:
36
+ raise HyperbrowserError("Failed to start extract job")
37
+ while True:
38
+ job_response = await self.get(job_start_resp.job_id)
39
+ if job_response.status == "completed" or job_response.status == "failed":
40
+ return job_response
41
+ await asyncio.sleep(2)
@@ -0,0 +1,41 @@
1
+ import time
2
+ from hyperbrowser.exceptions import HyperbrowserError
3
+ from hyperbrowser.models.extract import (
4
+ ExtractJobResponse,
5
+ StartExtractJobParams,
6
+ StartExtractJobResponse,
7
+ )
8
+
9
+
10
+ class ExtractManager:
11
+ def __init__(self, client):
12
+ self._client = client
13
+
14
+ def start(self, params: StartExtractJobParams) -> StartExtractJobResponse:
15
+ if not params.schema_ and not params.prompt:
16
+ raise HyperbrowserError("Either schema or prompt must be provided")
17
+ if params.schema_:
18
+ if hasattr(params.schema_, "model_json_schema"):
19
+ params.schema_ = params.schema_.model_json_schema()
20
+
21
+ response = self._client.transport.post(
22
+ self._client._build_url("/extract"),
23
+ data=params.model_dump(exclude_none=True, by_alias=True),
24
+ )
25
+ return StartExtractJobResponse(**response.data)
26
+
27
+ def get(self, job_id: str) -> ExtractJobResponse:
28
+ response = self._client.transport.get(
29
+ self._client._build_url(f"/extract/{job_id}")
30
+ )
31
+ return ExtractJobResponse(**response.data)
32
+
33
+ def start_and_wait(self, params: StartExtractJobParams) -> ExtractJobResponse:
34
+ job_start_resp = self.start(params)
35
+ if not job_start_resp.job_id:
36
+ raise HyperbrowserError("Failed to start extract job")
37
+ while True:
38
+ job_response = self.get(job_start_resp.job_id)
39
+ if job_response.status == "completed" or job_response.status == "failed":
40
+ return job_response
41
+ time.sleep(2)
@@ -1,4 +1,6 @@
1
1
  from typing import Optional
2
+
3
+ from .managers.sync_manager.extract import ExtractManager
2
4
  from .managers.sync_manager.profile import ProfileManager
3
5
  from .managers.sync_manager.session import SessionManager
4
6
  from .managers.sync_manager.scrape import ScrapeManager
@@ -24,6 +26,7 @@ class Hyperbrowser(HyperbrowserBase):
24
26
  self.sessions = SessionManager(self)
25
27
  self.scrape = ScrapeManager(self)
26
28
  self.crawl = CrawlManager(self)
29
+ self.extract = ExtractManager(self)
27
30
  self.profiles = ProfileManager(self)
28
31
  self.extensions = ExtensionManager(self)
29
32
 
@@ -0,0 +1,53 @@
1
+ from typing import Any, List, Literal, Optional
2
+ from pydantic import BaseModel, ConfigDict, Field
3
+ import pydantic
4
+
5
+ from hyperbrowser.models.session import CreateSessionParams
6
+
7
+ ExtractJobStatus = Literal["pending", "running", "completed", "failed"]
8
+
9
+
10
+ class StartExtractJobParams(BaseModel):
11
+ """
12
+ Parameters for creating a new extract job.
13
+ """
14
+
15
+ model_config = ConfigDict(
16
+ populate_by_alias=True,
17
+ )
18
+
19
+ urls: List[str]
20
+ prompt: Optional[str] = None
21
+ schema_: Optional[Any] = pydantic.Field(
22
+ None, alias="schema", serialization_alias="schema"
23
+ )
24
+ session_options: Optional[CreateSessionParams] = Field(
25
+ default=None, serialization_alias="sessionOptions"
26
+ )
27
+
28
+
29
+ class StartExtractJobResponse(BaseModel):
30
+ """
31
+ Response from creating a extract job.
32
+ """
33
+
34
+ model_config = ConfigDict(
35
+ populate_by_alias=True,
36
+ )
37
+
38
+ job_id: str = Field(alias="jobId")
39
+
40
+
41
+ class ExtractJobResponse(BaseModel):
42
+ """
43
+ Response from a extract job.
44
+ """
45
+
46
+ model_config = ConfigDict(
47
+ populate_by_alias=True,
48
+ )
49
+
50
+ job_id: str = Field(alias="jobId")
51
+ status: ExtractJobStatus
52
+ error: Optional[str] = None
53
+ data: Optional[Any] = None
@@ -152,6 +152,7 @@ class CreateSessionParams(BaseModel):
152
152
  extension_ids: Optional[List[str]] = Field(
153
153
  default=None, serialization_alias="extensionIds"
154
154
  )
155
+ static_ip_id: Optional[str] = Field(default=None, serialization_alias="staticIpId")
155
156
 
156
157
 
157
158
  class SessionRecording(BaseModel):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hyperbrowser"
3
- version = "0.18.0"
3
+ version = "0.20.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