hyperbrowser 0.28.0__py3-none-any.whl → 0.30.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.

@@ -2,6 +2,7 @@ from typing import List
2
2
  from ....models.session import (
3
3
  BasicResponse,
4
4
  CreateSessionParams,
5
+ GetSessionDownloadsUrlResponse,
5
6
  GetSessionRecordingUrlResponse,
6
7
  SessionDetail,
7
8
  SessionListParams,
@@ -47,7 +48,7 @@ class SessionManager:
47
48
 
48
49
  async def get_recording(self, id: str) -> List[SessionRecording]:
49
50
  response = await self._client.transport.get(
50
- self._client._build_url(f"/session/{id}/recording")
51
+ self._client._build_url(f"/session/{id}/recording"), None, True
51
52
  )
52
53
  return [SessionRecording(**recording) for recording in response.data]
53
54
 
@@ -56,3 +57,9 @@ class SessionManager:
56
57
  self._client._build_url(f"/session/{id}/recording-url")
57
58
  )
58
59
  return GetSessionRecordingUrlResponse(**response.data)
60
+
61
+ async def get_downloads_url(self, id: str) -> GetSessionDownloadsUrlResponse:
62
+ response = await self._client.transport.get(
63
+ self._client._build_url(f"/session/{id}/downloads-url")
64
+ )
65
+ return GetSessionDownloadsUrlResponse(**response.data)
@@ -2,6 +2,7 @@ from typing import List
2
2
  from ....models.session import (
3
3
  BasicResponse,
4
4
  CreateSessionParams,
5
+ GetSessionDownloadsUrlResponse,
5
6
  GetSessionRecordingUrlResponse,
6
7
  SessionDetail,
7
8
  SessionListParams,
@@ -45,7 +46,7 @@ class SessionManager:
45
46
 
46
47
  def get_recording(self, id: str) -> List[SessionRecording]:
47
48
  response = self._client.transport.get(
48
- self._client._build_url(f"/session/{id}/recording")
49
+ self._client._build_url(f"/session/{id}/recording"), None, True
49
50
  )
50
51
  return [SessionRecording(**recording) for recording in response.data]
51
52
 
@@ -54,3 +55,9 @@ class SessionManager:
54
55
  self._client._build_url(f"/session/{id}/recording-url")
55
56
  )
56
57
  return GetSessionRecordingUrlResponse(**response.data)
58
+
59
+ def get_downloads_url(self, id: str) -> GetSessionDownloadsUrlResponse:
60
+ response = self._client.transport.get(
61
+ self._client._build_url(f"/session/{id}/downloads-url")
62
+ )
63
+ return GetSessionDownloadsUrlResponse(**response.data)
@@ -4,6 +4,12 @@ ScrapeFormat = Literal["markdown", "html", "links", "screenshot"]
4
4
  ScrapeWaitUntil = Literal["load", "domcontentloaded", "networkidle"]
5
5
  ScrapePageStatus = Literal["completed", "failed", "pending", "running"]
6
6
  ScrapeScreenshotFormat = Literal["jpeg", "png", "webp"]
7
+ RecordingStatus = Literal[
8
+ "not_enabled", "pending", "in_progress", "completed", "failed"
9
+ ]
10
+ DownloadsStatus = Literal[
11
+ "not_enabled", "pending", "in_progress", "completed", "failed"
12
+ ]
7
13
 
8
14
  POLLING_ATTEMPTS = 5
9
15
 
@@ -486,3 +492,106 @@ ISO639_1 = Literal[
486
492
  "zh",
487
493
  "zu",
488
494
  ]
495
+
496
+ State = Literal[
497
+ "AL",
498
+ "AK",
499
+ "AZ",
500
+ "AR",
501
+ "CA",
502
+ "CO",
503
+ "CT",
504
+ "DE",
505
+ "FL",
506
+ "GA",
507
+ "HI",
508
+ "ID",
509
+ "IL",
510
+ "IN",
511
+ "IA",
512
+ "KS",
513
+ "KY",
514
+ "LA",
515
+ "ME",
516
+ "MD",
517
+ "MA",
518
+ "MI",
519
+ "MN",
520
+ "MS",
521
+ "MO",
522
+ "MT",
523
+ "NE",
524
+ "NV",
525
+ "NH",
526
+ "NJ",
527
+ "NM",
528
+ "NY",
529
+ "NC",
530
+ "ND",
531
+ "OH",
532
+ "OK",
533
+ "OR",
534
+ "PA",
535
+ "RI",
536
+ "SC",
537
+ "SD",
538
+ "TN",
539
+ "TX",
540
+ "UT",
541
+ "VT",
542
+ "VA",
543
+ "WA",
544
+ "WV",
545
+ "WI",
546
+ "WY",
547
+ "al",
548
+ "ak",
549
+ "az",
550
+ "ar",
551
+ "ca",
552
+ "co",
553
+ "ct",
554
+ "de",
555
+ "fl",
556
+ "ga",
557
+ "hi",
558
+ "id",
559
+ "il",
560
+ "in",
561
+ "ia",
562
+ "ks",
563
+ "ky",
564
+ "la",
565
+ "me",
566
+ "md",
567
+ "ma",
568
+ "mi",
569
+ "mn",
570
+ "ms",
571
+ "mo",
572
+ "mt",
573
+ "ne",
574
+ "nv",
575
+ "nh",
576
+ "nj",
577
+ "nm",
578
+ "ny",
579
+ "nc",
580
+ "nd",
581
+ "oh",
582
+ "ok",
583
+ "or",
584
+ "pa",
585
+ "ri",
586
+ "sc",
587
+ "sd",
588
+ "tn",
589
+ "tx",
590
+ "ut",
591
+ "vt",
592
+ "va",
593
+ "wa",
594
+ "wv",
595
+ "wi",
596
+ "wy",
597
+ ]
@@ -24,6 +24,7 @@ class StartExtractJobParams(BaseModel):
24
24
  schema_: Optional[Any] = pydantic.Field(
25
25
  None, alias="schema", serialization_alias="schema"
26
26
  )
27
+ wait_for: Optional[int] = Field(default=None, serialization_alias="waitFor")
27
28
  session_options: Optional[CreateSessionParams] = Field(
28
29
  default=None, serialization_alias="sessionOptions"
29
30
  )
@@ -3,7 +3,15 @@ from typing import Any, List, Literal, Optional, Union
3
3
 
4
4
  from pydantic import BaseModel, ConfigDict, Field, field_validator
5
5
 
6
- from hyperbrowser.models.consts import ISO639_1, Country, OperatingSystem, Platform
6
+ from hyperbrowser.models.consts import (
7
+ ISO639_1,
8
+ Country,
9
+ DownloadsStatus,
10
+ OperatingSystem,
11
+ Platform,
12
+ RecordingStatus,
13
+ State,
14
+ )
7
15
 
8
16
  SessionStatus = Literal["active", "closed", "error"]
9
17
 
@@ -138,8 +146,10 @@ class CreateSessionParams(BaseModel):
138
146
  default=None, serialization_alias="proxyServerUsername"
139
147
  )
140
148
  proxy_country: Optional[Country] = Field(
141
- default="US", serialization_alias="proxyCountry"
149
+ default=None, serialization_alias="proxyCountry"
142
150
  )
151
+ proxy_state: Optional[State] = Field(default=None, serialization_alias="proxyState")
152
+ proxy_city: Optional[str] = Field(default=None, serialization_alias="proxyCity")
143
153
  operating_systems: Optional[List[OperatingSystem]] = Field(
144
154
  default=None, serialization_alias="operatingSystems"
145
155
  )
@@ -168,6 +178,9 @@ class CreateSessionParams(BaseModel):
168
178
  browser_args: Optional[List[str]] = Field(
169
179
  default=None, serialization_alias="browserArgs"
170
180
  )
181
+ save_downloads: Optional[bool] = Field(
182
+ default=None, serialization_alias="saveDownloads"
183
+ )
171
184
 
172
185
 
173
186
  class SessionRecording(BaseModel):
@@ -194,4 +207,20 @@ class GetSessionRecordingUrlResponse(BaseModel):
194
207
  populate_by_alias=True,
195
208
  )
196
209
 
197
- recording_url: str = Field(alias="recordingUrl")
210
+ status: RecordingStatus = Field(alias="status")
211
+ recording_url: Optional[str] = Field(default=None, alias="recordingUrl")
212
+ error: Optional[str] = Field(default=None, alias="error")
213
+
214
+
215
+ class GetSessionDownloadsUrlResponse(BaseModel):
216
+ """
217
+ Response containing the signed URL for the session downloads.
218
+ """
219
+
220
+ model_config = ConfigDict(
221
+ populate_by_alias=True,
222
+ )
223
+
224
+ status: DownloadsStatus = Field(alias="status")
225
+ downloads_url: Optional[str] = Field(default=None, alias="downloadsUrl")
226
+ error: Optional[str] = Field(default=None, alias="error")
@@ -80,11 +80,15 @@ class AsyncTransport(TransportStrategy):
80
80
  except Exception as e:
81
81
  raise HyperbrowserError("Post request failed", original_error=e)
82
82
 
83
- async def get(self, url: str, params: Optional[dict] = None) -> APIResponse:
83
+ async def get(
84
+ self, url: str, params: Optional[dict] = None, follow_redirects: bool = False
85
+ ) -> APIResponse:
84
86
  if params:
85
87
  params = {k: v for k, v in params.items() if v is not None}
86
88
  try:
87
- response = await self.client.get(url, params=params)
89
+ response = await self.client.get(
90
+ url, params=params, follow_redirects=follow_redirects
91
+ )
88
92
  return await self._handle_response(response)
89
93
  except HyperbrowserError:
90
94
  raise
@@ -59,11 +59,15 @@ class SyncTransport(TransportStrategy):
59
59
  except Exception as e:
60
60
  raise HyperbrowserError("Post request failed", original_error=e)
61
61
 
62
- def get(self, url: str, params: Optional[dict] = None) -> APIResponse:
62
+ def get(
63
+ self, url: str, params: Optional[dict] = None, follow_redirects: bool = False
64
+ ) -> APIResponse:
63
65
  if params:
64
66
  params = {k: v for k, v in params.items() if v is not None}
65
67
  try:
66
- response = self.client.get(url, params=params)
68
+ response = self.client.get(
69
+ url, params=params, follow_redirects=follow_redirects
70
+ )
67
71
  return self._handle_response(response)
68
72
  except HyperbrowserError:
69
73
  raise
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: hyperbrowser
3
- Version: 0.28.0
3
+ Version: 0.30.0
4
4
  Summary: Python SDK for hyperbrowser
5
5
  License: MIT
6
6
  Author: Nikhil Shahi
@@ -6,31 +6,31 @@ hyperbrowser/client/managers/async_manager/extension.py,sha256=a-xYtXXdCspukYtsg
6
6
  hyperbrowser/client/managers/async_manager/extract.py,sha256=9p8dGLYmoow7smnQ0BTRN6diDmIayjW-EPRGzzvheZk,2102
7
7
  hyperbrowser/client/managers/async_manager/profile.py,sha256=f2uX2GGYdgL0fyzB0jnI-L-nWleqG6cwZ0pc1K1zdQY,1244
8
8
  hyperbrowser/client/managers/async_manager/scrape.py,sha256=Lr6oicTX3U1xooczUVQlsq2mzIhAKEW-A9909ZdSzKc,5720
9
- hyperbrowser/client/managers/async_manager/session.py,sha256=KN28FEwGdJ1GC0aq_4JFDsVQrWs7CigBAwgQE5BtaEE,2005
9
+ hyperbrowser/client/managers/async_manager/session.py,sha256=jO9Z2MSooG9eTmdsOWiNU0mFYdrxh5HirNnFqgwDIn0,2330
10
10
  hyperbrowser/client/managers/sync_manager/crawl.py,sha256=uAVmjhUbamVnzAAyfswq1bdBR5c7JrfGVvPdVmmw4R8,3799
11
11
  hyperbrowser/client/managers/sync_manager/extension.py,sha256=1YoyTZtMo43trl9jAsXv95aor0nBHiJEmLva39jFW-k,1415
12
12
  hyperbrowser/client/managers/sync_manager/extract.py,sha256=XocMKC0qAarRpE12KU4m_mi1KhUOHp3-TK4dLeiIn6E,2034
13
13
  hyperbrowser/client/managers/sync_manager/profile.py,sha256=va6mlhQ5SKZa-viEGFNzV6UBZEP5SqwVp32_oxC_NzM,1196
14
14
  hyperbrowser/client/managers/sync_manager/scrape.py,sha256=y4YB-NusXRi3brE7jBGRBHGANY-_-aHMBirKuuU6mdg,5579
15
- hyperbrowser/client/managers/sync_manager/session.py,sha256=x2yHIkamcIHbmzMLQtJHzY93UgAlhZ02gHMMmJqiHpc,1911
15
+ hyperbrowser/client/managers/sync_manager/session.py,sha256=aE4T9LWbOKcKCnh04n3rwnjeyus73Z47otrdCGTTKSM,2224
16
16
  hyperbrowser/client/sync.py,sha256=HgglJY9pNdW987OzNO_5dSZgj1AfAqovCmY99WYQD2E,1213
17
17
  hyperbrowser/config.py,sha256=2J6GYNR_83vzJZ6jEV-LXO1U-q6DHIrfyAU0WrUPhw8,625
18
18
  hyperbrowser/exceptions.py,sha256=SUUkptK2OL36xDORYmSicaTYR7pMbxeWAjAgz35xnM8,1171
19
- hyperbrowser/models/consts.py,sha256=SgXPzWHNiQj02d6AehQbzty4qaE2tZ8KxQrdsGBsN1c,5203
19
+ hyperbrowser/models/consts.py,sha256=yEPR3_Kmx44KDA3HC7p_96fTVIfNs2VwVfltIwe5Kgg,6415
20
20
  hyperbrowser/models/crawl.py,sha256=22hP_DPZMfa2MAfOeJ90qj5CH4rr7VtQT1gCQqO8jO8,2610
21
21
  hyperbrowser/models/extension.py,sha256=nXjKXKt9R7RxyZ4hd3EvfqZsEGy_ufh1r5j2mqCLykQ,804
22
- hyperbrowser/models/extract.py,sha256=24rNo0BzczRPTb3JOcz_WHo5Lz3rBc1Z3-l4EhhroI0,1447
22
+ hyperbrowser/models/extract.py,sha256=Thq1wQhXlS-dh4442JLDONGOYix06s3gjWSnP1OuyN4,1528
23
23
  hyperbrowser/models/profile.py,sha256=KRb_LNxxW00AsD_thzzthFS51vInJawt1RcoNz4Q9i8,1322
24
24
  hyperbrowser/models/scrape.py,sha256=ZdVNN4rh7EKLh-O1Ou5aU_OgTNxC9pFQlkG-Q2fR-Z4,4611
25
- hyperbrowser/models/session.py,sha256=UJ16Pvgih38QM2DQlSeLdYBigjAqlAcCAVl8bZnRb7c,5841
25
+ hyperbrowser/models/session.py,sha256=i1NkrQWNlKziDd98ySdrUUH7XSv6qOa2cmiK5vV7VeI,6730
26
26
  hyperbrowser/tools/__init__.py,sha256=OUaTUM-kiigYmzfbpx3XQhzMK1xT1wd8cqXgR4znsAY,2021
27
27
  hyperbrowser/tools/anthropic.py,sha256=5pEkJm1H-26GToTwXsDjo4GGqVy1hATws4Pg59mumow,1667
28
28
  hyperbrowser/tools/openai.py,sha256=4-71IIWSxc_ByhywcfWj9-QI9iYNEe0xO6B2spE8WG0,2200
29
29
  hyperbrowser/tools/schema.py,sha256=cR2MUX8TvUyN8TnCyeX0pccp4AmPjrdaKzuAXRThOJo,3075
30
- hyperbrowser/transport/async_transport.py,sha256=MIPJvilvZWBPXLZ96c9OohuN6TN9DaaU0EnyleG3q6g,4017
30
+ hyperbrowser/transport/async_transport.py,sha256=6HKoeM5TutIqraEscEWobvSPWF3iVKh2hPflGNKwykw,4128
31
31
  hyperbrowser/transport/base.py,sha256=ildpMrDiM8nvrSGrH2LTOafmB17T7PQB_NQ1ODA378U,1703
32
- hyperbrowser/transport/sync.py,sha256=ER844H_OCPCrnmbc58cuqphWTVvCZJQn7-D7ZenCr3Y,3311
33
- hyperbrowser-0.28.0.dist-info/LICENSE,sha256=6rUGKlyKb_1ZAH7h7YITYAAUNFN3MNGGKCyfrw49NLE,1071
34
- hyperbrowser-0.28.0.dist-info/METADATA,sha256=zMfF5QFi32wKO6JDUK-Z6ce-RgYC34ePKQ_CF4dTlgs,3438
35
- hyperbrowser-0.28.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
36
- hyperbrowser-0.28.0.dist-info/RECORD,,
32
+ hyperbrowser/transport/sync.py,sha256=aUVpxWF8sqSycLNKxVNEZvlsZSoqc1eHgPK1Y1QA1u8,3422
33
+ hyperbrowser-0.30.0.dist-info/LICENSE,sha256=6rUGKlyKb_1ZAH7h7YITYAAUNFN3MNGGKCyfrw49NLE,1071
34
+ hyperbrowser-0.30.0.dist-info/METADATA,sha256=EdPIlQtwBgME4yioEdu6GUiJcEHt87woh5MVLQRHE3s,3438
35
+ hyperbrowser-0.30.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
36
+ hyperbrowser-0.30.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.0.1
2
+ Generator: poetry-core 2.1.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any