hyperbrowser 0.18.0__py3-none-any.whl → 0.20.0__py3-none-any.whl

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.

@@ -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
  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,25 +1,28 @@
1
1
  hyperbrowser/__init__.py,sha256=zWGcLhqhvWy6BTwuNpzWK1-0LpIn311ks-4U9nrsb7Y,187
2
- hyperbrowser/client/async_client.py,sha256=ov01IDpAUrZNKwjBGt8JB6eYzzM3AigkD1V4FmuKSr8,1286
2
+ hyperbrowser/client/async_client.py,sha256=L7mbzg_wOVMneOm6-bA5XaBoVWUmybuRogE4YEMR5Bg,1389
3
3
  hyperbrowser/client/base.py,sha256=9gFma7RdvJBUlDCqr8tZd315UPrjn4ldU4B0-Y-L4O4,1268
4
4
  hyperbrowser/client/managers/async_manager/crawl.py,sha256=hBS2WwfE0-ZopCW9PjP30meU5iTDdRViFl1C1OF1hVU,2291
5
5
  hyperbrowser/client/managers/async_manager/extension.py,sha256=a-xYtXXdCspukYtsguRgjEoQ8E_kzzA2tQAJtIyCtAs,1439
6
+ hyperbrowser/client/managers/async_manager/extract.py,sha256=gjrAixnbBHjGlJNr6DGQIa5MbVy3MevT-9liSX00Zg4,1614
6
7
  hyperbrowser/client/managers/async_manager/profile.py,sha256=l9S-5iw-zLP89xg9f5ZCT7OjimuCotFFQtyxfDZ8Ahg,882
7
8
  hyperbrowser/client/managers/async_manager/scrape.py,sha256=7FdYS_NNEpvB9z3ShGZaZxNryKHm02MQR-g9diadGhA,1319
8
9
  hyperbrowser/client/managers/async_manager/session.py,sha256=ObJhz1IkCCIQLwmztQ-M7lCKzKsVDr-eWCFnan2d9rQ,1692
9
10
  hyperbrowser/client/managers/sync_manager/crawl.py,sha256=lnMtBmOPcamjtvzH4BAnWbBTGbKBmHGUQiMnnZlj2tg,2222
10
11
  hyperbrowser/client/managers/sync_manager/extension.py,sha256=1YoyTZtMo43trl9jAsXv95aor0nBHiJEmLva39jFW-k,1415
12
+ hyperbrowser/client/managers/sync_manager/extract.py,sha256=rxDFjDG3tw3llaG5AAkUA3y17krevqeiTHlcNsLvaZ0,1560
11
13
  hyperbrowser/client/managers/sync_manager/profile.py,sha256=EvEtJ9INV8yhYKJoSJV1x2eBtsrS2QPeSifFEi7gxb4,846
12
14
  hyperbrowser/client/managers/sync_manager/scrape.py,sha256=DxSvdHa-z2P_rvNUwmRfU4iQz19wiEi_M2YmBQZfLyk,1265
13
15
  hyperbrowser/client/managers/sync_manager/session.py,sha256=74cekrDaGKW5WlP_0Qrqlk-xW2p1u4s63E-D08a4A2s,1610
14
- hyperbrowser/client/sync.py,sha256=CbC1no2BP-jSLDfD2c0VkRhvA9RWQ7xjdYDkJrrRpXM,1110
16
+ hyperbrowser/client/sync.py,sha256=HgglJY9pNdW987OzNO_5dSZgj1AfAqovCmY99WYQD2E,1213
15
17
  hyperbrowser/config.py,sha256=2J6GYNR_83vzJZ6jEV-LXO1U-q6DHIrfyAU0WrUPhw8,625
16
18
  hyperbrowser/exceptions.py,sha256=SUUkptK2OL36xDORYmSicaTYR7pMbxeWAjAgz35xnM8,1171
17
19
  hyperbrowser/models/consts.py,sha256=9hv1NQKrXoqPn-6QHbCTJOc2-Dnj--7XEOZZ0IGtvvk,4984
18
20
  hyperbrowser/models/crawl.py,sha256=cP8XmRfTqIJLAnyIHn8MXnHrYokYlYj-JagehGcY0Xc,2603
19
21
  hyperbrowser/models/extension.py,sha256=nXjKXKt9R7RxyZ4hd3EvfqZsEGy_ufh1r5j2mqCLykQ,804
22
+ hyperbrowser/models/extract.py,sha256=LZM4bZ96C_-8Mhf4f4LLMQYmBpvxvtOHs0AkFbswncc,1214
20
23
  hyperbrowser/models/profile.py,sha256=SYu4SR6OSwvg0C3bMW3j9z3zhPi-IzXuJE5aVJ3t-Nc,397
21
24
  hyperbrowser/models/scrape.py,sha256=yjoU-w1wvTROp5PYu9vyJUEaeuqYjErtnFkzWxxqgk4,2140
22
- hyperbrowser/models/session.py,sha256=nGcepy8j_xfYC3-hj12467pc913Zx952WYa6Cym0kiI,5056
25
+ hyperbrowser/models/session.py,sha256=Y4j3bj6hsBGLZBl61EEjWxURIcTxvY_upn8ttxjK2fg,5144
23
26
  hyperbrowser/tools/__init__.py,sha256=OUaTUM-kiigYmzfbpx3XQhzMK1xT1wd8cqXgR4znsAY,2021
24
27
  hyperbrowser/tools/anthropic.py,sha256=5pEkJm1H-26GToTwXsDjo4GGqVy1hATws4Pg59mumow,1667
25
28
  hyperbrowser/tools/openai.py,sha256=4-71IIWSxc_ByhywcfWj9-QI9iYNEe0xO6B2spE8WG0,2200
@@ -27,7 +30,7 @@ hyperbrowser/tools/schema.py,sha256=cR2MUX8TvUyN8TnCyeX0pccp4AmPjrdaKzuAXRThOJo,
27
30
  hyperbrowser/transport/async_transport.py,sha256=MIPJvilvZWBPXLZ96c9OohuN6TN9DaaU0EnyleG3q6g,4017
28
31
  hyperbrowser/transport/base.py,sha256=ildpMrDiM8nvrSGrH2LTOafmB17T7PQB_NQ1ODA378U,1703
29
32
  hyperbrowser/transport/sync.py,sha256=ER844H_OCPCrnmbc58cuqphWTVvCZJQn7-D7ZenCr3Y,3311
30
- hyperbrowser-0.18.0.dist-info/LICENSE,sha256=6rUGKlyKb_1ZAH7h7YITYAAUNFN3MNGGKCyfrw49NLE,1071
31
- hyperbrowser-0.18.0.dist-info/METADATA,sha256=GxrLTW97b-ht751LBX0D9bkwETVWA2jBn0hkcD8WIEQ,3440
32
- hyperbrowser-0.18.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
33
- hyperbrowser-0.18.0.dist-info/RECORD,,
33
+ hyperbrowser-0.20.0.dist-info/LICENSE,sha256=6rUGKlyKb_1ZAH7h7YITYAAUNFN3MNGGKCyfrw49NLE,1071
34
+ hyperbrowser-0.20.0.dist-info/METADATA,sha256=JaWMDuaKjTSZvy6Xu_TTNjt6bW1pBXeXTi6mFBaBz7k,3440
35
+ hyperbrowser-0.20.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
36
+ hyperbrowser-0.20.0.dist-info/RECORD,,