# This file was auto-generated by Fern from our API Definition. import typing from json.decoder import JSONDecodeError from ..core.api_error import ApiError from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.http_response import AsyncHttpResponse, HttpResponse from ..core.jsonable_encoder import jsonable_encoder from ..core.pydantic_utilities import parse_obj_as from ..core.request_options import RequestOptions from ..errors.not_found_error import NotFoundError from ..errors.unprocessable_entity_error import UnprocessableEntityError from ..types.browser_profile import BrowserProfile # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) class RawBrowserProfilesClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper def list_browser_profiles( self, *, include_deleted: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[typing.List[BrowserProfile]]: """ Get all browser profiles for the organization Parameters ---------- include_deleted : typing.Optional[bool] Include deleted browser profiles request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[typing.List[BrowserProfile]] Successful Response """ _response = self._client_wrapper.httpx_client.request( "v1/browser_profiles", method="GET", params={ "include_deleted": include_deleted, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( typing.List[BrowserProfile], parse_obj_as( type_=typing.List[BrowserProfile], # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def create_browser_profile( self, *, name: str, description: typing.Optional[str] = OMIT, browser_session_id: typing.Optional[str] = OMIT, workflow_run_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[BrowserProfile]: """ Parameters ---------- name : str Name for the browser profile description : typing.Optional[str] Optional profile description browser_session_id : typing.Optional[str] Persistent browser session to convert into a profile workflow_run_id : typing.Optional[str] Workflow run whose persisted session should be captured request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[BrowserProfile] Successful Response """ _response = self._client_wrapper.httpx_client.request( "v1/browser_profiles", method="POST", json={ "name": name, "description": description, "browser_session_id": browser_session_id, "workflow_run_id": workflow_run_id, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( BrowserProfile, parse_obj_as( type_=BrowserProfile, # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def get_browser_profile( self, profile_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[BrowserProfile]: """ Get a specific browser profile by ID Parameters ---------- profile_id : str The ID of the browser profile. browser_profile_id starts with `bp_` request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[BrowserProfile] Successfully retrieved browser profile """ _response = self._client_wrapper.httpx_client.request( f"v1/browser_profiles/{jsonable_encoder(profile_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( BrowserProfile, parse_obj_as( type_=BrowserProfile, # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) if _response.status_code == 404: raise NotFoundError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) def delete_browser_profile( self, profile_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[None]: """ Delete a browser profile (soft delete) Parameters ---------- profile_id : str The ID of the browser profile to delete. browser_profile_id starts with `bp_` request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[None] """ _response = self._client_wrapper.httpx_client.request( f"v1/browser_profiles/{jsonable_encoder(profile_id)}", method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: return HttpResponse(response=_response, data=None) if _response.status_code == 404: raise NotFoundError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) class AsyncRawBrowserProfilesClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper async def list_browser_profiles( self, *, include_deleted: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[typing.List[BrowserProfile]]: """ Get all browser profiles for the organization Parameters ---------- include_deleted : typing.Optional[bool] Include deleted browser profiles request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[typing.List[BrowserProfile]] Successful Response """ _response = await self._client_wrapper.httpx_client.request( "v1/browser_profiles", method="GET", params={ "include_deleted": include_deleted, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( typing.List[BrowserProfile], parse_obj_as( type_=typing.List[BrowserProfile], # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def create_browser_profile( self, *, name: str, description: typing.Optional[str] = OMIT, browser_session_id: typing.Optional[str] = OMIT, workflow_run_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[BrowserProfile]: """ Parameters ---------- name : str Name for the browser profile description : typing.Optional[str] Optional profile description browser_session_id : typing.Optional[str] Persistent browser session to convert into a profile workflow_run_id : typing.Optional[str] Workflow run whose persisted session should be captured request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[BrowserProfile] Successful Response """ _response = await self._client_wrapper.httpx_client.request( "v1/browser_profiles", method="POST", json={ "name": name, "description": description, "browser_session_id": browser_session_id, "workflow_run_id": workflow_run_id, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( BrowserProfile, parse_obj_as( type_=BrowserProfile, # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def get_browser_profile( self, profile_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[BrowserProfile]: """ Get a specific browser profile by ID Parameters ---------- profile_id : str The ID of the browser profile. browser_profile_id starts with `bp_` request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[BrowserProfile] Successfully retrieved browser profile """ _response = await self._client_wrapper.httpx_client.request( f"v1/browser_profiles/{jsonable_encoder(profile_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( BrowserProfile, parse_obj_as( type_=BrowserProfile, # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 404: raise NotFoundError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) async def delete_browser_profile( self, profile_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[None]: """ Delete a browser profile (soft delete) Parameters ---------- profile_id : str The ID of the browser profile to delete. browser_profile_id starts with `bp_` request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[None] """ _response = await self._client_wrapper.httpx_client.request( f"v1/browser_profiles/{jsonable_encoder(profile_id)}", method="DELETE", request_options=request_options, ) try: if 200 <= _response.status_code < 300: return AsyncHttpResponse(response=_response, data=None) if _response.status_code == 404: raise NotFoundError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) if _response.status_code == 422: raise UnprocessableEntityError( headers=dict(_response.headers), body=typing.cast( typing.Optional[typing.Any], parse_obj_as( type_=typing.Optional[typing.Any], # type: ignore object_=_response.json(), ), ), ) _response_json = _response.json() except JSONDecodeError: raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text) raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)