Skip to content

Commit 48e7972

Browse files
committed
Release 2.0.3
1 parent 6ce3ff7 commit 48e7972

File tree

8 files changed

+88
-221
lines changed

8 files changed

+88
-221
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "browser-use-sdk"
33

44
[tool.poetry]
55
name = "browser-use-sdk"
6-
version = "2.0.2"
6+
version = "2.0.3"
77
description = "The official Python library for the Browser Use API"
88
readme = "README.md"
99
authors = []

reference.md

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -791,76 +791,6 @@ client.sessions.get_session(
791791
</dl>
792792

793793

794-
</dd>
795-
</dl>
796-
</details>
797-
798-
<details><summary><code>client.sessions.<a href="src/browser_use_sdk/sessions/client.py">delete_session</a>(...)</code></summary>
799-
<dl>
800-
<dd>
801-
802-
#### 📝 Description
803-
804-
<dl>
805-
<dd>
806-
807-
<dl>
808-
<dd>
809-
810-
Permanently delete a session and all associated data.
811-
</dd>
812-
</dl>
813-
</dd>
814-
</dl>
815-
816-
#### 🔌 Usage
817-
818-
<dl>
819-
<dd>
820-
821-
<dl>
822-
<dd>
823-
824-
```python
825-
from browser_use_sdk import BrowserUse
826-
827-
client = BrowserUse(
828-
api_key="YOUR_API_KEY",
829-
)
830-
client.sessions.delete_session(
831-
session_id="session_id",
832-
)
833-
834-
```
835-
</dd>
836-
</dl>
837-
</dd>
838-
</dl>
839-
840-
#### ⚙️ Parameters
841-
842-
<dl>
843-
<dd>
844-
845-
<dl>
846-
<dd>
847-
848-
**session_id:** `str`
849-
850-
</dd>
851-
</dl>
852-
853-
<dl>
854-
<dd>
855-
856-
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
857-
858-
</dd>
859-
</dl>
860-
</dd>
861-
</dl>
862-
863-
864794
</dd>
865795
</dl>
866796
</details>

src/browser_use_sdk/core/client_wrapper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ def __init__(
2222

2323
def get_headers(self) -> typing.Dict[str, str]:
2424
headers: typing.Dict[str, str] = {
25-
"User-Agent": "browser-use-sdk/2.0.2",
25+
"User-Agent": "browser-use-sdk/2.0.3",
2626
"X-Fern-Language": "Python",
2727
"X-Fern-SDK-Name": "browser-use-sdk",
28-
"X-Fern-SDK-Version": "2.0.2",
28+
"X-Fern-SDK-Version": "2.0.3",
2929
**(self.get_custom_headers() or {}),
3030
}
3131
headers["X-Browser-Use-API-Key"] = self.api_key
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# This file was auto-generated by Fern from our API Definition.
2+
3+
import typing
4+
5+
from ..core.api_error import ApiError
6+
from ..types.too_many_concurrent_active_sessions_error import TooManyConcurrentActiveSessionsError
7+
8+
9+
class TooManyRequestsError(ApiError):
10+
def __init__(
11+
self, body: TooManyConcurrentActiveSessionsError, headers: typing.Optional[typing.Dict[str, str]] = None
12+
):
13+
super().__init__(status_code=429, headers=headers, body=body)

src/browser_use_sdk/sessions/client.py

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -142,35 +142,6 @@ def get_session(self, session_id: str, *, request_options: typing.Optional[Reque
142142
_response = self._raw_client.get_session(session_id, request_options=request_options)
143143
return _response.data
144144

145-
def delete_session(self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
146-
"""
147-
Permanently delete a session and all associated data.
148-
149-
Parameters
150-
----------
151-
session_id : str
152-
153-
request_options : typing.Optional[RequestOptions]
154-
Request-specific configuration.
155-
156-
Returns
157-
-------
158-
None
159-
160-
Examples
161-
--------
162-
from browser_use_sdk import BrowserUse
163-
164-
client = BrowserUse(
165-
api_key="YOUR_API_KEY",
166-
)
167-
client.sessions.delete_session(
168-
session_id="session_id",
169-
)
170-
"""
171-
_response = self._raw_client.delete_session(session_id, request_options=request_options)
172-
return _response.data
173-
174145
def update_session(
175146
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
176147
) -> SessionView:
@@ -451,43 +422,6 @@ async def main() -> None:
451422
_response = await self._raw_client.get_session(session_id, request_options=request_options)
452423
return _response.data
453424

454-
async def delete_session(self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> None:
455-
"""
456-
Permanently delete a session and all associated data.
457-
458-
Parameters
459-
----------
460-
session_id : str
461-
462-
request_options : typing.Optional[RequestOptions]
463-
Request-specific configuration.
464-
465-
Returns
466-
-------
467-
None
468-
469-
Examples
470-
--------
471-
import asyncio
472-
473-
from browser_use_sdk import AsyncBrowserUse
474-
475-
client = AsyncBrowserUse(
476-
api_key="YOUR_API_KEY",
477-
)
478-
479-
480-
async def main() -> None:
481-
await client.sessions.delete_session(
482-
session_id="session_id",
483-
)
484-
485-
486-
asyncio.run(main())
487-
"""
488-
_response = await self._raw_client.delete_session(session_id, request_options=request_options)
489-
return _response.data
490-
491425
async def update_session(
492426
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
493427
) -> SessionView:

src/browser_use_sdk/sessions/raw_client.py

Lines changed: 24 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
from ..core.request_options import RequestOptions
1111
from ..core.unchecked_base_model import construct_type
1212
from ..errors.not_found_error import NotFoundError
13+
from ..errors.too_many_requests_error import TooManyRequestsError
1314
from ..errors.unprocessable_entity_error import UnprocessableEntityError
1415
from ..types.proxy_country_code import ProxyCountryCode
1516
from ..types.session_item_view import SessionItemView
1617
from ..types.session_list_response import SessionListResponse
1718
from ..types.session_status import SessionStatus
1819
from ..types.session_view import SessionView
1920
from ..types.share_view import ShareView
21+
from ..types.too_many_concurrent_active_sessions_error import TooManyConcurrentActiveSessionsError
2022

2123
# this is used as the default value for optional parameters
2224
OMIT = typing.cast(typing.Any, ...)
@@ -160,6 +162,17 @@ def create_session(
160162
),
161163
),
162164
)
165+
if _response.status_code == 429:
166+
raise TooManyRequestsError(
167+
headers=dict(_response.headers),
168+
body=typing.cast(
169+
TooManyConcurrentActiveSessionsError,
170+
construct_type(
171+
type_=TooManyConcurrentActiveSessionsError, # type: ignore
172+
object_=_response.json(),
173+
),
174+
),
175+
)
163176
_response_json = _response.json()
164177
except JSONDecodeError:
165178
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -225,47 +238,6 @@ def get_session(
225238
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
226239
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
227240

228-
def delete_session(
229-
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
230-
) -> HttpResponse[None]:
231-
"""
232-
Permanently delete a session and all associated data.
233-
234-
Parameters
235-
----------
236-
session_id : str
237-
238-
request_options : typing.Optional[RequestOptions]
239-
Request-specific configuration.
240-
241-
Returns
242-
-------
243-
HttpResponse[None]
244-
"""
245-
_response = self._client_wrapper.httpx_client.request(
246-
f"sessions/{jsonable_encoder(session_id)}",
247-
method="DELETE",
248-
request_options=request_options,
249-
)
250-
try:
251-
if 200 <= _response.status_code < 300:
252-
return HttpResponse(response=_response, data=None)
253-
if _response.status_code == 422:
254-
raise UnprocessableEntityError(
255-
headers=dict(_response.headers),
256-
body=typing.cast(
257-
typing.Optional[typing.Any],
258-
construct_type(
259-
type_=typing.Optional[typing.Any], # type: ignore
260-
object_=_response.json(),
261-
),
262-
),
263-
)
264-
_response_json = _response.json()
265-
except JSONDecodeError:
266-
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
267-
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
268-
269241
def update_session(
270242
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
271243
) -> HttpResponse[SessionView]:
@@ -644,6 +616,17 @@ async def create_session(
644616
),
645617
),
646618
)
619+
if _response.status_code == 429:
620+
raise TooManyRequestsError(
621+
headers=dict(_response.headers),
622+
body=typing.cast(
623+
TooManyConcurrentActiveSessionsError,
624+
construct_type(
625+
type_=TooManyConcurrentActiveSessionsError, # type: ignore
626+
object_=_response.json(),
627+
),
628+
),
629+
)
647630
_response_json = _response.json()
648631
except JSONDecodeError:
649632
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -709,47 +692,6 @@ async def get_session(
709692
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
710693
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
711694

712-
async def delete_session(
713-
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
714-
) -> AsyncHttpResponse[None]:
715-
"""
716-
Permanently delete a session and all associated data.
717-
718-
Parameters
719-
----------
720-
session_id : str
721-
722-
request_options : typing.Optional[RequestOptions]
723-
Request-specific configuration.
724-
725-
Returns
726-
-------
727-
AsyncHttpResponse[None]
728-
"""
729-
_response = await self._client_wrapper.httpx_client.request(
730-
f"sessions/{jsonable_encoder(session_id)}",
731-
method="DELETE",
732-
request_options=request_options,
733-
)
734-
try:
735-
if 200 <= _response.status_code < 300:
736-
return AsyncHttpResponse(response=_response, data=None)
737-
if _response.status_code == 422:
738-
raise UnprocessableEntityError(
739-
headers=dict(_response.headers),
740-
body=typing.cast(
741-
typing.Optional[typing.Any],
742-
construct_type(
743-
type_=typing.Optional[typing.Any], # type: ignore
744-
object_=_response.json(),
745-
),
746-
),
747-
)
748-
_response_json = _response.json()
749-
except JSONDecodeError:
750-
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
751-
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
752-
753695
async def update_session(
754696
self, session_id: str, *, request_options: typing.Optional[RequestOptions] = None
755697
) -> AsyncHttpResponse[SessionView]:

src/browser_use_sdk/tasks/raw_client.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ..errors.bad_request_error import BadRequestError
1515
from ..errors.internal_server_error import InternalServerError
1616
from ..errors.not_found_error import NotFoundError
17+
from ..errors.too_many_requests_error import TooManyRequestsError
1718
from ..errors.unprocessable_entity_error import UnprocessableEntityError
1819
from ..types.supported_ll_ms import SupportedLlMs
1920
from ..types.task_created_response import TaskCreatedResponse
@@ -22,6 +23,7 @@
2223
from ..types.task_status import TaskStatus
2324
from ..types.task_update_action import TaskUpdateAction
2425
from ..types.task_view import TaskView
26+
from ..types.too_many_concurrent_active_sessions_error import TooManyConcurrentActiveSessionsError
2527

2628
# this is used as the default value for optional parameters
2729
OMIT = typing.cast(typing.Any, ...)
@@ -250,6 +252,17 @@ def create_task(
250252
),
251253
),
252254
)
255+
if _response.status_code == 429:
256+
raise TooManyRequestsError(
257+
headers=dict(_response.headers),
258+
body=typing.cast(
259+
TooManyConcurrentActiveSessionsError,
260+
construct_type(
261+
type_=TooManyConcurrentActiveSessionsError, # type: ignore
262+
object_=_response.json(),
263+
),
264+
),
265+
)
253266
_response_json = _response.json()
254267
except JSONDecodeError:
255268
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -680,6 +693,17 @@ async def create_task(
680693
),
681694
),
682695
)
696+
if _response.status_code == 429:
697+
raise TooManyRequestsError(
698+
headers=dict(_response.headers),
699+
body=typing.cast(
700+
TooManyConcurrentActiveSessionsError,
701+
construct_type(
702+
type_=TooManyConcurrentActiveSessionsError, # type: ignore
703+
object_=_response.json(),
704+
),
705+
),
706+
)
683707
_response_json = _response.json()
684708
except JSONDecodeError:
685709
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)

0 commit comments

Comments
 (0)