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.
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/PKG-INFO +1 -1
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/async_client.py +2 -0
- hyperbrowser-0.20.0/hyperbrowser/client/managers/async_manager/extract.py +41 -0
- hyperbrowser-0.20.0/hyperbrowser/client/managers/sync_manager/extract.py +41 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/sync.py +3 -0
- hyperbrowser-0.20.0/hyperbrowser/models/extract.py +53 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/session.py +1 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/pyproject.toml +1 -1
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/LICENSE +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/README.md +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/__init__.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/base.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/session.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/session.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/config.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/exceptions.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/consts.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/crawl.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/extension.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/profile.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/models/scrape.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/__init__.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/anthropic.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/openai.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/tools/schema.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/transport/async_transport.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/transport/base.py +0 -0
- {hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/transport/sync.py +0 -0
|
@@ -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):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/crawl.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/extension.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/profile.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/scrape.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/async_manager/session.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/crawl.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/extension.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/profile.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/scrape.py
RENAMED
|
File without changes
|
{hyperbrowser-0.18.0 → hyperbrowser-0.20.0}/hyperbrowser/client/managers/sync_manager/session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|