hyperbrowser 0.28.0__tar.gz → 0.30.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.28.0 → hyperbrowser-0.30.0}/PKG-INFO +1 -1
  2. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/async_manager/session.py +8 -1
  3. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/sync_manager/session.py +8 -1
  4. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/consts.py +109 -0
  5. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/extract.py +1 -0
  6. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/session.py +32 -3
  7. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/transport/async_transport.py +6 -2
  8. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/transport/sync.py +6 -2
  9. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/pyproject.toml +1 -1
  10. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/LICENSE +0 -0
  11. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/README.md +0 -0
  12. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/__init__.py +0 -0
  13. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/async_client.py +0 -0
  14. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/base.py +0 -0
  15. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
  16. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
  17. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/async_manager/extract.py +0 -0
  18. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
  19. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
  20. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
  21. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
  22. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/sync_manager/extract.py +0 -0
  23. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
  24. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
  25. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/client/sync.py +0 -0
  26. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/config.py +0 -0
  27. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/exceptions.py +0 -0
  28. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/crawl.py +0 -0
  29. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/extension.py +0 -0
  30. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/profile.py +0 -0
  31. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/models/scrape.py +0 -0
  32. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/tools/__init__.py +0 -0
  33. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/tools/anthropic.py +0 -0
  34. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/tools/openai.py +0 -0
  35. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/tools/schema.py +0 -0
  36. {hyperbrowser-0.28.0 → hyperbrowser-0.30.0}/hyperbrowser/transport/base.py +0 -0
@@ -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
@@ -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
  [tool.poetry]
2
2
  name = "hyperbrowser"
3
- version = "0.28.0"
3
+ version = "0.30.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