# 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.bad_request_error import BadRequestError from ..errors.not_found_error import NotFoundError from ..errors.unprocessable_entity_error import UnprocessableEntityError from ..types.folder import Folder from ..types.workflow import Workflow # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) class RawWorkflowsClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper def get_folders( self, *, page: typing.Optional[int] = None, page_size: typing.Optional[int] = None, search: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[typing.List[Folder]]: """ Get all folders for the organization Parameters ---------- page : typing.Optional[int] Page number page_size : typing.Optional[int] Number of folders per page search : typing.Optional[str] Search folders by title or description request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[typing.List[Folder]] Successfully retrieved folders """ _response = self._client_wrapper.httpx_client.request( "v1/folders", method="GET", params={ "page": page, "page_size": page_size, "search": search, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( typing.List[Folder], parse_obj_as( type_=typing.List[Folder], # 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_folder( self, *, title: str, description: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[Folder]: """ Create a new folder to organize workflows Parameters ---------- title : str Folder title description : typing.Optional[str] Folder description request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[Folder] Successfully created folder """ _response = self._client_wrapper.httpx_client.request( "v1/folders", method="POST", json={ "title": title, "description": description, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Folder, parse_obj_as( type_=Folder, # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( 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 get_folder( self, folder_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[Folder]: """ Get a specific folder by ID Parameters ---------- folder_id : str Folder ID request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[Folder] Successfully retrieved folder """ _response = self._client_wrapper.httpx_client.request( f"v1/folders/{jsonable_encoder(folder_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Folder, parse_obj_as( type_=Folder, # 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 update_folder( self, folder_id: str, *, title: typing.Optional[str] = OMIT, description: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[Folder]: """ Update a folder's title or description Parameters ---------- folder_id : str Folder ID title : typing.Optional[str] Folder title description : typing.Optional[str] Folder description request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[Folder] Successfully updated folder """ _response = self._client_wrapper.httpx_client.request( f"v1/folders/{jsonable_encoder(folder_id)}", method="PUT", json={ "title": title, "description": description, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Folder, parse_obj_as( type_=Folder, # 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_folder( self, folder_id: str, *, delete_workflows: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]: """ Delete a folder. Optionally delete all workflows in the folder. Parameters ---------- folder_id : str Folder ID delete_workflows : typing.Optional[bool] If true, also delete all workflows in this folder request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[typing.Dict[str, typing.Optional[typing.Any]]] Successfully deleted folder """ _response = self._client_wrapper.httpx_client.request( f"v1/folders/{jsonable_encoder(folder_id)}", method="DELETE", params={ "delete_workflows": delete_workflows, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( typing.Dict[str, typing.Optional[typing.Any]], parse_obj_as( type_=typing.Dict[str, typing.Optional[typing.Any]], # 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 update_workflow_folder( self, workflow_permanent_id: str, *, folder_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[Workflow]: """ Update a workflow's folder assignment for the latest version Parameters ---------- workflow_permanent_id : str Workflow permanent ID folder_id : typing.Optional[str] Folder ID to assign workflow to. Set to null to remove from folder. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- HttpResponse[Workflow] Successfully updated workflow folder """ _response = self._client_wrapper.httpx_client.request( f"v1/workflows/{jsonable_encoder(workflow_permanent_id)}/folder", method="PUT", json={ "folder_id": folder_id, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Workflow, parse_obj_as( type_=Workflow, # type: ignore object_=_response.json(), ), ) return HttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( 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 == 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 AsyncRawWorkflowsClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper async def get_folders( self, *, page: typing.Optional[int] = None, page_size: typing.Optional[int] = None, search: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[typing.List[Folder]]: """ Get all folders for the organization Parameters ---------- page : typing.Optional[int] Page number page_size : typing.Optional[int] Number of folders per page search : typing.Optional[str] Search folders by title or description request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[typing.List[Folder]] Successfully retrieved folders """ _response = await self._client_wrapper.httpx_client.request( "v1/folders", method="GET", params={ "page": page, "page_size": page_size, "search": search, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( typing.List[Folder], parse_obj_as( type_=typing.List[Folder], # 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_folder( self, *, title: str, description: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[Folder]: """ Create a new folder to organize workflows Parameters ---------- title : str Folder title description : typing.Optional[str] Folder description request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[Folder] Successfully created folder """ _response = await self._client_wrapper.httpx_client.request( "v1/folders", method="POST", json={ "title": title, "description": description, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Folder, parse_obj_as( type_=Folder, # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( 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 get_folder( self, folder_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[Folder]: """ Get a specific folder by ID Parameters ---------- folder_id : str Folder ID request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[Folder] Successfully retrieved folder """ _response = await self._client_wrapper.httpx_client.request( f"v1/folders/{jsonable_encoder(folder_id)}", method="GET", request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Folder, parse_obj_as( type_=Folder, # 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 update_folder( self, folder_id: str, *, title: typing.Optional[str] = OMIT, description: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[Folder]: """ Update a folder's title or description Parameters ---------- folder_id : str Folder ID title : typing.Optional[str] Folder title description : typing.Optional[str] Folder description request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[Folder] Successfully updated folder """ _response = await self._client_wrapper.httpx_client.request( f"v1/folders/{jsonable_encoder(folder_id)}", method="PUT", json={ "title": title, "description": description, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Folder, parse_obj_as( type_=Folder, # 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_folder( self, folder_id: str, *, delete_workflows: typing.Optional[bool] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]: """ Delete a folder. Optionally delete all workflows in the folder. Parameters ---------- folder_id : str Folder ID delete_workflows : typing.Optional[bool] If true, also delete all workflows in this folder request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[typing.Dict[str, typing.Optional[typing.Any]]] Successfully deleted folder """ _response = await self._client_wrapper.httpx_client.request( f"v1/folders/{jsonable_encoder(folder_id)}", method="DELETE", params={ "delete_workflows": delete_workflows, }, request_options=request_options, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( typing.Dict[str, typing.Optional[typing.Any]], parse_obj_as( type_=typing.Dict[str, typing.Optional[typing.Any]], # 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 update_workflow_folder( self, workflow_permanent_id: str, *, folder_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[Workflow]: """ Update a workflow's folder assignment for the latest version Parameters ---------- workflow_permanent_id : str Workflow permanent ID folder_id : typing.Optional[str] Folder ID to assign workflow to. Set to null to remove from folder. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- AsyncHttpResponse[Workflow] Successfully updated workflow folder """ _response = await self._client_wrapper.httpx_client.request( f"v1/workflows/{jsonable_encoder(workflow_permanent_id)}/folder", method="PUT", json={ "folder_id": folder_id, }, headers={ "content-type": "application/json", }, request_options=request_options, omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( Workflow, parse_obj_as( type_=Workflow, # type: ignore object_=_response.json(), ), ) return AsyncHttpResponse(response=_response, data=_data) if _response.status_code == 400: raise BadRequestError( 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 == 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)