1
1
import os
2
2
import httpx
3
3
import time
4
- from typing import Optional , Sequence , Union , List
4
+ from typing import Optional , Sequence , Union , Literal
5
5
from enum import Enum
6
- from pydantic import BaseModel , Field
6
+ from pydantic import BaseModel
7
7
from playwright .sync_api import sync_playwright
8
8
9
9
10
- class BrowserType (str , Enum ):
11
- CHROME = "chrome"
12
- FIREFOX = "firefox"
13
- EDGE = "edge"
14
- SAFARI = "safari"
15
-
16
-
17
- class DeviceType (str , Enum ):
18
- DESKTOP = "desktop"
19
- MOBILE = "mobile"
20
-
21
-
22
- class OperatingSystem (str , Enum ):
23
- WINDOWS = "windows"
24
- MACOS = "macos"
25
- LINUX = "linux"
26
- IOS = "ios"
27
- ANDROID = "android"
28
-
29
-
30
- class SessionStatus (str , Enum ):
31
- NEW = "NEW"
32
- CREATED = "CREATED"
33
- ERROR = "ERROR"
34
- RUNNING = "RUNNING"
35
- REQUEST_RELEASE = "REQUEST_RELEASE"
36
- RELEASING = "RELEASING"
37
- COMPLETED = "COMPLETED"
10
+ BrowserType = Literal ["chrome" , "firefox" , "edge" , "safari" ]
11
+ DeviceType = Literal ["desktop" , "mobile" ]
12
+ OperatingSystem = Literal ["windows" , "macos" , "linux" , "ios" , "android" ]
13
+ SessionStatus = Literal [
14
+ "NEW" , "CREATED" , "ERROR" , "RUNNING" , "REQUEST_RELEASE" , "RELEASING" , "COMPLETED"
15
+ ]
38
16
39
17
40
18
class Screen (BaseModel ):
@@ -47,10 +25,10 @@ class Screen(BaseModel):
47
25
class Fingerprint (BaseModel ):
48
26
browserListQuery : Optional [str ] = None
49
27
httpVersion : Optional [int ] = None
50
- browsers : Optional [List [BrowserType ]] = None
51
- devices : Optional [List [DeviceType ]] = None
52
- locales : Optional [List [str ]] = None
53
- operatingSystems : Optional [List [OperatingSystem ]] = None
28
+ browsers : Optional [list [BrowserType ]] = None
29
+ devices : Optional [list [DeviceType ]] = None
30
+ locales : Optional [list [str ]] = None
31
+ operatingSystems : Optional [list [OperatingSystem ]] = None
54
32
screen : Optional [Screen ] = None
55
33
56
34
@@ -129,15 +107,17 @@ def __init__(
129
107
self .connect_url = connect_url or "wss://connect.browserbase.com"
130
108
self .api_url = api_url or "https://www.browserbase.com"
131
109
132
- def get_connect_url (self , session_id = None , proxy = False ):
110
+ def get_connect_url (
111
+ self , session_id : Optional [str ] = None , proxy : Optional [bool ] = None
112
+ ):
133
113
base_url = f"{ self .connect_url } ?apiKey={ self .api_key } "
134
114
if session_id :
135
115
base_url += f"&sessionId={ session_id } "
136
116
if proxy :
137
117
base_url += "&enableProxy=true"
138
118
return base_url
139
119
140
- def list_sessions (self ) -> List [Session ]:
120
+ def list_sessions (self ) -> list [Session ]:
141
121
response = httpx .get (
142
122
f"{ self .api_url } /v1/sessions" ,
143
123
headers = {
@@ -167,7 +147,7 @@ def create_session(self, options: Optional[CreateSessionOptions] = None) -> Sess
167
147
response .raise_for_status ()
168
148
return Session (** response .json ())
169
149
170
- def get_session (self , session_id : str ) -> List [ Session ] :
150
+ def get_session (self , session_id : str ) -> Session :
171
151
response = httpx .get (
172
152
f"{ self .api_url } /v1/sessions/{ session_id } " ,
173
153
headers = {
@@ -198,7 +178,7 @@ def update_session(
198
178
response .raise_for_status ()
199
179
return Session (** response .json ())
200
180
201
- def get_session_recording (self , session_id : str ) -> List [SessionRecording ]:
181
+ def get_session_recording (self , session_id : str ) -> list [SessionRecording ]:
202
182
response = httpx .get (
203
183
f"{ self .api_url } /v1/sessions/{ session_id } /recording" ,
204
184
headers = {
@@ -247,7 +227,7 @@ def get_debug_connection_urls(self, session_id: str) -> DebugConnectionURLs:
247
227
response .raise_for_status ()
248
228
return DebugConnectionURLs (** response .json ())
249
229
250
- def get_session_logs (self , session_id : str ) -> List [SessionLog ]:
230
+ def get_session_logs (self , session_id : str ) -> list [SessionLog ]:
251
231
response = httpx .get (
252
232
f"{ self .api_url } /v1/sessions/{ session_id } /logs" ,
253
233
headers = {
0 commit comments