bodosdk


Namebodosdk JSON
Version 2.0.1 PyPI version JSON
download
home_pagehttps://github.com/Bodo-inc/bodo-sdk
SummaryBodo Platform SDK 2.0.1
upload_time2024-05-29 21:32:36
maintainerNone
docs_urlNone
authorBodo, Inc.
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Bodo Platform SDK

Bodo Platform SDK is a Python library that provides a simple way to interact with the Bodo Platform API. It allows you
to create, manage, and monitor resources such as clusters, jobs, and workspaces.

## Getting Started

### Installation

```shell
pip install bodosdk
```

### Creating workspace client

First you need to access your workspace in `https://platform.bodo.ai/` and create an _API Token_ in the Bodo Platform
for
Bodo SDK authentication.

Navigate to _API Tokens_ in the Admin Console to generate a token.
Copy and save the token's _Client ID_ and _Secret Key_ and use them to define a client (`BodoClient`) that can interact
with the Bodo Platform.

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient(
    client_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    secret_key="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
)
```

Alternatively, set `BODO_CLIENT_ID` and `BODO_SECRET_KEY` environment variables
to avoid requiring keys:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
```

To get workspace data, you can access the `workspace_data` attribute of the client:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
print(my_workspace.workspace_data)
```

### Additional Configuration Options for `BodoClient`

- `print_logs`: defaults to False. All API requests and responses are printed to the console if set to True.

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient(print_logs=True)
```

### Create first cluster

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.create(
    name='My first cluster',
    instance_type='c5.large',
    workers_quantity=1
)
```

Above example creates a simple one node cluster, with latest bodo version available and returns cluster object.
Platform will create cluster in your workspace.

### Waiting for status

To wait till cluster will be ready for interaction you can call
method `wait_for_status`

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.create(
    name='My first cluster',
    instance_type='c5.large',
    workers_quantity=1
)
my_cluster.wait_for_status(['RUNNING'])
```

This method will wait until any of provided statuses will occur or `FAILED` status will be set in case of some failure.
Check your workspace on `https://platform.bodo.ai/` and you will see your cluster, you can use Notebook to connect with
it.

### Updating Cluster

Now let's update our cluster, on `RUNNING` cluster you can update `name`, `description`, `auto_pause`, `auto_stop`
and `workers_quantity`(this will trigger scaling) only:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.create(
    name='My first cluster',
    instance_type='c5.large',
    workers_quantity=1
)
my_cluster.wait_for_status(['RUNNING'])
my_cluster.update(
    description='My description',
    name="My updated cluster",
    auto_pause=15,
    auto_stop=30
)
```

All other modifcations like `instance_type`, `bodo_version` etc need `STOPPED` cluster

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.get("cluster_id")
if my_cluster.status != 'STOPPED':
    my_cluster.stop(wait=True)
my_cluster.update(instance_type='c5.2xlarge', workers_quantity=2)
```

### Create First Job

On running cluster you can schedule a job in very simple way:
First on `https://platform.bodo.ai` navigate to notebook in your workspace and
create following `test.py` file in your main directory:

```python
import pandas as pd
import numpy as np
import bodo
import time

NUM_GROUPS = 30
NUM_ROWS = 20_000_000

df = pd.DataFrame({
    "A": np.arange(NUM_ROWS) % NUM_GROUPS,
    "B": np.arange(NUM_ROWS)
})
df.to_parquet("my_data.pq")
time.sleep(1) # wait till file will be available on all nodes
@bodo.jit(cache=True)
def computation():
    t1 = time.time()
    df = pd.read_parquet("my_data.pq")
    df1 = df[df.B > 4].A.sum()
    print("Execution time:", time.time() - t1)
    return df1

result = computation()
print(result)
```

then define job on cluster through SDK, wait till `SUCCEEDED` and check logs

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.get("cluster_id")
my_job = my_cluster.run_job(
    code_type='PYTHON',
    source={'type': 'WORKSPACE', 'path': '/'},
    exec_file='test.py'
)
print(my_job.wait_for_status(['SUCCEEDED']).get_stdout())
```

You can use almost same confiuration to run SQL file, all you need is to define your `test.sql` file and Catalog `https://platform.bodo.ai`:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.get("cluster_id")
my_job = my_cluster.run_job(
    code_type='SQL',
    source={'type': 'WORKSPACE', 'path': '/'},
    exec_file='test.sql',
    catalog="MyCatalog"
)
print(my_job.wait_for_status(['SUCCEEDED']).get_stdout())

```

### Cluster List and executing jobs on it's elements

Now let's try to run same job on different clusters:

```python
from bodosdk import BodoWorkspaceClient
import random

my_workspace = BodoWorkspaceClient()

random_val = random.random() # just to avoid conflicts on name
clusters_conf = [('c5.large', 8), ('c5.xlarge',4), ('c5.2xlarge',2)]
for  i, conf in enumerate(clusters_conf):
    my_workspace.ClusterClient.create(
        name=f'Test {i}',
        instance_type=conf[0],
        workers_quantity=conf[1],
        custom_tags={'test_tag': f'perf_test{random_val}'} # let's add tag to easy filter our clusters
    )
# get list by tag
clusters = my_workspace.ClusterClient.list(filters={
    'tags': {'test_tag': f'perf_test{random_val}'}
})
# run same job 3 times, once per each cluster
jobs = clusters.run_job(
    code_type='PYTHON',
    source={'type': 'WORKSPACE', 'path': '/'},
    exec_file='test.py'
)
#wait for jobs to finish and print results
for job in jobs.wait_for_status(['SUCCEEDED']):
    print(job.name, job.cluster.name)
    print(job.get_stdout())
#remove our clusters
jobs.clusters.delete() # or clusters.delete()
```

### Execute SQL query

You can also execute SQL queries by passing just query text like following:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_sql_job = my_workspace.JobClient.run_sql_query(sql_query="SELECT 1", catalog="MyCatalog", cluster={
    "name": 'Temporary cluster',
    "instance_type": 'c5.large',
    "workers_quantity": 1
})
print(my_sql_job.wait_for_status(['SUCCEEDED']).get_stdout())
```

In above case, when you provide cluster configuration but not existing cluster it will be terminated as soon
as SQL job will finish.

If you want to execute sql job on existing cluster just use `run_sql_query` on cluster:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.create(
    name='My cluster',
    instance_type='c5.large',
    workers_quantity=1
)
my_sql_job = my_cluster.run_sql_query(sql_query="SELECT 1", catalog="MyCatalog")
print(my_sql_job.wait_for_status(['SUCCEEDED']).get_stdout())
```

### Connector

You can also execute SQL queries using connector for cluster:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.create(
    name='My cluster',
    instance_type='c5.large',
    workers_quantity=1
)
connection = my_cluster.connect('MyCatalog') # or connection = my_workspace.ClusterClient.connect('MyCatalog', 'cluster_id')
print(connection.cursor().execute("SELECT 1").fetchone())
my_cluster.delete()
```

### Job Templates

Against defining jobs from scratch you can create a template for your jobs, and then easily run them, e.g.:

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
tpl = my_workspace.JobTemplateClient.create(
    name='My template',
    cluster={
        'instance_type': 'c5.xlarge',
        'workers_quantity': 1
    },
    code_type="SQL",
    catalog="MyCatalog",
    exec_text="SELECT 1"
)
job1 = tpl.run() # you can simply run it
job2 = tpl.run(exec_text="SELECT 2") # or run it with overriding template values
job3 = tpl.run(cluster={'instance_type': 'c5.large'}) # you can override even part of cluster configuration

jobs = my_workspace.JobClient.list(filters={'template_ids':[tpl.id]}) # you can filter jobs by it's template_id
for job in jobs.wait_for_status(['SUCCEEDED']):
    print(job.name, job.cluster.instance_type, job.get_stdout())

```

You can also run your template on specific cluster e.g:

```python
from bodosdk import BodoWorkspaceClient
from bodosdk.models import JobTemplateFilter

my_workspace = BodoWorkspaceClient()
tpls = my_workspace.JobTemplateClient.list(filters=JobTemplateFilter(names=['My template']))
my_cluster = my_workspace.ClusterClient.create(
    name='My cluster',
    instance_type='c5.large',
    workers_quantity=1
)
print(my_cluster.run_job(template_id=tpls[0].id).wait_for_status(['SUCCEEDED']).get_stdout())
my_cluster.delete()
```

## Statuses

Each resource, Cluster, Job or Workspace has own set of statuses which are following:

### Cluster:

- NEW
- INPROGRESS
- PAUSING
- PAUSED
- STOPPING
- STOPPED
- INITIALIZING
- RUNNING
- FAILED
- TERMINATED

### Job:

- PENDING
- RUNNING
- SUCCEEDED
- FAILED
- CANCELLED
- CANCELLING
- TIMEOUT

### Workspace:

- NEW
- INPROGRESS
- READY
- FAILED
- TERMINATING
- TERMINATED

## Organization client and workspaces:

To manage workspaces you need different keys (generated for organization) and differenct SDK client, for start let's list
all our workspaces:

```python
from bodosdk import BodoOrganizationClient

my_org = BodoOrganizationClient(
    client_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    secret_key="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
) # or BodoOrganizationClient() if `BODO_ORG_CLIENT_ID` and `BODO_ORG_SECRET_KEY` are exported
for w in my_org.list_workspaces():
    print(w.name)
```

You can filter workspaces providing valid filters:

```python
from bodosdk import BodoOrganizationClient
from bodosdk.models import WorkspaceFilter
my_org = BodoOrganizationClient()

for w in my_org.list_workspaces(filters=WorkspaceFilter(statuses=['READY'])):
    print(w.name)
```

You can provide filters as 'WorkspaceFilter' imported from `bodosdk.models` or as a dictionary:

```python
from bodosdk import BodoOrganizationClient
my_org = BodoOrganizationClient()

for w in my_org.list_workspaces(filters={"statuses": ['READY']}):
    print(w.name)
```

### Create new Workspace

```python
from bodosdk import BodoOrganizationClient
my_org = BodoOrganizationClient()
my_workspace = my_org.create_workspace(
    name="SDK test",
    region='us-east-2',
    cloud_config_id="a0d1242c-3091-42de-94d9-548e2ae33b73",
    storage_endpoint_enabled=True
).wait_for_status(['READY'])
assert my_workspace.id == my_org.list_workspaces(filters={"names": ['SDK test'], "statuses": ['READY']})[0].id
my_workspace.delete() # remove workspace at the end
```

### Upgrade workspace infra

In some cases when you have workspace existing for a long time you may want to re-run terraform to
apply fresh changes to workspace infrastructure. You can do it following way:

```python
from bodosdk import BodoOrganizationClient
my_org = BodoOrganizationClient()
my_org.list_workspaces(filters={'ids': ['workspace_to_update1_id', 'workspace_to_update2_id']}).update_infra()
```

# Advanced

In this section we will present more examples of bodosdk usages.

## Workspace created in existing VPC

There is possibility to create workspace on existing infrastructure. The only requirement is that VPC need access to
Internet, either NAT or IGW. It's needed to allow clusters to authorize in external auth service.

```python
from bodosdk import BodoOrganizationClient
my_org = BodoOrganizationClient()
my_workspace = my_org.create_workspace(
    cloud_config_id="cloudConfigId",
    name="My workspace",
    region="us-east-1",
    storage_endpoint_enabled=True,
    vpc_id="existing-vpc-id",
    private_subnets_ids=['subnet1', 'subnet2'],
    public_subnets_ids=['subnet3']
)
my_workspace.wait_for_status(['READY'])
```

## Spot instances, auto AZ

You can create Cluster using spot instances, to reduce cost of usage, downside is that you cannot PAUSE
this kind of cluster, and from time to time cluster may be unavailable (when spot instance is released).

Auto AZ is mechanism which retries cluster creation in another AZ, when in current AZ
there is no enough instances of desired type.

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.create(
    name='Spot cluster',
    instance_type='c5.large',
    workers_quantity=1,
    use_spot_instance=True,
    auto_az=True,
)
```

## Accelerated networking

Accelerated networking set to True enables EFA for instances (raises error when instance type does not support)

You can get list of all supported instances using ClusterClient, it returns list of
InstanceType objects. For AWS field `efa` informs about network acceleration. For Azure it's
`network_acceleration` field.

```python
from bodosdk import BodoWorkspaceClient

my_workspace = BodoWorkspaceClient()

efa_supported_instances = [x for x in my_workspace.ClusterClient.get_instances() if x.efa]

my_cluster = my_workspace.ClusterClient.create(
    name='Spot cluster',
    instance_type=efa_supported_instances[0].name,
    workers_quantity=1,
    accelerated_networking=True
)
```

## Preparing clusters for future use:

In Bodo, Cluster may be in two states responsible for suspended status: `PAUSED` and `STOPPED`.
Spot clusters cannot be `PAUSED`. There are 3 differences between those states: cost, start up time, error rate.

### Costs

`PAUSED` > `STOPPED` - In `PAUSED` state we are paying for disks while in `STOPPED` we don't.

### Start up time

`STOPPED` > `PAUSED` - Bringing back machines in `PAUSED` state is much faster, as those machines are already
defined in cloud

### Error rate

`PAUSED` > `STOPPED` - By error rate we mean situation when number of available instances of descired types is lower
than number of requested workers. As in `PAUSED` state, instance entities are already defined,
and we request for reesources at once it's more likely to happen than in `STOPPED` state,
where asg is maintaining instance creation and it waits for available resources.

Prepare clusters for further use and make them `PAUSED`

```python
from bodosdk import BodoWorkspaceClient
from bodosdk.models import ClusterFilter
my_workspace = BodoWorkspaceClient()

clusters_conf = {
    'Team A': {
        'instance_type': 'c5.2xlarge',
        'workers': 4,
    },
    'Team b': {
        'instance_type': 'c5.xlarge',
        'workers': 2,
    },
    'Team C': {
        'instance_type': 'c5.16xlarge',
        'workers': 2,
    }
}
for owner, conf in clusters_conf.items():
    my_workspace.ClusterClient.create(
        name = f"{owner} Cluster",
        instance_type=conf['instance_type'],
        workers_quantity=conf['workers'],
        custom_tags={'owner': owner, 'purpose': 'test'}
    )

my_workspace.ClusterClient.list(
    filters=ClusterFilter(tags={'purpose': 'test'})
).wait_for_status(
    ['RUNNING', 'INITIALIZING']
).pause().wait_for_status(['PAUSED'])
```

## Use another cluster as a template for cluster definition in job

Let's imagine that you have a cluster (in any state) and you wan't to run job on the same specification, but you don't
want to use previously defined cluster. You can do following

```python
from bodosdk import BodoWorkspaceClient
my_workspace = BodoWorkspaceClient()
my_cluster = my_workspace.ClusterClient.get('existing_cluster')
cluster_conf = my_cluster.dict()
del cluster_conf['uuid']
my_sql_job = my_workspace.JobClient.run_sql_query(sql_query="SELECT 1", catalog="MyCatalog", cluster=cluster_conf)
```

In that case job will create a new cluster with provided configuration, executes and after job is finished
removes cluster.


 #INDEX 

# bodosdk package contents

<a id="module-bodosdk.clients.cluster"></a>

### *class* bodosdk.clients.cluster.ClusterClient(workspace_client: IBodoWorkspaceClient)

Bases: `IClusterClient`

A client for managing cluster operations in a Bodo workspace.

#### \_deprecated_methods

A dictionary of deprecated methods.

* **Type:**
  Dict

#### \_images

A list of available Bodo images.

* **Type:**
  List[IBodoImage]

* **Parameters:**
  **workspace_client** (*IBodoWorkspaceClient*) – The workspace client used for operations.

#### *property* Cluster *: [Cluster](#bodosdk.models.cluster.Cluster)*

Provides access to cluster operations.

* **Returns:**
  An instance of Cluster for cluster operations.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### *property* ClusterList *: [ClusterList](#bodosdk.models.cluster.ClusterList)*

Provides access to listing clusters.

* **Returns:**
  An instance of ClusterListAPIModel for listing clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### connect(catalog: str, cluster_id: str)

#### create(name: str, instance_type: str = None, workers_quantity: int = None, description: str | None = None, bodo_version: str | None = None, auto_stop: int | None = None, auto_pause: int | None = None, auto_upgrade: bool | None = None, accelerated_networking: bool | None = None, auto_az: bool | None = None, use_spot_instance: bool | None = None, aws_deployment_subnet_id: str | None = None, availability_zone: str | None = None, instance_role: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | Dict | None = None, custom_tags: Dict | None = None)

Creates a new cluster with the specified configuration.

* **Parameters:**
  * **name** (*str*) – The name of the cluster.
  * **instance_type** (*str* *,* *optional*) – The type of instance to use for the cluster nodes.
  * **workers_quantity** (*int* *,* *optional*) – The number of worker nodes in the cluster.
  * **description** (*str* *,* *optional*) – A description of the cluster.
  * **bodo_version** (*str* *,* *optional*) – The Bodo version to use for the cluster.
    If not provided, the latest version is used.
  * **auto_stop** (*int* *,* *optional*) – The auto-stop time in minutes for the cluster.
  * **auto_pause** (*int* *,* *optional*) – The auto-pause time in minutes for the cluster.
  * **auto_upgrade** (*bool* *,* *optional*) – Should the cluster be automatically upgraded to
    the latest Bodo version on restart.
  * **accelerated_networking** (*bool* *,* *optional*) – Whether to use accelerated networking.
  * **auto_az** (*bool* *,* *optional*) – Whether to automatically select the availability zone.
  * **use_spot_instance** (*bool* *,* *optional*) – Whether to use spot instances for the cluster.
  * **aws_deployment_subnet_id** (*str* *,* *optional*) – The AWS deployment subnet ID.
  * **availability_zone** (*str* *,* *optional*) – The availability zone for the cluster.
  * **instance_role** ([*InstanceRole*](#bodosdk.models.instance_role.InstanceRole) *|* *Dict* *,* *optional*) – The instance role or a custom role configuration.
  * **custom_tags** (*Dict* *,* *optional*) – Custom tags to assign to the cluster resources.
* **Returns:**
  The created Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### get(id: str)

Retrieves a cluster by its ID.

* **Parameters:**
  **id** (*str*) – The ID of the cluster to retrieve.
* **Returns:**
  The retrieved Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### get_bodo_versions()

Retrieves a list of available Bodo versions.

* **Returns:**
  A list of available Bodo versions.
* **Return type:**
  List[str]

#### get_images()

Retrieves a list of available images.

* **Returns:**
  A list of image IDs available for clusters.
* **Return type:**
  List[str]

#### get_instance_types()

Retrieves list of all supported instance types

* **Returns:**
  List[InstanceType]

#### *property* latest_bodo_version *: str*

Retrieves the latest Bodo version available.

* **Returns:**
  The latest Bodo version.
* **Return type:**
  str

#### list(filters: Dict | [ClusterFilter](#bodosdk.models.cluster.ClusterFilter) | None = None, order: Dict | None = None)

Lists clusters based on the provided filters and order.

* **Parameters:**
  * **filters** (*Dict* *|* [*ClusterFilter*](#bodosdk.models.cluster.ClusterFilter) *,* *optional*) – The filters to apply to the cluster listing.
  * **order** (*Dict* *,* *optional*) – The order in which to list the clusters.
* **Returns:**
  A list of clusters matching the criteria.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### pause(id: str, wait=False)

Pauses the specified cluster.

* **Parameters:**
  **id** (*str*) – The ID of the cluster to pause.
* **Returns:**
  The paused Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### remove(id: str, wait=False)

Removes the specified cluster.

* **Parameters:**
  **id** (*str*) – The ID of the cluster to remove.
* **Returns:**
  None

#### resume(id: str, wait=False)

Resumes the specified paused cluster.

* **Parameters:**
  **id** (*str*) – The ID of the cluster to resume.
* **Returns:**
  The resumed Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### scale(id: str, new_size: int)

Scales the specified cluster to the new size.

* **Parameters:**
  * **id** (*str*) – The ID of the cluster to scale.
  * **new_size** (*int*) – The new size for the cluster in terms of the number of worker nodes.
* **Returns:**
  The scaled Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### start(id: str, wait=False)

Starts the specified stopped cluster.

* **Parameters:**
  **id** (*str*) – The ID of the cluster to start.
* **Returns:**
  The started Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### stop(id: str, wait=False)

Stops the specified cluster.

* **Parameters:**
  **id** (*str*) – The ID of the cluster to stop.
* **Returns:**
  The stopped Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### update(id: str, name: str | None = None, description: str | None = None, auto_stop: int | None = None, auto_pause: int | None = None, workers_quantity: int | None = None, instance_role: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | Dict | None = None, instance_type: str | None = None, bodo_version: str | None = None, auto_az: bool | None = None, availability_zone: str | None = None, custom_tags: Dict | None = None)

Updates the specified cluster with the given configuration.

* **Parameters:**
  * **id** (*str*) – The ID of the cluster to update.
  * **name** (*str* *,* *optional*) – The new name for the cluster.
  * **description** (*str* *,* *optional*) – A new description for the cluster.
  * **auto_stop** (*int* *,* *optional*) – The new auto-stop time in minutes.
  * **auto_pause** (*int* *,* *optional*) – The new auto-pause time in minutes.
  * **workers_quantity** (*int* *,* *optional*) – The new number of worker nodes.
  * **instance_role** ([*InstanceRole*](#bodosdk.models.instance_role.InstanceRole) *|* *Dict* *,* *optional*) – The new instance role or custom role configuration.
  * **instance_type** (*str* *,* *optional*) – The new instance type for the cluster nodes.
  * **bodo_version** (*str* *,* *optional*) – The new Bodo version for the cluster.
  * **auto_az** (*bool* *,* *optional*) – Whether to automatically select the availability zone.
  * **availability_zone** (*str* *,* *optional*) – The new availability zone for the cluster.
  * **custom_tags** (*Dict* *,* *optional*) – New custom tags for the cluster resources.
* **Returns:**
  The updated Cluster object.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

#### wait_for_status(id: str, statuses: List, timeout: int | None = 300, tick: int | None = 30)

Waits for the specified cluster to reach any of the given statuses within the timeout period.

* **Parameters:**
  * **id** (*str*) – The ID of the cluster to monitor.
  * **statuses** (*List*) – The list of statuses to wait for.
  * **timeout** (*int* *,* *optional*) – The timeout period in seconds.
  * **tick** (*int* *,* *optional*) – The interval in seconds between status checks.
* **Returns:**
  The Cluster object if it reaches the desired status within the timeout period.
* **Return type:**
  [Cluster](#bodosdk.models.cluster.Cluster)

<a id="module-bodosdk.clients.instance_role"></a>

### *class* bodosdk.clients.instance_role.InstanceRoleClient(workspace_client: IBodoWorkspaceClient)

Bases: `IInstanceRoleClient`

#### *property* InstanceRole *: [InstanceRole](#bodosdk.models.instance_role.InstanceRole)*

#### *property* InstanceRoleList *: [InstanceRoleList](#bodosdk.models.instance_role.InstanceRoleList)*

#### create(role_arn: str, description: str, name: str = None)

#### delete(id: str)

#### get(id: str)

#### list(filters: Dict | [InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter) | None = None, order: Dict | None = None)

<a id="module-bodosdk.clients.job"></a>

### *class* bodosdk.clients.job.JobClient(workspace_client: IBodoWorkspaceClient)

Bases: `IJobClient`

#### *property* JobRun *: [JobRun](#bodosdk.models.job.JobRun)*

#### *property* JobRunList *: [JobRunList](#bodosdk.models.job.JobRunList)*

#### cancel_job(id: str)

#### cancel_jobs(filters: Dict | [JobFilter](#bodosdk.models.job.JobFilter) | None = None)

#### get(id: str)

#### list(filters: Dict | [JobFilter](#bodosdk.models.job.JobFilter) | None = None, order: Dict | None = None)

#### run(template_id: str = None, cluster: dict | ICluster = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, exec_text: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, name: str = None, catalog: str = None, store_result: bool = None)

#### run_sql_query(template_id: str = None, catalog: str = None, sql_query: str = None, cluster: dict | ICluster = None, name: str = None, args: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, store_result: bool = True)

#### wait_for_status(id: str, statuses: List[str], timeout: int = 3600, tick: int = 30)

<a id="module-bodosdk.clients.job_tpl"></a>

### *class* bodosdk.clients.job_tpl.JobTemplateClient(workspace_client: IBodoWorkspaceClient)

Bases: `IJobTemplateClient`

#### *property* JobTemplate *: [JobTemplate](#bodosdk.models.job.JobTemplate)*

#### *property* JobTemplateList *: [JobTemplateList](#bodosdk.models.job.JobTemplateList)*

#### create(name: str = None, description: str = None, cluster: dict | ICluster = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, exec_text: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, catalog: str = None, store_result: bool = False)

#### get(id: str)

#### list(filters: Dict = None)

#### remove(id: str)

<a id="module-bodosdk.clients.organization"></a>

### *class* bodosdk.clients.organization.BodoOrganizationClient(client_id=None, secret_key=None, api_url='https://api.bodo.ai/api', auth_url='https://auth.bodo.ai', print_logs=False)

Bases: `IBodoOrganizationClient`

#### *property* AwsCloudConfig *: [AwsCloudConfig](#bodosdk.models.cloud_config.AwsCloudConfig)*

#### *property* AzureCloudConfig *: [AzureCloudConfig](#bodosdk.models.cloud_config.AzureCloudConfig)*

#### *property* CloudConfig *: [CloudConfigBase](#bodosdk.models.cloud_config.CloudConfigBase)*

#### *property* CloudConfigList *: [CloudConfigList](#bodosdk.models.cloud_config.CloudConfigList)*

#### *property* Workspace *: [Workspace](#bodosdk.models.workspace.Workspace)*

#### *property* WorkspaceList *: [WorkspaceList](#bodosdk.models.workspace.WorkspaceList)*

#### create_aws_cloud_config(name: str, tf_backend_region: str, role_arn: str | None = None, tf_bucket_name: str | None = None, tf_dynamo_db_table_name: str | None = None, account_id: str | None = None, access_key_id: str | None = None, secret_access_key: str | None = None, custom_tags: dict | None = None)

#### create_azure_cloud_config(name: str, tf_backend_region: str, tenant_id: str, subscription_id: str, resource_group: str, custom_tags: dict | None = None)

#### create_workspace(name: str, region: str, storage_endpoint_enabled: bool, cloud_config_id: str = None, vpc_id: str | None = None, public_subnets_ids: List[str] | None = None, private_subnets_ids: List[str] | None = None, custom_tags: dict | None = None)

#### delete_workspace(id)

#### get_cloud_config(id)

#### get_workspace(id)

#### list_cloud_configs(filters: dict | None = None)

#### list_workspaces(filters: [WorkspaceFilter](#bodosdk.models.workspace.WorkspaceFilter) | dict | None = None)

<a id="module-bodosdk.clients.workspace"></a>

### *class* bodosdk.clients.workspace.BodoWorkspaceClient(client_id=None, secret_key=None, api_url='https://api.bodo.ai/api', auth_url='https://auth.bodo.ai', print_logs=False)

Bases: `IBodoWorkspaceClient`

#### ClusterClient *: IClusterClient*

#### JobClient *: IJobClient*

#### JobTemplateClient *: IJobTemplateClient*

#### *property* workspace_data *: IWorkspace*

#### *property* workspace_id *: str*

<a id="module-bodosdk.models.catalog"></a>

### *class* bodosdk.models.catalog.Catalog(workspace_client: IBodoWorkspaceClient = None, \*, uuid: str | None = None, name: str | None = None, description: str | None = None, catalogType: str | None = None, details: [SnowflakeDetails](#bodosdk.models.catalog.SnowflakeDetails) | dict | None = None)

Bases: `SDKBaseModel`, `ICatalog`

#### delete()

### *class* bodosdk.models.catalog.CatalogFilter(\*, names: List[str] | None = None, ids: List[str] | None = None)

Bases: `SDKBaseModel`, `ICatalogFilter`

#### ids *: List[str] | None*

#### names *: List[str] | None*

### *class* bodosdk.models.catalog.CatalogList(workspace_client: IBodoWorkspaceClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: dict | None = None, filters: dict | [CatalogFilter](#bodosdk.models.catalog.CatalogFilter) | None = None)

Bases: `ICatalogList`, `SDKBaseModel`

#### *class* Config

Bases: `object`

Configuration for Pydantic models.
[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### delete()

#### filters *: dict | [CatalogFilter](#bodosdk.models.catalog.CatalogFilter) | None*

#### order *: dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### total *: int | None*

### *class* bodosdk.models.catalog.SnowflakeDetails(\*, port: int | None = None, db_schema: str | None = None, database: str | None = None, userRole: str | None = None, username: str | None = None, warehouse: str | None = None, accountName: str | None = None, password: str | None = None)

Bases: `SDKBaseModel`

#### account_name *: str | None*

#### database *: str | None*

#### db_schema *: str | None*

#### password *: str | None*

#### port *: int | None*

#### user_role *: str | None*

#### username *: str | None*

#### warehouse *: str | None*

<a id="module-bodosdk.models.cloud_config"></a>

### *class* bodosdk.models.cloud_config.AwsCloudConfig(org_client: IBodoOrganizationClient = None, \*, cloudProvider: str = 'AWS', name: str | None = None, status: str | None = None, organizationUUID: str | None = None, customTags: dict | None = None, uuid: str | UUID | None = None, awsProviderData: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | None = None)

Bases: [`CloudConfigBase`](#bodosdk.models.cloud_config.CloudConfigBase), `IAwsCloudConfig`

#### cloud_provider *: str*

#### data *: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | None*

### *class* bodosdk.models.cloud_config.AwsProviderData(\*, roleArn: str | None = None, tfBucketName: str | None = None, tfDynamoDbTableName: str | None = None, tfBackendRegion: str | None = None, externalId: str | None = None, accountId: str | None = None, accessKeyId: str | None = None, secretAccessKey: str | None = None)

Bases: `SDKBaseModel`, `IAwsProviderData`

#### access_key_id *: str | None*

#### account_id *: str | None*

#### external_id *: str | None*

#### role_arn *: str | None*

#### secret_access_key *: str | None*

#### tf_backend_region *: str | None*

#### tf_bucket_name *: str | None*

#### tf_dynamo_db_table_name *: str | None*

### *class* bodosdk.models.cloud_config.AzureCloudConfig(org_client: IBodoOrganizationClient = None, \*, cloudProvider: str = 'AZURE', name: str | None = None, status: str | None = None, organizationUUID: str | None = None, customTags: dict | None = None, uuid: str | UUID | None = None, azureProviderData: [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None = None)

Bases: [`CloudConfigBase`](#bodosdk.models.cloud_config.CloudConfigBase), `IAzureCloudConfig`

#### cloud_provider *: str*

#### data *: [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None*

### *class* bodosdk.models.cloud_config.AzureProviderData(\*, tfBackendRegion: str | None = None, resourceGroup: str | None = None, subscriptionId: str | None = None, tenantId: str | None = None, tfStorageAccountName: str | None = None, applicationId: str | None = None)

Bases: `SDKBaseModel`, `IAzureProviderData`

#### application_id *: str | None*

#### resource_group *: str | None*

#### subscription_id *: str | None*

#### tenant_id *: str | None*

#### tf_backend_region *: str | None*

#### tf_storage_account_name *: str | None*

### *class* bodosdk.models.cloud_config.CloudConfigBase(org_client: IBodoOrganizationClient = None, \*, cloudProvider: str | None = None, name: str | None = None, status: str | None = None, organizationUUID: str | None = None, customTags: dict | None = None, uuid: str | UUID | None = None, data: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None = None)

Bases: `SDKBaseModel`, `ICloudConfig`

#### cloud_provider *: str | None*

#### custom_tags *: dict | None*

#### data *: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None*

#### delete()

#### *property* id

#### name *: str | None*

#### organization_uuid *: str | None*

#### status *: str | None*

#### uuid *: str | UUID | None*

### *class* bodosdk.models.cloud_config.CloudConfigList(org_client: IBodoOrganizationClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: dict | None = None, filters: dict | None = None)

Bases: `ICloudConfigList`, `SDKBaseModel`

#### *class* Config

Bases: `object`

Configuration for Pydantic models.
[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### delete()

#### filters *: dict | None*

#### order *: dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### total *: int | None*

<a id="module-bodosdk.models.cluster"></a>

### *class* bodosdk.models.cluster.BodoImage(\*, image_id: str, bodo_version: str)

Bases: `SDKBaseModel`

Represents an image configuration for Bodo, encapsulating the image ID and the specific Bodo version.

This class is a data model that holds information about a Bodo environment image.

#### image_id

The unique identifier for the Bodo image.

* **Type:**
  str

#### bodo_version

The version of Bodo used in the image.

* **Type:**
  str

#### bodo_version *: str*

#### image_id *: str*

### *class* bodosdk.models.cluster.Cluster(workspace_client: IBodoWorkspaceClient = None, \*, name: str | None = None, uuid: str | None = None, status: str | None = None, description: str | None = None, instanceType: str | None = None, workersQuantity: int | None = None, autoStop: int | None = None, autoPause: int | None = None, autoUpgrade: bool | None = None, bodoVersion: str | None = None, coresPerWorker: int | None = None, acceleratedNetworking: bool | None = None, createdAt: datetime | None = None, updatedAt: datetime | None = None, isJobDedicated: bool | None = None, autoAZ: bool | None = None, useSpotInstance: bool | None = None, lastKnownActivity: datetime | None = None, inStateSince: datetime | None = None, clusterAgentVersion: str | None = None, clusterInitStatus: str | None = None, clusterHealthStatus: str | None = None, primaryAgentIP: str | None = None, awsDeploymentSubnetId: str | None = None, nodeMetadata: List[[NodeMetadata](#bodosdk.models.cluster.NodeMetadata)] | None = None, availabilityZone: str | None = None, instanceRole: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | None = None, workspace: dict | None = None, autoscalingIdentifier: str | None = None, lastAsgActivityId: str | None = None, nodesIp: List[str] | None = None, customTags: Dict | None = None)

Bases: `SDKBaseModel`, `ICluster`

Represents a cluster in the SDK model, encapsulating various properties and operations
related to a compute cluster.

#### name

The name of the cluster.

* **Type:**
  Optional[str]

#### uuid

The unique identifier of the cluster.

* **Type:**
  Optional[str]

#### status

The current status of the cluster (e.g., ‘RUNNING’, ‘STOPPED’).

* **Type:**
  Optional[str]

#### description

A description of the cluster.

* **Type:**
  Optional[str]

#### instance_type

The type of instances used in the cluster (e.g., ‘c5.large’).

* **Type:**
  Optional[str]

#### workers_quantity

The number of worker nodes in the cluster.

* **Type:**
  Optional[int]

#### auto_stop

The auto-stop configuration in minutes.
The cluster automatically stops when idle for this duration.

* **Type:**
  Optional[int]

#### auto_pause

The auto-pause configuration in minutes.
The cluster automatically pauses when idle for this duration.

* **Type:**
  Optional[int]

#### auto_upgrade

Should the cluster be upgraded on restart.
The cluster is automatically upgraded to the latest Bodo version on restart when True.

* **Type:**
  Optional[bool]

#### bodo_version

The version of Bodo being used in the cluster.

* **Type:**
  Optional[str]

#### cores_per_worker

The number of CPU cores per worker node.

* **Type:**
  Optional[int]

#### accelerated_networking

Whether accelerated networking is enabled.

* **Type:**
  Optional[bool]

#### created_at

The creation timestamp of the cluster.

* **Type:**
  Optional[str]

#### updated_at

The last update timestamp of the cluster.

* **Type:**
  Optional[str]

#### is_job_dedicated

Whether the cluster is dedicated to a specific job.

* **Type:**
  Optional[bool]

#### auto_az

Whether automatic availability zone selection is enabled.

* **Type:**
  Optional[bool]

#### use_spot_instance

Whether spot instances are used for the cluster.

* **Type:**
  Optional[bool]

#### last_known_activity

The last known activity timestamp of the cluster.

* **Type:**
  Optional[str]

#### in_state_since

The timestamp since the cluster has been in its current state.

* **Type:**
  Optional[str]

#### cluster_agent_version

The version of the cluster agent.

* **Type:**
  Optional[str]

#### cluster_init_status

The initialization status of the cluster.

* **Type:**
  Optional[str]

#### cluster_health_status

The health status of the cluster.

* **Type:**
  Optional[str]

#### primary_agent_ip

The IP address of the primary agent in the cluster.

* **Type:**
  Optional[str]

#### aws_deployment_subnet_id

The subnet ID used for deploying AWS resources.

* **Type:**
  Optional[str]

#### node_metadata

Metadata information for each node in the cluster.

* **Type:**
  Optional[List[[NodeMetadata](#bodosdk.models.cluster.NodeMetadata)]]

#### availability_zone

The AWS availability zone in which the cluster is located.

* **Type:**
  Optional[str]

#### instance_role

The IAM role used by instances in the cluster.

* **Type:**
  Optional[[InstanceRole](#bodosdk.models.instance_role.InstanceRole)]

#### workspace

A dictionary containing workspace-related information for the cluster.

* **Type:**
  Optional[dict]

#### autoscaling_identifier

The identifier for autoscaling configuration.

* **Type:**
  Optional[str]

#### last_asg_activity_id

The identifier of the last activity in the autoscaling group.

* **Type:**
  Optional[str]

#### nodes_ip

A list of IP addresses for the nodes in the cluster.

* **Type:**
  Optional[List[str]]

#### accelerated_networking *: bool | None*

#### auto_az *: bool | None*

#### auto_pause *: int | None*

#### auto_stop *: int | None*

#### auto_upgrade *: bool | None*

#### autoscaling_identifier *: str | None*

#### availability_zone *: str | None*

#### aws_deployment_subnet_id *: str | None*

#### bodo_version *: str | None*

#### cancel_jobs()

Cancels all jobs associated with the cluster.

* **Returns:**
  The Cluster instance.

#### cluster_agent_version *: str | None*

#### cluster_health_status *: str | None*

#### cluster_init_status *: str | None*

#### connect(catalog: str)

Establishes a connection to the specified catalog from Cluster.

This method is responsible for creating and returning a new Connection instance based on the provided catalog.

Parameters:
catalog (str): The name of the catalog to which the connection should be established.

Returns:
Connection: An instance of Connection initialized with the specified catalog and the current class instance.

#### cores_per_worker *: int | None*

#### created_at *: datetime | None*

#### custom_tags *: Dict | None*

#### delete(force: bool = False, mark_as_terminated: bool = False, wait: bool = False)

Deletes the cluster, optionally forcing removal or marking as terminated.

* **Parameters:**
  * **force** – If True, forces the deletion of the cluster.
  * **mark_as_terminated** – If True, marks the cluster as terminated instead of deleting.
  * **wait** – If True, waits till cluster will be TERMINATED.
* **Returns:**
  The Cluster instance, potentially updated to reflect its new state.

Handles:
: ResourceNotFound: Silently if the cluster is already deleted or not found.

#### description *: str | None*

#### *property* id *: str*

The UUID of the cluster.

* **Returns:**
  The UUID string of the cluster.

#### in_state_since *: datetime | None*

#### instance_role *: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | None*

#### instance_type *: str | None*

#### is_job_dedicated *: bool | None*

#### last_asg_activity_id *: str | None*

#### last_known_activity *: datetime | None*

#### name *: str | None*

#### node_metadata *: List[[NodeMetadata](#bodosdk.models.cluster.NodeMetadata)] | None*

#### nodes_ip *: List[str] | None*

#### pause(wait: bool = False)

Pauses the cluster if it is running.

* **Parameters:**
  **wait** – If True, waits till cluster will be PAUSED.
* **Returns:**
  The Cluster instance with updated status.
* **Raises:**
  **ConflictException** – If the cluster cannot be paused due to its current status.

#### primary_agent_ip *: str | None*

#### resume(wait: bool = False)

Resumes the cluster if it was paused or stopped.

* **Parameters:**
  **wait** – If True, waits till cluster will be RUNNING.
* **Returns:**
  The Cluster instance with updated status.
* **Raises:**
  **ConflictException** – If the cluster cannot be resumed due to its current status.

#### run_job(template_id: str = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, name: str = None, catalog: str = None, store_result: bool = False)

Submits a batch job for execution using specified configurations and resources.

This method creates and dispatches a job within a computing cluster, allowing for extensive customization of
execution parameters including source data, runtime environment, and failure handling strategies.

* **Parameters:**
  * **template_id** (*str* *,* *optional*) – Identifier for the job template to use.
  * **code_type** (*str* *,* *optional*) – Type of code to execute (e.g., Python, Java).
  * **source** (*Union* *[**dict* *,* *IS3Source* *,* *IGitRepoSource* *,* *IWorkspaceSource* *,* *ITextSource* *]* *,* *optional*) – Source of the code to be executed. Can be specified as a dictionary
    or an instance of one of the predefined source interfaces.
  * **exec_file** (*str* *,* *optional*) – Path to the executable file within the source.
  * **args** (*Union* *[**dict* *,* *str* *]* *,* *optional*) – Arguments to pass to the executable.
  * **parameters.** (*Can be a string* *or* *a dictionary of*) –
  * **env_vars** (*dict* *,* *optional*) – Environment variables to set for the job.
  * **timeout** (*int* *,* *optional*) – Maximum runtime (in seconds) before the job is terminated.
  * **num_retries** (*int* *,* *optional*) – Number of times to retry the job on failure.
  * **delay_between_retries** (*int* *,* *optional*) – Time to wait between retries.
  * **retry_on_timeout** (*bool* *,* *optional*) – Whether to retry the job if it times out.
  * **name** (*str* *,* *optional*) – Name of the job.
  * **catalog** (*str* *,* *optional*) – Catalog to log the job under.
  * **store_result** (*bool* *,* *optional*) – Whether to store on S3 job results or not.
* **Returns:**
  An object representing the submitted job, capable of providing status and results.
* **Return type:**
  IJobRun

#### run_sql_query(template_id: str = None, catalog: str = None, sql_query: str = None, name: str = None, args: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, store_result: bool = False)

> Submits an SQL query for execution on the cluster, returning a job run object.

> This method handles the execution of an SQL query within a defined cluster environment.
> It supports customization of execution parameters such as query arguments,
> job name, execution timeouts, and retry strategies.

> Parameters:
> : template_id (str, optional): Identifier for the job template to use.
>   catalog (str, optional): Catalog under which to log the SQL job.
>   sql_query (str, optional): The SQL query string to be executed.
>   name (str, optional): Descriptive name for the SQL job.
>   args (dict, optional): Dictionary of arguments that are passed to the SQL query.
>   timeout (int, optional): Maximum allowable runtime in seconds before the job is terminated.
>   num_retries (int, optional): Number of times the job will be retried on failure.
>   delay_between_retries (int, optional): Interval in seconds between job retries.
>   retry_on_timeout (bool, optional): Whether to retry the job if it times out.
>   store_result (bool, optional): Whether to store on S3 job results or not.

> Returns:
> : IJobRun: An object representing the status and result of the executed SQL job.

```
`
```

#### start(wait: bool = False)

Starts the cluster.

* **Parameters:**
  **wait** – If True, waits till cluster will be RUNNING.
* **Returns:**
  The Cluster instance with updated status.

#### status *: str | None*

#### stop(wait: bool = False)

Stops the cluster.

* **Parameters:**
  **wait** – If True, waits till cluster will be STOPPED.
* **Returns:**
  The Cluster instance with updated status.

#### update(auto_stop: int | None = None, auto_pause: int | None = None, auto_upgrade: bool | None = None, description: str | None = None, name: str | None = None, workers_quantity: int | None = None, instance_role: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | None = None, instance_type: str | None = None, bodo_version: str | None = None, auto_az: bool | None = None, availability_zone: str | None = None, custom_tags: Dict | None = None)

Updates the cluster’s configuration with the provided values.

* **Parameters:**
  * **auto_stop** – Optional; configures auto-stop feature.
  * **auto_pause** – Optional; configures auto-pause feature.
  * **auto_upgrade** – Optional; enables/disables auto-upgrade on restart.
  * **description** – Optional; updates the cluster’s description.
  * **name** – Optional; updates the cluster’s name.
  * **workers_quantity** – Optional; updates the number of workers.
  * **instance_role** – Optional; updates the instance role.
  * **instance_type** – Optional; updates the instance type.
  * **bodo_version** – Optional; updates the Bodo version.
  * **auto_az** – Optional; enables/disables automatic availability zone selection.
  * **availability_zone** – Optional; sets a specific availability zone.
* **Returns:**
  The updated Cluster instance.

#### updated_at *: datetime | None*

#### use_spot_instance *: bool | None*

#### uuid *: str | None*

#### wait_for_status(statuses: List[str], timeout: int = 600, tick: int = 30)

Waits for the cluster to reach one of the specified states within a given timeout.

* **Parameters:**
  * **statuses** – A list of states to wait for.
  * **timeout** – The maximum time to wait before raising a TimeoutException.
  * **tick** – The interval between checks.
* **Returns:**
  The Cluster instance, once it has reached one of the desired states.
* **Raises:**
  **TimeoutException** – If the cluster does not reach a desired state within the timeout.

#### workers_quantity *: int | None*

#### workspace *: dict | None*

### *class* bodosdk.models.cluster.ClusterFilter(\*, uuids: List[str] | None = None, clusterNames: List[str] | None = None, statues: List[str] | None = None, tags: Dict | None = None)

Bases: `SDKBaseModel`, `IClusterFilter`

Represents a filter used to select clusters based on specific criteria.

This class is used to construct filter criteria for querying clusters by their identifiers,
names, statuses, or tags. It inherits from SDKBaseModel and implements the IClusterFilter interface.

#### ids

Optional list of cluster UUIDs. Default is an empty list.

* **Type:**
  Optional[List[str]]

#### cluster_names

Optional list of cluster names to filter by. Default is an empty list.

* **Type:**
  Optional[List[str]]

#### statuses

Optional list of cluster statuses to filter by. Default is an empty list.

* **Type:**
  Optional[List[str]]

#### tags

Optional dictionary of tags for more fine-grained filtering.

* **Type:**
  Optional[Dict]

### Default is an empty dictionary.

Each attribute supports being set via their field name or by the specified alias in the Field definition.

#### *class* Config

Bases: `object`

Configuration for Pydantic models.
[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### cluster_names *: List[str] | None*

#### ids *: List[str] | None*

#### statuses *: List[str] | None*

#### tags *: Dict | None*

### *class* bodosdk.models.cluster.ClusterList(workspace_client: IBodoWorkspaceClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [ClusterFilter](#bodosdk.models.cluster.ClusterFilter) | dict | None = None)

Bases: `IClusterList`, `SDKBaseModel`

A model representing a list of clusters, providing pagination, filtering, and
operations on clusters such as start, stop, delete, resume, and pause.

#### page

The current page number for pagination, starting from 0.

* **Type:**
  Optional[int]

#### page_size

The number of items to be displayed per page.

* **Type:**
  Optional[int]

#### total

The total number of items available across all pages.

* **Type:**
  Optional[int]

#### order

Ordering information for listing clusters. Defaults to an empty dict.

* **Type:**
  Optional[Dict]

#### filters

Filtering criteria to apply when fetching the cluster list.

* **Type:**
  Optional[[ClusterFilter](#bodosdk.models.cluster.ClusterFilter)]

#### \_clusters

Internal list of cluster objects.

* **Type:**
  List[ICluster]

#### \_index

Internal index to track the current position when iterating through clusters.

* **Type:**
  int

#### *class* Config

Bases: `object`

Configuration for Pydantic models.
[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### cancel_jobs()

Cancels all jobs associated with the clusters.

* **Returns:**
  The ClusterList instance.

#### delete(wait=False)

Deletes each cluster in the list, updating the internal list with the result
of each delete operation. This method effectively attempts to delete all clusters
and returns the updated list.

* **Returns:**
  The current instance of ClusterList after attempting to delete
  : all clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### filters *: [ClusterFilter](#bodosdk.models.cluster.ClusterFilter) | dict | None*

#### order *: Dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### pause(wait=False)

Attempts to pause each running cluster in the list. It handles exceptions gracefully,
updating the list with the status of each cluster following the operation.

* **Returns:**
  The current instance of ClusterList after attempting to pause
  : all clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### refresh()

Refreshes the list of clusters by resetting the pagination and filter settings,
then reloading the first page of clusters. This method effectively resets the
ClusterList instance to its initial state, based on current filters and ordering.

* **Returns:**
  The current instance of ClusterList after reloading the first page
  : of clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### resume(wait=False)

Attempts to resume each paused or stopped cluster in the list. It handles exceptions
gracefully, ensuring the list is updated with the status of each cluster after
the operation.

* **Returns:**
  The current instance of ClusterList after attempting to resume
  : all clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### run_job(template_id: str = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, name: str = None, catalog: str = None, store_result: bool = None)

Executes a job across all clusters managed by the instance.

This method supports multiple source types and configurations for executing jobs,
including retries and custom environment variables.

* **Parameters:**
  * **template_id** (*str* *,* *optional*) – Identifier for the job template to be used.
  * **code_type** (*str* *,* *optional*) – The type of code to execute (e.g., Python, Java).
  * **source** (*Union* *[**dict* *,* *IS3Source* *,* *IGitRepoSource* *,* *IWorkspaceSource* *,* *ITextSource* *]* *,* *optional*) –
  * **retrieved.** (*The source from where the job's code will be*) –
  * **exec_file** (*str* *,* *optional*) – Path to the main executable file within the source.
  * **args** (*Union* *[**dict* *,* *str* *]* *,* *optional*) – Arguments to pass to the job. Can be a dictionary or a
  * **job.** (*string formatted as required by the*) –
  * **env_vars** (*dict* *,* *optional*) – Environment variables to set for the job execution.
  * **timeout** (*int* *,* *optional*) – Maximum time in seconds for the job to run before it is terminated.
  * **num_retries** (*int* *,* *optional*) – Number of times to retry the job on failure.
  * **delay_between_retries** (*int* *,* *optional*) – Time in seconds to wait between retries.
  * **retry_on_timeout** (*bool* *,* *optional*) – Whether to retry the job if it times out.
  * **name** (*str* *,* *optional*) – A name for the job run.
  * **catalog** (*str* *,* *optional*) – Catalog identifier to specify a data catalog for the job.
  * **store_result** (*bool* *,* *optional*) – Whether to store on S3 job results or not.
* **Returns:**
  An object listing the UUIDs of jobs that were successfully initiated.
* **Return type:**
  IJobRunList

Decorators:
: @check_deprecation: Checks if the method or its parameters are deprecated.

#### run_sql_query(template_id: str = None, catalog: str = None, sql_query: str = None, name: str = None, args: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, store_result: bool = None)

Executes an SQL job across all clusters managed by the instance.

This method submits an SQL query for execution, allowing for additional configurations such as retries
and setting execution timeouts.

* **Parameters:**
  * **template_id** (*str* *,* *optional*) – Identifier for the job template to be used.
  * **catalog** (*str* *,* *optional*) – Catalog identifier to specify a data catalog for the SQL job.
  * **sql_query** (*str* *,* *optional*) – The SQL query to execute.
  * **name** (*str* *,* *optional*) – A name for the job run.
  * **args** (*dict* *,* *optional*) – Additional arguments specific to the SQL job.
  * **timeout** (*int* *,* *optional*) – Maximum time in seconds for the job to run before it is terminated.
  * **num_retries** (*int* *,* *optional*) – Number of times to retry the job on failure.
  * **delay_between_retries** (*int* *,* *optional*) – Time in seconds to wait between retries.
  * **retry_on_timeout** (*bool* *,* *optional*) – Whether to retry the job if it times out.
  * **store_result** (*bool* *,* *optional*) – Whether to store on S3 job results or not.
* **Returns:**
  An object listing the UUIDs of SQL jobs that were successfully initiated.
* **Return type:**
  IJobRunList

Decorators:
: @check_deprecation: Checks if the method or its parameters are deprecated.

#### start(wait=False)

Attempts to start each stopped or paused cluster in the list. It handles exceptions
gracefully, ensuring the list reflects the status of each cluster after the operation.

* **Returns:**
  The current instance of ClusterList after attempting to start
  : all clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### stop(wait=False)

Attempts to stop each running or starting cluster in the list. It handles exceptions
gracefully, updating the list with the status of each cluster after the operation.

* **Returns:**
  The current instance of ClusterList after attempting to stop
  : all clusters.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

#### total *: int | None*

#### wait_for_status(statuses: List[str] = None, timeout: int = 600, tick: int = 60)

Waits for each cluster in the list to reach one of the specified statuses, updating
the list with the results. This method polls each cluster’s status until it matches
one of the desired statuses or until the timeout is reached.

* **Parameters:**
  * **statuses** (*List* *[**str* *]* *,* *optional*) – A list of status strings to wait for.
  * **timeout** (*int* *,* *optional*) – The maximum time to wait for each cluster to reach the
    desired status, in seconds.
  * **tick** (*int* *,* *optional*) – The interval between status checks, in seconds.
* **Returns:**
  The current instance of ClusterList after waiting for all clusters
  : to reach one of the specified statuses.
* **Return type:**
  [ClusterList](#bodosdk.models.cluster.ClusterList)

### *class* bodosdk.models.cluster.InstanceType(\*, name: str, vcpus: int, cores: int, memory: int, efa: bool | None = None, acceleratedNetworking: bool | None = None)

Bases: `SDKBaseModel`, `IInstanceType`

Represents the specifications for a type of computing instance.

This class defines a specific configuration of a computing instance,
including its processing power and memory capabilities, as well as optional features related to networking.

#### name

The name or identifier of the instance type.

* **Type:**
  str

#### vcpus

The number of virtual CPUs available in this instance type.

* **Type:**
  int

#### cores

The number of physical cores available in this instance type.

* **Type:**
  int

#### memory

The amount of RAM (in megabytes) available in this instance type.

* **Type:**
  int

#### efa

Indicates whether Elastic Fabric Adapter (EFA) is supported. Defaults to None.

* **Type:**
  Optional[bool]

#### accelerated_networking

Specifies if accelerated networking is enabled.

* **Type:**
  Optional[bool]

### This is mapped to the JSON key 'acceleratedNetworking'. Defaults to None.

#### accelerated_networking *: bool | None*

#### cores *: int*

#### efa *: bool | None*

#### memory *: int*

#### name *: str*

#### vcpus *: int*

### *class* bodosdk.models.cluster.NodeMetadata(\*, privateIP: str | None = None, instanceId: str | None = None)

Bases: `SDKBaseModel`

#### instance_id *: str | None*

#### private_ip *: str | None*

<a id="module-bodosdk.db.connection"></a>

### *class* bodosdk.db.connection.Connection(catalog: str, cluster: ICluster, timeout=3600)

Bases: `object`

#### cursor()

### *class* bodosdk.db.connection.Cursor(catalog: str, cluster: ICluster, timeout: int = 3600)

Bases: `object`

#### execute(query: str, \*\*kwargs)

#### execute_async(query: str, \*\*kwargs)

#### fetchall()

#### fetchmany(size)

#### fetchone()

#### *property* rowcount

#### *property* rownumber

<a id="module-bodosdk.models.job"></a>

### *class* bodosdk.models.job.GitRepoSource(\*, type: str = 'GIT', repoUrl: str, reference: str | None = '', username: str, token: str)

Bases: `SDKBaseModel`

Git repository source definition.

…

#### repo_url

Git repository URL.

* **Type:**
  str

#### reference

Git reference (branch, tag, commit hash). (Default: “”)

* **Type:**
  Optional[str]

#### username

Git username.

* **Type:**
  str

#### token

Git token.

* **Type:**
  str

#### reference *: str | None*

#### repo_url *: str*

#### token *: str*

#### type *: str*

#### username *: str*

### *class* bodosdk.models.job.JobConfig(\*, type: str | None = None, source: [GitRepoSource](#bodosdk.models.job.GitRepoSource) | [WorkspaceSource](#bodosdk.models.job.WorkspaceSource) | [S3Source](#bodosdk.models.job.S3Source) | [TextSource](#bodosdk.models.job.TextSource) | None = None, sourceLocation: str | None = None, sqlQueryText: str | None = None, sqlQueryParameters: dict | None = None, args: dict | str | None = None, retryStrategy: [RetryStrategy](#bodosdk.models.job.RetryStrategy) | None = None, timeout: int | None = None, envVars: dict | None = None, catalog: str | None = None, storeResult: bool | None = False)

Bases: `SDKBaseModel`, `IJobConfig`

Configures details for executing a job, including the execution source, file location, and execution parameters.

#### type

The type of job: PYTHON, SQL, IPYNB

* **Type:**
  Optional[str]

#### source

* **Type:**
  Optional[Union[[GitRepoSource](#bodosdk.models.job.GitRepoSource), [WorkspaceSource](#bodosdk.models.job.WorkspaceSource), [S3Source](#bodosdk.models.job.S3Source), [TextSource](#bodosdk.models.job.TextSource)]]

### The source from which the job is configured or executed.

#### exec_file

The location of the file to execute.

* **Type:**
  Optional[str]

#### exec_text

The text containing script/code/sql to execute, valid for TextSource

* **Type:**
  Optional[str]

#### sql_query_parameters

Parameters to substitute within an SQL query.

* **Type:**
  Optional[dict]

#### args

Additional arguments required for job execution.

* **Type:**
  Optional[Union[dict, str]]

### Can be a dictionary or string.

#### retry_strategy

* **Type:**
  Optional[[RetryStrategy](#bodosdk.models.job.RetryStrategy)]

### Configuration for the job retry strategy.

#### timeout

The maximum time (in seconds) allowed for the job to run before it times out.

* **Type:**
  Optional[int]

#### env_vars

Environment variables to be set for the job run.

* **Type:**
  Optional[dict]

#### catalog

The catalog associated with the job, if applicable.

* **Type:**
  Optional[str]

#### args *: dict | str | None*

#### catalog *: str | None*

#### env_vars *: dict | None*

#### exec_file *: str | None*

#### exec_text *: str | None*

#### retry_strategy *: [RetryStrategy](#bodosdk.models.job.RetryStrategy) | None*

#### source *: [GitRepoSource](#bodosdk.models.job.GitRepoSource) | [WorkspaceSource](#bodosdk.models.job.WorkspaceSource) | [S3Source](#bodosdk.models.job.S3Source) | [TextSource](#bodosdk.models.job.TextSource) | None*

#### sql_query_parameters *: dict | None*

#### store_result *: bool | None*

#### timeout *: int | None*

#### type *: str | None*

### *class* bodosdk.models.job.JobFilter(\*, ids: List[str | UUID] | None = None, template_ids: List[str | UUID] | None = None, cluster_ids: List[str | UUID] | None = None, types: List[str] | None = None, statuses: List[str] | None = None, started_at: datetime | None = None, finished_at: datetime | None = None)

Bases: `SDKBaseModel`

Provides filtering options for querying job-related data.

#### ids

A list of job IDs to filter by.

* **Type:**
  Optional[List[Union[str, UUID]]]

#### template_ids

A list of job template IDs to filter by.

* **Type:**
  Optional[List[Union[str, UUID]]]

#### cluster_ids

A list of cluster IDs to filter jobs by.

* **Type:**
  Optional[List[Union[str, UUID]]]

#### types

A list of job types to filter by.

* **Type:**
  Optional[List[str]]

#### statuses

A list of job statuses to filter by.

* **Type:**
  Optional[List[str]]

#### started_at

A datetime value to filter jobs that started after it.

* **Type:**
  Optional[datetime]

#### finished_at

A datetime value to filter jobs that finished before it.

* **Type:**
  Optional[datetime]

#### cluster_ids *: List[str | UUID] | None*

#### finished_at *: datetime | None*

#### ids *: List[str | UUID] | None*

#### started_at *: datetime | None*

#### statuses *: List[str] | None*

#### template_ids *: List[str | UUID] | None*

#### types *: List[str] | None*

### *class* bodosdk.models.job.JobRun(workspace_client: IBodoWorkspaceClient = None, \*, uuid: str | None = None, name: str | None = None, type: str | None = 'BATCH', submittedAt: datetime | None = None, finishedAt: datetime | None = None, lastHealthCheck: datetime | None = None, lastKnownActivity: datetime | None = None, status: str | None = None, reason: str | None = None, num_retries_used: int | None = (FieldInfo(default=0, alias='numRetriesUsed', alias_priority=2, extra={}),), tag: List | None = None, clusterUUID: str | None = None, cluster: 'Cluster' | None, clusterConfig: 'Cluster' | None = None, config: [JobConfig](#bodosdk.models.job.JobConfig) | None = None, jobTemplateUUID: str | None = None, submitter: str | None = None, stats: dict | None = None)

Bases: `SDKBaseModel`, `IJobRun`

Details a specific instance of a job run, including status and configuration details.

#### uuid

Unique identifier for the job run.

* **Type:**
  Optional[str]

#### name

Name of the job run.

* **Type:**
  Optional[str]

#### type

Type of job run, defaults to ‘BATCH’ if not specified.

* **Type:**
  Optional[str]

#### submitted_at

Timestamp when the job was submitted.

* **Type:**
  Optional[datetime]

#### finished_at

Timestamp when the job finished running.

* **Type:**
  Optional[datetime]

#### last_health_check

Timestamp of the last health check performed.

* **Type:**
  Optional[datetime]

#### last_known_activity

Timestamp of the last known activity of this job.

* **Type:**
  Optional[datetime]

#### status

Current status of the job run.

* **Type:**
  Optional[str]

#### reason

Reason for the job’s current status, particularly if there’s an error or failure.

* **Type:**
  Optional[str]

#### num_retries_used

The number of retries that have been used for this job run. Defaults to 0.

* **Type:**
  Optional[int]

#### tags

Tags associated with the job run. Default is an empty list.

* **Type:**
  Optional[List]

#### cluster_uuid

UUID of the cluster on which the job is running.

* **Type:**
  Optional[str]

#### cluster

The cluster object associated with the job run.

* **Type:**
  Optional[[Cluster](#bodosdk.models.cluster.Cluster)]

#### cluster_config

Configuration of the cluster used for this job run.

* **Type:**
  Optional[[Cluster](#bodosdk.models.cluster.Cluster)]

#### config

Job configuration details used for this run.

* **Type:**
  Optional[[JobConfig](#bodosdk.models.job.JobConfig)]

#### job_template_id

UUID of the template from which this job was created.

* **Type:**
  Optional[str]

#### submitter

The identifier of the user who submitted the job.

* **Type:**
  Optional[str]

#### stats

Statistical data about the job run.

* **Type:**
  Optional[dict]

#### cancel()

Cancels the job associated with this instance and updates its state based on the response from the job API.

This method sends a cancellation request for the job identified by its UUID to the job API,
handles the response to update the job’s attributes, and resets its modified state.

* **Returns:**
  The job instance, updated with the latest state after the cancellation attempt.
* **Return type:**
  [JobRun](#bodosdk.models.job.JobRun)
* **Raises:**
  **APIException** – If the cancellation request fails or returns an error response.

Decorators:
: @check_deprecation: Checks if the method or its parameters are deprecated.

#### cluster *: 'Cluster' | None*

#### cluster_config *: 'Cluster' | None*

#### cluster_id *: str | None*

#### config *: [JobConfig](#bodosdk.models.job.JobConfig) | None*

#### finished_at *: datetime | None*

#### get_logs_urls()

#### get_result_urls()

#### get_stderr()

#### get_stdout()

#### *property* id *: str*

#### job_template_id *: str | None*

#### last_health_check *: datetime | None*

#### last_known_activity *: datetime | None*

#### name *: str | None*

#### num_retries_used *: int | None*

#### reason *: str | None*

#### stats *: dict | None*

#### status *: str | None*

#### submitted_at *: datetime | None*

#### submitter *: str | None*

#### tags *: List | None*

#### type *: str | None*

#### uuid *: str | None*

#### wait_for_status(statuses: List[str], timeout: int = 3600, tick: int = 30)

Waits for the job to reach one of the specified statuses, polling at regular intervals.

This method checks the current status of the job at regular intervals defined by the tick parameter.
If the job reaches one of the specified statuses before the timeout, it returns the job instance.
If the timeout is exceeded, it raises a TimeoutException.

* **Parameters:**
  * **statuses** (*list* *or* *tuple*) – A list or tuple of statuses that the job is expected to reach.
  * **timeout** (*int* *,* *optional*) – The maximum time in seconds to wait for the job to reach one of
  * **seconds.** (*the specified statuses. Defaults to 600*) –
  * **tick** (*int* *,* *optional*) – The time interval in seconds between status checks. Defaults to 30 seconds.
* **Returns:**
  The job instance if one of the specified statuses is reached within the timeout period.
* **Return type:**
  [JobRun](#bodosdk.models.job.JobRun)
* **Raises:**
  * **TimeoutException** – If the job does not reach one of the specified statuses within
  * **the specified timeout period.** –

Decorators:
: @check_deprecation: Checks if the method or its parameters are deprecated.

### *class* bodosdk.models.job.JobRunList(workspace_client: IBodoWorkspaceClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [JobFilter](#bodosdk.models.job.JobFilter) | None = None)

Bases: `IJobRunList`, `SDKBaseModel`

Represents a paginated list of job runs, including metadata and filtering capabilities.

#### page

The current page number in the paginated list. Defaults to 0.

* **Type:**
  Optional[int]

#### page_size

The number of job runs to display per page. Defaults to 10.

* **Type:**
  Optional[int]

#### total

The total number of job runs available.

* **Type:**
  Optional[int]

#### order

A dictionary specifying the order in which job runs are sorted.

* **Type:**
  Optional[Dict]

#### filters

A JobFilter object used to apply filtering on the list of job runs.

* **Type:**
  Optional[[JobFilter](#bodosdk.models.job.JobFilter)]

#### cancel()

Cancels all jobs in the list.

This method iterates through each job in the current list (represented by instances of this class),
and calls the cancel method on each job to attempt their cancellation.
After attempting to cancel all jobs, it returns the updated list of jobs.

* **Returns:**
  The list instance, potentially with updated states of the individual jobs
  if the cancellation requests were successful.
* **Return type:**
  [JobRunList](#bodosdk.models.job.JobRunList)

#### NOTE
This method relies on the individual cancel() method of the job objects within the list.
If any job cancellation fails, it could raise an exception depending on
the implementation of the individual cancel() method.

#### *property* clusters

#### filters *: [JobFilter](#bodosdk.models.job.JobFilter) | None*

#### order *: Dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### refresh()

Refreshes the list of jobs by clearing the current elements and reloading the next page of job data.

This method resets the internal state of the list, including the pagination index and the elements themselves.
It then loads the next page of data from the underlying data source to repopulate the list.
The list is temporarily set to mutable during this process to allow updates, and then set back to immutable
once the refresh is complete.

* **Returns:**
  The refreshed job run list instance, with elements reloaded from the next available page.
* **Return type:**
  [JobRunList](#bodosdk.models.job.JobRunList)

#### NOTE
This method assumes that the list supports pagination and that the underlying data source provides
the mechanism to load additional pages of data.

#### total *: int | None*

#### wait_for_status(statuses: List[str], timeout: int = 3600, tick: int = 30)

Waits for each job in the list to reach one of the specified statuses, polling each at regular intervals.

This method iterates over each job within the list, checking at intervals (defined by tick) to see
if the job has reached one of the desired statuses specified in statuses.
If a job reaches the desired status within the timeout period, the method continues to the next job.
If the timeout is reached without the job reaching the desired status, a TimeoutException is raised.

* **Parameters:**
  * **statuses** (*list* *or* *tuple*) – A list or tuple of statuses that each job is expected to reach.
  * **timeout** (*int* *,* *optional*) – The maximum time in seconds to wait for each job to reach one of
  * **seconds.** (*Defaults to 30*) –
  * **tick** (*int* *,* *optional*) – The time interval in seconds between status checks for each job.
  * **seconds.** –
* **Returns:**
  The job run list instance, after attempting to wait for all jobs to reach the desired statuses.
* **Return type:**
  [JobRunList](#bodosdk.models.job.JobRunList)
* **Raises:**
  * **TimeoutException** – If any job does not reach one of the specified statuses within the specified
  * **timeout period****,** **including details** **of** **the job's UUID and its current status.** –

Decorators:
: @check_deprecation: Checks if the method or its parameters are deprecated.

#### NOTE
This method individually tracks the timeout for each job, resetting the start time at the beginning
of the wait for each job in the list.

### *class* bodosdk.models.job.JobRunLogsResponse(\*, stderrUrl: str = None, stdoutUrl: str = None, expirationDate: str = None)

Bases: `SDKBaseModel`, `IJobRunLogsResponse`

Represents the response object containing URLs for accessing logs related to a job run.

#### stderr_location_url

The URL to access the standard error logs of the job run.

* **Type:**
  str

#### stdout_location_url

The URL to access the standard output logs of the job run.

* **Type:**
  str

#### expiration_date

The date when the log URLs will expire and no longer be accessible.

* **Type:**
  str

#### expiration_date *: str*

#### stderr_location_url *: str*

#### stdout_location_url *: str*

### *class* bodosdk.models.job.JobTemplate(workspace_client: IBodoWorkspaceClient = None, \*, uuid: str | None = None, name: str | None = None, jobRuns: List[[JobRun](#bodosdk.models.job.JobRun)] = None, description: str | None = None, createdBy: str | None = None, config: [JobConfig](#bodosdk.models.job.JobConfig) | None = None, clusterConfig: 'Cluster' | None = None)

Bases: `SDKBaseModel`, `IJobTemplate`

Represents a template for creating and managing jobs within an SDK environment, e
ncapsulating common job configurations.

#### uuid

The unique identifier for the job template.

* **Type:**
  Optional[str]

#### name

The name of the job template.

* **Type:**
  Optional[str]

#### job_runs

A list of job runs associated with this template. Default is an empty list

* **Type:**
  List[[JobRun](#bodosdk.models.job.JobRun)]

### if none are specified.

#### description

A brief description of the job template.

* **Type:**
  Optional[str]

#### created_by

The identifier of the user who created the job template.

* **Type:**
  Optional[str]

#### config

The job configuration specifics for this template.

* **Type:**
  Optional[[JobConfig](#bodosdk.models.job.JobConfig)]

#### cluster_config

Configuration details of the cluster on which the jobs will run. D

* **Type:**
  Optional[[Cluster](#bodosdk.models.cluster.Cluster)]

### efault is None.

#### cluster_config *: [Cluster](#bodosdk.models.cluster.Cluster) | None*

#### config *: [JobConfig](#bodosdk.models.job.JobConfig) | None*

#### created_by *: str | None*

#### delete()

#### description *: str | None*

#### *property* id

#### job_runs *: List[[JobRun](#bodosdk.models.job.JobRun)]*

#### name *: str | None*

#### run(name: str = None, cluster: dict | ICluster = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, exec_text: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, catalog: str = None, store_result: bool = False)

#### uuid *: str | None*

### *class* bodosdk.models.job.JobTemplateFilter(\*, ids: List[str] | None = None, names: List[str] | None = None, tags: dict | None = None)

Bases: `SDKBaseModel`, `IJobTemplateFilter`

Class representig filters for JobTemplateList

#### ids

returns list matching given ids

* **Type:**
  List[str] | None

#### names

returns list matching given names

* **Type:**
  List[str] | None

#### tags

returns list matching given tags

* **Type:**
  dict | None

#### ids *: List[str] | None*

#### names *: List[str] | None*

#### tags *: dict | None*

### *class* bodosdk.models.job.JobTemplateList(workspace_client: IBodoWorkspaceClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [JobTemplateFilter](#bodosdk.models.job.JobTemplateFilter) | None = None)

Bases: `IJobTemplateList`, `SDKBaseModel`

Represents a list of JobTemplates, providing pagination and filtering capabilities.

#### page

The current page number in the list of Job Templates. Defaults to 0.

* **Type:**
  Optional[int]

#### page_size

The number of Job Templates to display per page. Defaults to 10.

* **Type:**
  Optional[int]

#### total

The total number of Job Templates available.

* **Type:**
  Optional[int]

#### order

A dictionary specifying the order in which Job Templates are sorted.

* **Type:**
  Optional[Dict]

#### filters

A filter object used to filter the Job Templates listed.

* **Type:**
  Optional[[InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter)]

#### delete()

Deletes all job definitions in the list.

This method iterates over each job definition contained within the list and calls its individual
delete method. This action attempts to remove each job definition from the underlying storage
or management system.

#### NOTE
The behavior and success of the deletion process depend on the implementation of the individual
delete method of each job definition. This may include handling exceptions and ensuring that each
job definition is properly removed. If an error occurs during the deletion of any job definition,
it may raise an exception, which should be handled by the caller or within the individual delete methods.

#### filters *: [JobTemplateFilter](#bodosdk.models.job.JobTemplateFilter) | None*

#### order *: Dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### refresh()

Refreshes the list of job templates by clearing the current elements and reloading the next page of job data.

This method resets the internal state of the list, including the pagination index and the elements themselves.
It then loads the next page of data from the underlying data source to repopulate the list.
The list is temporarily set to mutable during this process to allow updates, and then set back to
immutable once the refresh is complete.

* **Returns:**
  The refreshed job template list instance, with elements reloaded from
  the next available page.
* **Return type:**
  [JobTemplateList](#bodosdk.models.job.JobTemplateList)

#### NOTE
This method assumes that the list supports pagination and that the underlying data source provides
the mechanism to load additional pages of data.

#### run(instance_type: str = None, workers_quantity: int = None, bodo_version: str = None)

)
Executes all job definitions in the list with specified configurations and aggregates their run IDs.

This method iterates over each job definition in the list and invokes the run method on each, passing
the specified configuration parameters such as instance type, the quantity of workers, and the Bodo version.
It collects the IDs of the resulting job runs and returns a consolidated list of these job runs.

* **Parameters:**
  * **instance_type** (*str* *,* *optional*) – The type of instance to use for the jobs.
  * **specifications.** (*This may specify the hardware*) –
  * **workers_quantity** (*int* *,* *optional*) – The number of worker instances to deploy for the jobs.
  * **bodo_version** (*str* *,* *optional*) – The specific version of Bodo to use for executing the jobs.
* **Returns:**
  An interface to the list of job runs created by executing the job definitions,
  allowing further operations like monitoring and management.
* **Return type:**
  IJobRunList

#### NOTE
The run method for each job definition must correctly handle the passed configurations.
If any job execution fails, the behavior and handling of errors should be considered based
on the implementation of each job definition’s run method.

#### total *: int | None*

### *class* bodosdk.models.job.RetryStrategy(\*, numRetries: int = 0, delayBetweenRetries: int = 1, retryOnTimeout: bool = False)

Bases: `SDKBaseModel`

A Pydantic model that defines the retry strategy for a job or a task. It specifies how many retries
should be attempted,
the delay between retries, and whether to retry on timeout.

#### num_retries

The number of times to retry the job after a failure. Defaults to 0, meaning no

* **Type:**
  int

### retries by default.

#### delay_between_retries

The delay between consecutive retries, expressed in minutes. Defaults to 1 minute.

* **Type:**
  int

#### retry_on_timeout

A flag to determine if the job should be retried upon timing out. Defaults to False,

* **Type:**
  bool

### indicating no retry on timeout.

Each field is represented with a default value and an alias that matches the corresponding key in JSON or
other serialized forms.

#### delay_between_retries *: int*

#### num_retries *: int*

#### retry_on_timeout *: bool*

### *class* bodosdk.models.job.S3Source(\*, type: str = 'S3', bucketPath: str, bucketRegion: str)

Bases: `SDKBaseModel`

S3 source definition.

…

#### bucket_path

S3 bucket path.

* **Type:**
  str

#### bucket_region

S3 bucket region.

* **Type:**
  str

#### bucket_path *: str*

#### bucket_region *: str*

#### type *: str*

### *class* bodosdk.models.job.TextSource(\*, type: str = 'SQL')

Bases: `SDKBaseModel`

Represents a specific type of source where the job configuration can originate from a text source.

#### type

Specifies the type of source

* **Type:**
  str

#### type *: str*

### *class* bodosdk.models.job.WorkspaceSource(\*, type: str = 'WORKSPACE', path: str)

Bases: `SDKBaseModel`

Workspace source definition.

…

#### path

Workspace path.

* **Type:**
  str

#### path *: str*

#### type *: str*

<a id="module-bodosdk.models.common"></a>

### *class* bodosdk.models.common.AWSNetworkData(\*, region: str | None = None, storageEndpoint: bool | None = None, vpcId: str | None = None, publicSubnetsIds: List[str] | None = None, privateSubnetsIds: List[str] | None = None, policyArns: List[str] | None = None)

Bases: [`NetworkData`](#bodosdk.models.common.NetworkData)

Extends the NetworkData class to include specific properties for AWS networking.

#### vpc_id

The ID of the AWS Virtual Private Cloud (VPC) where workspace should be created.

* **Type:**
  Optional[str]

#### public_subnets_ids

List of IDs for the public subnets within the AWS VPC.

* **Type:**
  Optional[List[str]]

#### private_subnets_ids

List of IDs for the private subnets within the AWS VPC.

* **Type:**
  Optional[List[str]]

#### policies_arn

List of AWS Resource Names (ARNs) for the policies applied to the network.

* **Type:**
  Optional[List[str]]

#### policies_arn *: List[str] | None*

#### private_subnets_ids *: List[str] | None*

#### public_subnets_ids *: List[str] | None*

#### vpc_id *: str | None*

### *class* bodosdk.models.common.NetworkData(\*, region: str | None = None, storageEndpoint: bool | None = None)

Bases: `SDKBaseModel`

A base model for network-related data within an SDK context.

#### region

The geographic region where the network is located.

* **Type:**
  Optional[str]

#### storage_endpoint

Indicates whether a storage endpoint is enabled.

* **Type:**
  Optional[bool]

#### region *: str | None*

#### storage_endpoint *: bool | None*

<a id="module-bodosdk.models.instance_role"></a>

### *class* bodosdk.models.instance_role.InstanceRole(workspace_client: IBodoWorkspaceClient = None, \*, uuid: str | None = None, name: str | None = None, description: str | None = None, roleArn: str | None = None, status: str | None = None)

Bases: `SDKBaseModel`, `IInstanceRole`

#### delete()

Removes instance role from workspace

* **Returns:**
  None

#### description *: str | None*

#### *property* id

#### name *: str | None*

#### role_arn *: str | None*

#### status *: str | None*

#### uuid *: str | None*

### *class* bodosdk.models.instance_role.InstanceRoleFilter(\*, uuids: List[str] | None = None, names: List[str] | None = None, roleArns: List[str] | None = None)

Bases: `SDKBaseModel`, `IInstanceRoleFilter`

Class representing filters for InstanceRoleList

#### ids

returns list matching given ids

* **Type:**
  List[str] | None

#### names

returns list matching given names

* **Type:**
  List[str] | None

#### role_arns

returns list matching giver arns

* **Type:**
  List[str] | None

#### *class* Config

Bases: `object`

Configuration for Pydantic models.
[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### ids *: List[str] | None*

#### names *: List[str] | None*

#### role_arns *: List[str] | None*

### *class* bodosdk.models.instance_role.InstanceRoleList(workspace_client: IBodoWorkspaceClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter) | None = None)

Bases: `IInstanceRoleList`, `SDKBaseModel`

Represents a list of instance roles within an SDK context, providing pagination and filtering capabilities.

#### page

The current page number in the list of instance roles. Defaults to 0.

* **Type:**
  Optional[int]

#### page_size

The number of instance roles to display per page. Defaults to 10.

* **Type:**
  Optional[int]

#### total

The total number of instance roles available.

* **Type:**
  Optional[int]

#### order

A dictionary specifying the order in which instance roles are sorted.

* **Type:**
  Optional[Dict]

#### filters

A filter object used to filter the instance roles listed.

* **Type:**
  Optional[[InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter)]

#### *class* Config

Bases: `object`

Configuration for Pydantic models.
[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### delete()

#### filters *: [InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter) | None*

#### order *: Dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### total *: int | None*

<a id="module-bodosdk.models.workspace"></a>

### *class* bodosdk.models.workspace.Workspace(org_client: IBodoOrganizationClient = None, \*, name: str | None = None, uuid: str | UUID | None = None, status: str | None = None, organizationUUID: str | UUID | None = None, networkData: [NetworkData](#bodosdk.models.common.NetworkData) | [AWSNetworkData](#bodosdk.models.common.AWSNetworkData) | None = None, createdBy: str | None = None, notebookAutoDeployEnabled: bool | None = None, assignedAt: datetime | None = None, customTags: Dict[str, Any] | None = None, jupyterLastActivity: datetime | None = None, jupyterIsActive: bool | None = False, cloudConfig: [CloudConfigBase](#bodosdk.models.cloud_config.CloudConfigBase) | [AwsCloudConfig](#bodosdk.models.cloud_config.AwsCloudConfig) | [AzureCloudConfig](#bodosdk.models.cloud_config.AzureCloudConfig) | None = None)

Bases: `SDKBaseModel`, `IWorkspace`

#### assigned_at *: datetime | None*

#### cloud_config *: [CloudConfigBase](#bodosdk.models.cloud_config.CloudConfigBase) | [AwsCloudConfig](#bodosdk.models.cloud_config.AwsCloudConfig) | [AzureCloudConfig](#bodosdk.models.cloud_config.AzureCloudConfig) | None*

#### created_by *: str | None*

#### custom_tags *: Dict[str, Any] | None*

#### delete()

Deletes the workspace from the API based on its UUID and updates the instance’s properties
with the response from the deletion API call.

* **Returns:**
  The Workspace instance after deletion, updated with the API’s response data.

#### *property* id

#### jupyter_is_active *: bool | None*

#### jupyter_last_activity *: datetime | None*

#### name *: str | None*

#### network_data *: [NetworkData](#bodosdk.models.common.NetworkData) | [AWSNetworkData](#bodosdk.models.common.AWSNetworkData) | None*

#### notebook_auto_deploy_enabled *: bool | None*

#### organization_uuid *: str | UUID | None*

#### status *: str | None*

#### update_infra()

#### uuid *: str | UUID | None*

#### wait_for_status(statuses, timeout=600, tick=30)

Waits for the workspace to reach one of the specified states within a given timeout.

* **Parameters:**
  * **statuses** – A list of states to wait for.
  * **timeout** – The maximum time to wait before raising a TimeoutException.
  * **tick** – The interval between checks.
* **Returns:**
  The workspace instance, once it has reached one of the desired states.
* **Raises:**
  **TimeoutException** – If the workspace does not reach a desired state within the timeout.

### *class* bodosdk.models.workspace.WorkspaceFilter(\*, uuids: List[str] | None = None, names: List[str] | None = None, statuses: List[str] | None = None, organizationUUIDs: List[str] | None = None)

Bases: `SDKBaseModel`, `IWorkspaceFilter`

#### *class* Config

Bases: `object`

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### ids *: List[str] | None*

#### names *: List[str] | None*

#### organization_uuids *: List[str] | None*

#### statuses *: List[str] | None*

### *class* bodosdk.models.workspace.WorkspaceList(org_client: IBodoOrganizationClient = None, \*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [WorkspaceFilter](#bodosdk.models.workspace.WorkspaceFilter) | None = None)

Bases: `IWorkspaceList`, `SDKBaseModel`

#### *class* Config

Bases: `object`

#### allow_population_by_field_name *= True*

#### extra *= 'forbid'*

#### delete()

Deletes the workspaces present on the list

* **Returns:**
  WorkspaceListAPIModel

#### filters *: [WorkspaceFilter](#bodosdk.models.workspace.WorkspaceFilter) | None*

#### order *: Dict | None*

#### page *: int | None*

#### page_size *: int | None*

#### total *: int | None*

#### update_infra()

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Bodo-inc/bodo-sdk",
    "name": "bodosdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Bodo, Inc.",
    "author_email": "noreply@bodo.ai",
    "download_url": "https://files.pythonhosted.org/packages/54/cc/af7e5abc165148a38acb005af43d959564c24024adf9b18719096426c623/bodosdk-2.0.1.tar.gz",
    "platform": null,
    "description": "# Bodo Platform SDK\n\nBodo Platform SDK is a Python library that provides a simple way to interact with the Bodo Platform API. It allows you\nto create, manage, and monitor resources such as clusters, jobs, and workspaces.\n\n## Getting Started\n\n### Installation\n\n```shell\npip install bodosdk\n```\n\n### Creating workspace client\n\nFirst you need to access your workspace in `https://platform.bodo.ai/` and create an _API Token_ in the Bodo Platform\nfor\nBodo SDK authentication.\n\nNavigate to _API Tokens_ in the Admin Console to generate a token.\nCopy and save the token's _Client ID_ and _Secret Key_ and use them to define a client (`BodoClient`) that can interact\nwith the Bodo Platform.\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient(\n    client_id=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n    secret_key=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n)\n```\n\nAlternatively, set `BODO_CLIENT_ID` and `BODO_SECRET_KEY` environment variables\nto avoid requiring keys:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\n```\n\nTo get workspace data, you can access the `workspace_data` attribute of the client:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nprint(my_workspace.workspace_data)\n```\n\n### Additional Configuration Options for `BodoClient`\n\n- `print_logs`: defaults to False. All API requests and responses are printed to the console if set to True.\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient(print_logs=True)\n```\n\n### Create first cluster\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.create(\n    name='My first cluster',\n    instance_type='c5.large',\n    workers_quantity=1\n)\n```\n\nAbove example creates a simple one node cluster, with latest bodo version available and returns cluster object.\nPlatform will create cluster in your workspace.\n\n### Waiting for status\n\nTo wait till cluster will be ready for interaction you can call\nmethod `wait_for_status`\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.create(\n    name='My first cluster',\n    instance_type='c5.large',\n    workers_quantity=1\n)\nmy_cluster.wait_for_status(['RUNNING'])\n```\n\nThis method will wait until any of provided statuses will occur or `FAILED` status will be set in case of some failure.\nCheck your workspace on `https://platform.bodo.ai/` and you will see your cluster, you can use Notebook to connect with\nit.\n\n### Updating Cluster\n\nNow let's update our cluster, on `RUNNING` cluster you can update `name`, `description`, `auto_pause`, `auto_stop`\nand `workers_quantity`(this will trigger scaling) only:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.create(\n    name='My first cluster',\n    instance_type='c5.large',\n    workers_quantity=1\n)\nmy_cluster.wait_for_status(['RUNNING'])\nmy_cluster.update(\n    description='My description',\n    name=\"My updated cluster\",\n    auto_pause=15,\n    auto_stop=30\n)\n```\n\nAll other modifcations like `instance_type`, `bodo_version` etc need `STOPPED` cluster\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.get(\"cluster_id\")\nif my_cluster.status != 'STOPPED':\n    my_cluster.stop(wait=True)\nmy_cluster.update(instance_type='c5.2xlarge', workers_quantity=2)\n```\n\n### Create First Job\n\nOn running cluster you can schedule a job in very simple way:\nFirst on `https://platform.bodo.ai` navigate to notebook in your workspace and\ncreate following `test.py` file in your main directory:\n\n```python\nimport pandas as pd\nimport numpy as np\nimport bodo\nimport time\n\nNUM_GROUPS = 30\nNUM_ROWS = 20_000_000\n\ndf = pd.DataFrame({\n    \"A\": np.arange(NUM_ROWS) % NUM_GROUPS,\n    \"B\": np.arange(NUM_ROWS)\n})\ndf.to_parquet(\"my_data.pq\")\ntime.sleep(1) # wait till file will be available on all nodes\n@bodo.jit(cache=True)\ndef computation():\n    t1 = time.time()\n    df = pd.read_parquet(\"my_data.pq\")\n    df1 = df[df.B > 4].A.sum()\n    print(\"Execution time:\", time.time() - t1)\n    return df1\n\nresult = computation()\nprint(result)\n```\n\nthen define job on cluster through SDK, wait till `SUCCEEDED` and check logs\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.get(\"cluster_id\")\nmy_job = my_cluster.run_job(\n    code_type='PYTHON',\n    source={'type': 'WORKSPACE', 'path': '/'},\n    exec_file='test.py'\n)\nprint(my_job.wait_for_status(['SUCCEEDED']).get_stdout())\n```\n\nYou can use almost same confiuration to run SQL file, all you need is to define your `test.sql` file and Catalog `https://platform.bodo.ai`:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.get(\"cluster_id\")\nmy_job = my_cluster.run_job(\n    code_type='SQL',\n    source={'type': 'WORKSPACE', 'path': '/'},\n    exec_file='test.sql',\n    catalog=\"MyCatalog\"\n)\nprint(my_job.wait_for_status(['SUCCEEDED']).get_stdout())\n\n```\n\n### Cluster List and executing jobs on it's elements\n\nNow let's try to run same job on different clusters:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\nimport random\n\nmy_workspace = BodoWorkspaceClient()\n\nrandom_val = random.random() # just to avoid conflicts on name\nclusters_conf = [('c5.large', 8), ('c5.xlarge',4), ('c5.2xlarge',2)]\nfor  i, conf in enumerate(clusters_conf):\n    my_workspace.ClusterClient.create(\n        name=f'Test {i}',\n        instance_type=conf[0],\n        workers_quantity=conf[1],\n        custom_tags={'test_tag': f'perf_test{random_val}'} # let's add tag to easy filter our clusters\n    )\n# get list by tag\nclusters = my_workspace.ClusterClient.list(filters={\n    'tags': {'test_tag': f'perf_test{random_val}'}\n})\n# run same job 3 times, once per each cluster\njobs = clusters.run_job(\n    code_type='PYTHON',\n    source={'type': 'WORKSPACE', 'path': '/'},\n    exec_file='test.py'\n)\n#wait for jobs to finish and print results\nfor job in jobs.wait_for_status(['SUCCEEDED']):\n    print(job.name, job.cluster.name)\n    print(job.get_stdout())\n#remove our clusters\njobs.clusters.delete() # or clusters.delete()\n```\n\n### Execute SQL query\n\nYou can also execute SQL queries by passing just query text like following:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_sql_job = my_workspace.JobClient.run_sql_query(sql_query=\"SELECT 1\", catalog=\"MyCatalog\", cluster={\n    \"name\": 'Temporary cluster',\n    \"instance_type\": 'c5.large',\n    \"workers_quantity\": 1\n})\nprint(my_sql_job.wait_for_status(['SUCCEEDED']).get_stdout())\n```\n\nIn above case, when you provide cluster configuration but not existing cluster it will be terminated as soon\nas SQL job will finish.\n\nIf you want to execute sql job on existing cluster just use `run_sql_query` on cluster:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.create(\n    name='My cluster',\n    instance_type='c5.large',\n    workers_quantity=1\n)\nmy_sql_job = my_cluster.run_sql_query(sql_query=\"SELECT 1\", catalog=\"MyCatalog\")\nprint(my_sql_job.wait_for_status(['SUCCEEDED']).get_stdout())\n```\n\n### Connector\n\nYou can also execute SQL queries using connector for cluster:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.create(\n    name='My cluster',\n    instance_type='c5.large',\n    workers_quantity=1\n)\nconnection = my_cluster.connect('MyCatalog') # or connection = my_workspace.ClusterClient.connect('MyCatalog', 'cluster_id')\nprint(connection.cursor().execute(\"SELECT 1\").fetchone())\nmy_cluster.delete()\n```\n\n### Job Templates\n\nAgainst defining jobs from scratch you can create a template for your jobs, and then easily run them, e.g.:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\ntpl = my_workspace.JobTemplateClient.create(\n    name='My template',\n    cluster={\n        'instance_type': 'c5.xlarge',\n        'workers_quantity': 1\n    },\n    code_type=\"SQL\",\n    catalog=\"MyCatalog\",\n    exec_text=\"SELECT 1\"\n)\njob1 = tpl.run() # you can simply run it\njob2 = tpl.run(exec_text=\"SELECT 2\") # or run it with overriding template values\njob3 = tpl.run(cluster={'instance_type': 'c5.large'}) # you can override even part of cluster configuration\n\njobs = my_workspace.JobClient.list(filters={'template_ids':[tpl.id]}) # you can filter jobs by it's template_id\nfor job in jobs.wait_for_status(['SUCCEEDED']):\n    print(job.name, job.cluster.instance_type, job.get_stdout())\n\n```\n\nYou can also run your template on specific cluster e.g:\n\n```python\nfrom bodosdk import BodoWorkspaceClient\nfrom bodosdk.models import JobTemplateFilter\n\nmy_workspace = BodoWorkspaceClient()\ntpls = my_workspace.JobTemplateClient.list(filters=JobTemplateFilter(names=['My template']))\nmy_cluster = my_workspace.ClusterClient.create(\n    name='My cluster',\n    instance_type='c5.large',\n    workers_quantity=1\n)\nprint(my_cluster.run_job(template_id=tpls[0].id).wait_for_status(['SUCCEEDED']).get_stdout())\nmy_cluster.delete()\n```\n\n## Statuses\n\nEach resource, Cluster, Job or Workspace has own set of statuses which are following:\n\n### Cluster:\n\n- NEW\n- INPROGRESS\n- PAUSING\n- PAUSED\n- STOPPING\n- STOPPED\n- INITIALIZING\n- RUNNING\n- FAILED\n- TERMINATED\n\n### Job:\n\n- PENDING\n- RUNNING\n- SUCCEEDED\n- FAILED\n- CANCELLED\n- CANCELLING\n- TIMEOUT\n\n### Workspace:\n\n- NEW\n- INPROGRESS\n- READY\n- FAILED\n- TERMINATING\n- TERMINATED\n\n## Organization client and workspaces:\n\nTo manage workspaces you need different keys (generated for organization) and differenct SDK client, for start let's list\nall our workspaces:\n\n```python\nfrom bodosdk import BodoOrganizationClient\n\nmy_org = BodoOrganizationClient(\n    client_id=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n    secret_key=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\",\n) # or BodoOrganizationClient() if `BODO_ORG_CLIENT_ID` and `BODO_ORG_SECRET_KEY` are exported\nfor w in my_org.list_workspaces():\n    print(w.name)\n```\n\nYou can filter workspaces providing valid filters:\n\n```python\nfrom bodosdk import BodoOrganizationClient\nfrom bodosdk.models import WorkspaceFilter\nmy_org = BodoOrganizationClient()\n\nfor w in my_org.list_workspaces(filters=WorkspaceFilter(statuses=['READY'])):\n    print(w.name)\n```\n\nYou can provide filters as 'WorkspaceFilter' imported from `bodosdk.models` or as a dictionary:\n\n```python\nfrom bodosdk import BodoOrganizationClient\nmy_org = BodoOrganizationClient()\n\nfor w in my_org.list_workspaces(filters={\"statuses\": ['READY']}):\n    print(w.name)\n```\n\n### Create new Workspace\n\n```python\nfrom bodosdk import BodoOrganizationClient\nmy_org = BodoOrganizationClient()\nmy_workspace = my_org.create_workspace(\n    name=\"SDK test\",\n    region='us-east-2',\n    cloud_config_id=\"a0d1242c-3091-42de-94d9-548e2ae33b73\",\n    storage_endpoint_enabled=True\n).wait_for_status(['READY'])\nassert my_workspace.id == my_org.list_workspaces(filters={\"names\": ['SDK test'], \"statuses\": ['READY']})[0].id\nmy_workspace.delete() # remove workspace at the end\n```\n\n### Upgrade workspace infra\n\nIn some cases when you have workspace existing for a long time you may want to re-run terraform to\napply fresh changes to workspace infrastructure. You can do it following way:\n\n```python\nfrom bodosdk import BodoOrganizationClient\nmy_org = BodoOrganizationClient()\nmy_org.list_workspaces(filters={'ids': ['workspace_to_update1_id', 'workspace_to_update2_id']}).update_infra()\n```\n\n# Advanced\n\nIn this section we will present more examples of bodosdk usages.\n\n## Workspace created in existing VPC\n\nThere is possibility to create workspace on existing infrastructure. The only requirement is that VPC need access to\nInternet, either NAT or IGW. It's needed to allow clusters to authorize in external auth service.\n\n```python\nfrom bodosdk import BodoOrganizationClient\nmy_org = BodoOrganizationClient()\nmy_workspace = my_org.create_workspace(\n    cloud_config_id=\"cloudConfigId\",\n    name=\"My workspace\",\n    region=\"us-east-1\",\n    storage_endpoint_enabled=True,\n    vpc_id=\"existing-vpc-id\",\n    private_subnets_ids=['subnet1', 'subnet2'],\n    public_subnets_ids=['subnet3']\n)\nmy_workspace.wait_for_status(['READY'])\n```\n\n## Spot instances, auto AZ\n\nYou can create Cluster using spot instances, to reduce cost of usage, downside is that you cannot PAUSE\nthis kind of cluster, and from time to time cluster may be unavailable (when spot instance is released).\n\nAuto AZ is mechanism which retries cluster creation in another AZ, when in current AZ\nthere is no enough instances of desired type.\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.create(\n    name='Spot cluster',\n    instance_type='c5.large',\n    workers_quantity=1,\n    use_spot_instance=True,\n    auto_az=True,\n)\n```\n\n## Accelerated networking\n\nAccelerated networking set to True enables EFA for instances (raises error when instance type does not support)\n\nYou can get list of all supported instances using ClusterClient, it returns list of\nInstanceType objects. For AWS field `efa` informs about network acceleration. For Azure it's\n`network_acceleration` field.\n\n```python\nfrom bodosdk import BodoWorkspaceClient\n\nmy_workspace = BodoWorkspaceClient()\n\nefa_supported_instances = [x for x in my_workspace.ClusterClient.get_instances() if x.efa]\n\nmy_cluster = my_workspace.ClusterClient.create(\n    name='Spot cluster',\n    instance_type=efa_supported_instances[0].name,\n    workers_quantity=1,\n    accelerated_networking=True\n)\n```\n\n## Preparing clusters for future use:\n\nIn Bodo, Cluster may be in two states responsible for suspended status: `PAUSED` and `STOPPED`.\nSpot clusters cannot be `PAUSED`. There are 3 differences between those states: cost, start up time, error rate.\n\n### Costs\n\n`PAUSED` > `STOPPED` - In `PAUSED` state we are paying for disks while in `STOPPED` we don't.\n\n### Start up time\n\n`STOPPED` > `PAUSED` - Bringing back machines in `PAUSED` state is much faster, as those machines are already\ndefined in cloud\n\n### Error rate\n\n`PAUSED` > `STOPPED` - By error rate we mean situation when number of available instances of descired types is lower\nthan number of requested workers. As in `PAUSED` state, instance entities are already defined,\nand we request for reesources at once it's more likely to happen than in `STOPPED` state,\nwhere asg is maintaining instance creation and it waits for available resources.\n\nPrepare clusters for further use and make them `PAUSED`\n\n```python\nfrom bodosdk import BodoWorkspaceClient\nfrom bodosdk.models import ClusterFilter\nmy_workspace = BodoWorkspaceClient()\n\nclusters_conf = {\n    'Team A': {\n        'instance_type': 'c5.2xlarge',\n        'workers': 4,\n    },\n    'Team b': {\n        'instance_type': 'c5.xlarge',\n        'workers': 2,\n    },\n    'Team C': {\n        'instance_type': 'c5.16xlarge',\n        'workers': 2,\n    }\n}\nfor owner, conf in clusters_conf.items():\n    my_workspace.ClusterClient.create(\n        name = f\"{owner} Cluster\",\n        instance_type=conf['instance_type'],\n        workers_quantity=conf['workers'],\n        custom_tags={'owner': owner, 'purpose': 'test'}\n    )\n\nmy_workspace.ClusterClient.list(\n    filters=ClusterFilter(tags={'purpose': 'test'})\n).wait_for_status(\n    ['RUNNING', 'INITIALIZING']\n).pause().wait_for_status(['PAUSED'])\n```\n\n## Use another cluster as a template for cluster definition in job\n\nLet's imagine that you have a cluster (in any state) and you wan't to run job on the same specification, but you don't\nwant to use previously defined cluster. You can do following\n\n```python\nfrom bodosdk import BodoWorkspaceClient\nmy_workspace = BodoWorkspaceClient()\nmy_cluster = my_workspace.ClusterClient.get('existing_cluster')\ncluster_conf = my_cluster.dict()\ndel cluster_conf['uuid']\nmy_sql_job = my_workspace.JobClient.run_sql_query(sql_query=\"SELECT 1\", catalog=\"MyCatalog\", cluster=cluster_conf)\n```\n\nIn that case job will create a new cluster with provided configuration, executes and after job is finished\nremoves cluster.\n\n\n #INDEX \n\n# bodosdk package contents\n\n<a id=\"module-bodosdk.clients.cluster\"></a>\n\n### *class* bodosdk.clients.cluster.ClusterClient(workspace_client: IBodoWorkspaceClient)\n\nBases: `IClusterClient`\n\nA client for managing cluster operations in a Bodo workspace.\n\n#### \\_deprecated_methods\n\nA dictionary of deprecated methods.\n\n* **Type:**\n  Dict\n\n#### \\_images\n\nA list of available Bodo images.\n\n* **Type:**\n  List[IBodoImage]\n\n* **Parameters:**\n  **workspace_client** (*IBodoWorkspaceClient*) \u2013 The workspace client used for operations.\n\n#### *property* Cluster *: [Cluster](#bodosdk.models.cluster.Cluster)*\n\nProvides access to cluster operations.\n\n* **Returns:**\n  An instance of Cluster for cluster operations.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### *property* ClusterList *: [ClusterList](#bodosdk.models.cluster.ClusterList)*\n\nProvides access to listing clusters.\n\n* **Returns:**\n  An instance of ClusterListAPIModel for listing clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### connect(catalog: str, cluster_id: str)\n\n#### create(name: str, instance_type: str = None, workers_quantity: int = None, description: str | None = None, bodo_version: str | None = None, auto_stop: int | None = None, auto_pause: int | None = None, auto_upgrade: bool | None = None, accelerated_networking: bool | None = None, auto_az: bool | None = None, use_spot_instance: bool | None = None, aws_deployment_subnet_id: str | None = None, availability_zone: str | None = None, instance_role: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | Dict | None = None, custom_tags: Dict | None = None)\n\nCreates a new cluster with the specified configuration.\n\n* **Parameters:**\n  * **name** (*str*) \u2013 The name of the cluster.\n  * **instance_type** (*str* *,* *optional*) \u2013 The type of instance to use for the cluster nodes.\n  * **workers_quantity** (*int* *,* *optional*) \u2013 The number of worker nodes in the cluster.\n  * **description** (*str* *,* *optional*) \u2013 A description of the cluster.\n  * **bodo_version** (*str* *,* *optional*) \u2013 The Bodo version to use for the cluster.\n    If not provided, the latest version is used.\n  * **auto_stop** (*int* *,* *optional*) \u2013 The auto-stop time in minutes for the cluster.\n  * **auto_pause** (*int* *,* *optional*) \u2013 The auto-pause time in minutes for the cluster.\n  * **auto_upgrade** (*bool* *,* *optional*) \u2013 Should the cluster be automatically upgraded to\n    the latest Bodo version on restart.\n  * **accelerated_networking** (*bool* *,* *optional*) \u2013 Whether to use accelerated networking.\n  * **auto_az** (*bool* *,* *optional*) \u2013 Whether to automatically select the availability zone.\n  * **use_spot_instance** (*bool* *,* *optional*) \u2013 Whether to use spot instances for the cluster.\n  * **aws_deployment_subnet_id** (*str* *,* *optional*) \u2013 The AWS deployment subnet ID.\n  * **availability_zone** (*str* *,* *optional*) \u2013 The availability zone for the cluster.\n  * **instance_role** ([*InstanceRole*](#bodosdk.models.instance_role.InstanceRole) *|* *Dict* *,* *optional*) \u2013 The instance role or a custom role configuration.\n  * **custom_tags** (*Dict* *,* *optional*) \u2013 Custom tags to assign to the cluster resources.\n* **Returns:**\n  The created Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### get(id: str)\n\nRetrieves a cluster by its ID.\n\n* **Parameters:**\n  **id** (*str*) \u2013 The ID of the cluster to retrieve.\n* **Returns:**\n  The retrieved Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### get_bodo_versions()\n\nRetrieves a list of available Bodo versions.\n\n* **Returns:**\n  A list of available Bodo versions.\n* **Return type:**\n  List[str]\n\n#### get_images()\n\nRetrieves a list of available images.\n\n* **Returns:**\n  A list of image IDs available for clusters.\n* **Return type:**\n  List[str]\n\n#### get_instance_types()\n\nRetrieves list of all supported instance types\n\n* **Returns:**\n  List[InstanceType]\n\n#### *property* latest_bodo_version *: str*\n\nRetrieves the latest Bodo version available.\n\n* **Returns:**\n  The latest Bodo version.\n* **Return type:**\n  str\n\n#### list(filters: Dict | [ClusterFilter](#bodosdk.models.cluster.ClusterFilter) | None = None, order: Dict | None = None)\n\nLists clusters based on the provided filters and order.\n\n* **Parameters:**\n  * **filters** (*Dict* *|* [*ClusterFilter*](#bodosdk.models.cluster.ClusterFilter) *,* *optional*) \u2013 The filters to apply to the cluster listing.\n  * **order** (*Dict* *,* *optional*) \u2013 The order in which to list the clusters.\n* **Returns:**\n  A list of clusters matching the criteria.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### pause(id: str, wait=False)\n\nPauses the specified cluster.\n\n* **Parameters:**\n  **id** (*str*) \u2013 The ID of the cluster to pause.\n* **Returns:**\n  The paused Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### remove(id: str, wait=False)\n\nRemoves the specified cluster.\n\n* **Parameters:**\n  **id** (*str*) \u2013 The ID of the cluster to remove.\n* **Returns:**\n  None\n\n#### resume(id: str, wait=False)\n\nResumes the specified paused cluster.\n\n* **Parameters:**\n  **id** (*str*) \u2013 The ID of the cluster to resume.\n* **Returns:**\n  The resumed Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### scale(id: str, new_size: int)\n\nScales the specified cluster to the new size.\n\n* **Parameters:**\n  * **id** (*str*) \u2013 The ID of the cluster to scale.\n  * **new_size** (*int*) \u2013 The new size for the cluster in terms of the number of worker nodes.\n* **Returns:**\n  The scaled Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### start(id: str, wait=False)\n\nStarts the specified stopped cluster.\n\n* **Parameters:**\n  **id** (*str*) \u2013 The ID of the cluster to start.\n* **Returns:**\n  The started Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### stop(id: str, wait=False)\n\nStops the specified cluster.\n\n* **Parameters:**\n  **id** (*str*) \u2013 The ID of the cluster to stop.\n* **Returns:**\n  The stopped Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### update(id: str, name: str | None = None, description: str | None = None, auto_stop: int | None = None, auto_pause: int | None = None, workers_quantity: int | None = None, instance_role: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | Dict | None = None, instance_type: str | None = None, bodo_version: str | None = None, auto_az: bool | None = None, availability_zone: str | None = None, custom_tags: Dict | None = None)\n\nUpdates the specified cluster with the given configuration.\n\n* **Parameters:**\n  * **id** (*str*) \u2013 The ID of the cluster to update.\n  * **name** (*str* *,* *optional*) \u2013 The new name for the cluster.\n  * **description** (*str* *,* *optional*) \u2013 A new description for the cluster.\n  * **auto_stop** (*int* *,* *optional*) \u2013 The new auto-stop time in minutes.\n  * **auto_pause** (*int* *,* *optional*) \u2013 The new auto-pause time in minutes.\n  * **workers_quantity** (*int* *,* *optional*) \u2013 The new number of worker nodes.\n  * **instance_role** ([*InstanceRole*](#bodosdk.models.instance_role.InstanceRole) *|* *Dict* *,* *optional*) \u2013 The new instance role or custom role configuration.\n  * **instance_type** (*str* *,* *optional*) \u2013 The new instance type for the cluster nodes.\n  * **bodo_version** (*str* *,* *optional*) \u2013 The new Bodo version for the cluster.\n  * **auto_az** (*bool* *,* *optional*) \u2013 Whether to automatically select the availability zone.\n  * **availability_zone** (*str* *,* *optional*) \u2013 The new availability zone for the cluster.\n  * **custom_tags** (*Dict* *,* *optional*) \u2013 New custom tags for the cluster resources.\n* **Returns:**\n  The updated Cluster object.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n#### wait_for_status(id: str, statuses: List, timeout: int | None = 300, tick: int | None = 30)\n\nWaits for the specified cluster to reach any of the given statuses within the timeout period.\n\n* **Parameters:**\n  * **id** (*str*) \u2013 The ID of the cluster to monitor.\n  * **statuses** (*List*) \u2013 The list of statuses to wait for.\n  * **timeout** (*int* *,* *optional*) \u2013 The timeout period in seconds.\n  * **tick** (*int* *,* *optional*) \u2013 The interval in seconds between status checks.\n* **Returns:**\n  The Cluster object if it reaches the desired status within the timeout period.\n* **Return type:**\n  [Cluster](#bodosdk.models.cluster.Cluster)\n\n<a id=\"module-bodosdk.clients.instance_role\"></a>\n\n### *class* bodosdk.clients.instance_role.InstanceRoleClient(workspace_client: IBodoWorkspaceClient)\n\nBases: `IInstanceRoleClient`\n\n#### *property* InstanceRole *: [InstanceRole](#bodosdk.models.instance_role.InstanceRole)*\n\n#### *property* InstanceRoleList *: [InstanceRoleList](#bodosdk.models.instance_role.InstanceRoleList)*\n\n#### create(role_arn: str, description: str, name: str = None)\n\n#### delete(id: str)\n\n#### get(id: str)\n\n#### list(filters: Dict | [InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter) | None = None, order: Dict | None = None)\n\n<a id=\"module-bodosdk.clients.job\"></a>\n\n### *class* bodosdk.clients.job.JobClient(workspace_client: IBodoWorkspaceClient)\n\nBases: `IJobClient`\n\n#### *property* JobRun *: [JobRun](#bodosdk.models.job.JobRun)*\n\n#### *property* JobRunList *: [JobRunList](#bodosdk.models.job.JobRunList)*\n\n#### cancel_job(id: str)\n\n#### cancel_jobs(filters: Dict | [JobFilter](#bodosdk.models.job.JobFilter) | None = None)\n\n#### get(id: str)\n\n#### list(filters: Dict | [JobFilter](#bodosdk.models.job.JobFilter) | None = None, order: Dict | None = None)\n\n#### run(template_id: str = None, cluster: dict | ICluster = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, exec_text: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, name: str = None, catalog: str = None, store_result: bool = None)\n\n#### run_sql_query(template_id: str = None, catalog: str = None, sql_query: str = None, cluster: dict | ICluster = None, name: str = None, args: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, store_result: bool = True)\n\n#### wait_for_status(id: str, statuses: List[str], timeout: int = 3600, tick: int = 30)\n\n<a id=\"module-bodosdk.clients.job_tpl\"></a>\n\n### *class* bodosdk.clients.job_tpl.JobTemplateClient(workspace_client: IBodoWorkspaceClient)\n\nBases: `IJobTemplateClient`\n\n#### *property* JobTemplate *: [JobTemplate](#bodosdk.models.job.JobTemplate)*\n\n#### *property* JobTemplateList *: [JobTemplateList](#bodosdk.models.job.JobTemplateList)*\n\n#### create(name: str = None, description: str = None, cluster: dict | ICluster = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, exec_text: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, catalog: str = None, store_result: bool = False)\n\n#### get(id: str)\n\n#### list(filters: Dict = None)\n\n#### remove(id: str)\n\n<a id=\"module-bodosdk.clients.organization\"></a>\n\n### *class* bodosdk.clients.organization.BodoOrganizationClient(client_id=None, secret_key=None, api_url='https://api.bodo.ai/api', auth_url='https://auth.bodo.ai', print_logs=False)\n\nBases: `IBodoOrganizationClient`\n\n#### *property* AwsCloudConfig *: [AwsCloudConfig](#bodosdk.models.cloud_config.AwsCloudConfig)*\n\n#### *property* AzureCloudConfig *: [AzureCloudConfig](#bodosdk.models.cloud_config.AzureCloudConfig)*\n\n#### *property* CloudConfig *: [CloudConfigBase](#bodosdk.models.cloud_config.CloudConfigBase)*\n\n#### *property* CloudConfigList *: [CloudConfigList](#bodosdk.models.cloud_config.CloudConfigList)*\n\n#### *property* Workspace *: [Workspace](#bodosdk.models.workspace.Workspace)*\n\n#### *property* WorkspaceList *: [WorkspaceList](#bodosdk.models.workspace.WorkspaceList)*\n\n#### create_aws_cloud_config(name: str, tf_backend_region: str, role_arn: str | None = None, tf_bucket_name: str | None = None, tf_dynamo_db_table_name: str | None = None, account_id: str | None = None, access_key_id: str | None = None, secret_access_key: str | None = None, custom_tags: dict | None = None)\n\n#### create_azure_cloud_config(name: str, tf_backend_region: str, tenant_id: str, subscription_id: str, resource_group: str, custom_tags: dict | None = None)\n\n#### create_workspace(name: str, region: str, storage_endpoint_enabled: bool, cloud_config_id: str = None, vpc_id: str | None = None, public_subnets_ids: List[str] | None = None, private_subnets_ids: List[str] | None = None, custom_tags: dict | None = None)\n\n#### delete_workspace(id)\n\n#### get_cloud_config(id)\n\n#### get_workspace(id)\n\n#### list_cloud_configs(filters: dict | None = None)\n\n#### list_workspaces(filters: [WorkspaceFilter](#bodosdk.models.workspace.WorkspaceFilter) | dict | None = None)\n\n<a id=\"module-bodosdk.clients.workspace\"></a>\n\n### *class* bodosdk.clients.workspace.BodoWorkspaceClient(client_id=None, secret_key=None, api_url='https://api.bodo.ai/api', auth_url='https://auth.bodo.ai', print_logs=False)\n\nBases: `IBodoWorkspaceClient`\n\n#### ClusterClient *: IClusterClient*\n\n#### JobClient *: IJobClient*\n\n#### JobTemplateClient *: IJobTemplateClient*\n\n#### *property* workspace_data *: IWorkspace*\n\n#### *property* workspace_id *: str*\n\n<a id=\"module-bodosdk.models.catalog\"></a>\n\n### *class* bodosdk.models.catalog.Catalog(workspace_client: IBodoWorkspaceClient = None, \\*, uuid: str | None = None, name: str | None = None, description: str | None = None, catalogType: str | None = None, details: [SnowflakeDetails](#bodosdk.models.catalog.SnowflakeDetails) | dict | None = None)\n\nBases: `SDKBaseModel`, `ICatalog`\n\n#### delete()\n\n### *class* bodosdk.models.catalog.CatalogFilter(\\*, names: List[str] | None = None, ids: List[str] | None = None)\n\nBases: `SDKBaseModel`, `ICatalogFilter`\n\n#### ids *: List[str] | None*\n\n#### names *: List[str] | None*\n\n### *class* bodosdk.models.catalog.CatalogList(workspace_client: IBodoWorkspaceClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: dict | None = None, filters: dict | [CatalogFilter](#bodosdk.models.catalog.CatalogFilter) | None = None)\n\nBases: `ICatalogList`, `SDKBaseModel`\n\n#### *class* Config\n\nBases: `object`\n\nConfiguration for Pydantic models.\n[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### delete()\n\n#### filters *: dict | [CatalogFilter](#bodosdk.models.catalog.CatalogFilter) | None*\n\n#### order *: dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### total *: int | None*\n\n### *class* bodosdk.models.catalog.SnowflakeDetails(\\*, port: int | None = None, db_schema: str | None = None, database: str | None = None, userRole: str | None = None, username: str | None = None, warehouse: str | None = None, accountName: str | None = None, password: str | None = None)\n\nBases: `SDKBaseModel`\n\n#### account_name *: str | None*\n\n#### database *: str | None*\n\n#### db_schema *: str | None*\n\n#### password *: str | None*\n\n#### port *: int | None*\n\n#### user_role *: str | None*\n\n#### username *: str | None*\n\n#### warehouse *: str | None*\n\n<a id=\"module-bodosdk.models.cloud_config\"></a>\n\n### *class* bodosdk.models.cloud_config.AwsCloudConfig(org_client: IBodoOrganizationClient = None, \\*, cloudProvider: str = 'AWS', name: str | None = None, status: str | None = None, organizationUUID: str | None = None, customTags: dict | None = None, uuid: str | UUID | None = None, awsProviderData: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | None = None)\n\nBases: [`CloudConfigBase`](#bodosdk.models.cloud_config.CloudConfigBase), `IAwsCloudConfig`\n\n#### cloud_provider *: str*\n\n#### data *: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | None*\n\n### *class* bodosdk.models.cloud_config.AwsProviderData(\\*, roleArn: str | None = None, tfBucketName: str | None = None, tfDynamoDbTableName: str | None = None, tfBackendRegion: str | None = None, externalId: str | None = None, accountId: str | None = None, accessKeyId: str | None = None, secretAccessKey: str | None = None)\n\nBases: `SDKBaseModel`, `IAwsProviderData`\n\n#### access_key_id *: str | None*\n\n#### account_id *: str | None*\n\n#### external_id *: str | None*\n\n#### role_arn *: str | None*\n\n#### secret_access_key *: str | None*\n\n#### tf_backend_region *: str | None*\n\n#### tf_bucket_name *: str | None*\n\n#### tf_dynamo_db_table_name *: str | None*\n\n### *class* bodosdk.models.cloud_config.AzureCloudConfig(org_client: IBodoOrganizationClient = None, \\*, cloudProvider: str = 'AZURE', name: str | None = None, status: str | None = None, organizationUUID: str | None = None, customTags: dict | None = None, uuid: str | UUID | None = None, azureProviderData: [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None = None)\n\nBases: [`CloudConfigBase`](#bodosdk.models.cloud_config.CloudConfigBase), `IAzureCloudConfig`\n\n#### cloud_provider *: str*\n\n#### data *: [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None*\n\n### *class* bodosdk.models.cloud_config.AzureProviderData(\\*, tfBackendRegion: str | None = None, resourceGroup: str | None = None, subscriptionId: str | None = None, tenantId: str | None = None, tfStorageAccountName: str | None = None, applicationId: str | None = None)\n\nBases: `SDKBaseModel`, `IAzureProviderData`\n\n#### application_id *: str | None*\n\n#### resource_group *: str | None*\n\n#### subscription_id *: str | None*\n\n#### tenant_id *: str | None*\n\n#### tf_backend_region *: str | None*\n\n#### tf_storage_account_name *: str | None*\n\n### *class* bodosdk.models.cloud_config.CloudConfigBase(org_client: IBodoOrganizationClient = None, \\*, cloudProvider: str | None = None, name: str | None = None, status: str | None = None, organizationUUID: str | None = None, customTags: dict | None = None, uuid: str | UUID | None = None, data: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None = None)\n\nBases: `SDKBaseModel`, `ICloudConfig`\n\n#### cloud_provider *: str | None*\n\n#### custom_tags *: dict | None*\n\n#### data *: [AwsProviderData](#bodosdk.models.cloud_config.AwsProviderData) | [AzureProviderData](#bodosdk.models.cloud_config.AzureProviderData) | None*\n\n#### delete()\n\n#### *property* id\n\n#### name *: str | None*\n\n#### organization_uuid *: str | None*\n\n#### status *: str | None*\n\n#### uuid *: str | UUID | None*\n\n### *class* bodosdk.models.cloud_config.CloudConfigList(org_client: IBodoOrganizationClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: dict | None = None, filters: dict | None = None)\n\nBases: `ICloudConfigList`, `SDKBaseModel`\n\n#### *class* Config\n\nBases: `object`\n\nConfiguration for Pydantic models.\n[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### delete()\n\n#### filters *: dict | None*\n\n#### order *: dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### total *: int | None*\n\n<a id=\"module-bodosdk.models.cluster\"></a>\n\n### *class* bodosdk.models.cluster.BodoImage(\\*, image_id: str, bodo_version: str)\n\nBases: `SDKBaseModel`\n\nRepresents an image configuration for Bodo, encapsulating the image ID and the specific Bodo version.\n\nThis class is a data model that holds information about a Bodo environment image.\n\n#### image_id\n\nThe unique identifier for the Bodo image.\n\n* **Type:**\n  str\n\n#### bodo_version\n\nThe version of Bodo used in the image.\n\n* **Type:**\n  str\n\n#### bodo_version *: str*\n\n#### image_id *: str*\n\n### *class* bodosdk.models.cluster.Cluster(workspace_client: IBodoWorkspaceClient = None, \\*, name: str | None = None, uuid: str | None = None, status: str | None = None, description: str | None = None, instanceType: str | None = None, workersQuantity: int | None = None, autoStop: int | None = None, autoPause: int | None = None, autoUpgrade: bool | None = None, bodoVersion: str | None = None, coresPerWorker: int | None = None, acceleratedNetworking: bool | None = None, createdAt: datetime | None = None, updatedAt: datetime | None = None, isJobDedicated: bool | None = None, autoAZ: bool | None = None, useSpotInstance: bool | None = None, lastKnownActivity: datetime | None = None, inStateSince: datetime | None = None, clusterAgentVersion: str | None = None, clusterInitStatus: str | None = None, clusterHealthStatus: str | None = None, primaryAgentIP: str | None = None, awsDeploymentSubnetId: str | None = None, nodeMetadata: List[[NodeMetadata](#bodosdk.models.cluster.NodeMetadata)] | None = None, availabilityZone: str | None = None, instanceRole: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | None = None, workspace: dict | None = None, autoscalingIdentifier: str | None = None, lastAsgActivityId: str | None = None, nodesIp: List[str] | None = None, customTags: Dict | None = None)\n\nBases: `SDKBaseModel`, `ICluster`\n\nRepresents a cluster in the SDK model, encapsulating various properties and operations\nrelated to a compute cluster.\n\n#### name\n\nThe name of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### uuid\n\nThe unique identifier of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### status\n\nThe current status of the cluster (e.g., \u2018RUNNING\u2019, \u2018STOPPED\u2019).\n\n* **Type:**\n  Optional[str]\n\n#### description\n\nA description of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### instance_type\n\nThe type of instances used in the cluster (e.g., \u2018c5.large\u2019).\n\n* **Type:**\n  Optional[str]\n\n#### workers_quantity\n\nThe number of worker nodes in the cluster.\n\n* **Type:**\n  Optional[int]\n\n#### auto_stop\n\nThe auto-stop configuration in minutes.\nThe cluster automatically stops when idle for this duration.\n\n* **Type:**\n  Optional[int]\n\n#### auto_pause\n\nThe auto-pause configuration in minutes.\nThe cluster automatically pauses when idle for this duration.\n\n* **Type:**\n  Optional[int]\n\n#### auto_upgrade\n\nShould the cluster be upgraded on restart.\nThe cluster is automatically upgraded to the latest Bodo version on restart when True.\n\n* **Type:**\n  Optional[bool]\n\n#### bodo_version\n\nThe version of Bodo being used in the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### cores_per_worker\n\nThe number of CPU cores per worker node.\n\n* **Type:**\n  Optional[int]\n\n#### accelerated_networking\n\nWhether accelerated networking is enabled.\n\n* **Type:**\n  Optional[bool]\n\n#### created_at\n\nThe creation timestamp of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### updated_at\n\nThe last update timestamp of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### is_job_dedicated\n\nWhether the cluster is dedicated to a specific job.\n\n* **Type:**\n  Optional[bool]\n\n#### auto_az\n\nWhether automatic availability zone selection is enabled.\n\n* **Type:**\n  Optional[bool]\n\n#### use_spot_instance\n\nWhether spot instances are used for the cluster.\n\n* **Type:**\n  Optional[bool]\n\n#### last_known_activity\n\nThe last known activity timestamp of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### in_state_since\n\nThe timestamp since the cluster has been in its current state.\n\n* **Type:**\n  Optional[str]\n\n#### cluster_agent_version\n\nThe version of the cluster agent.\n\n* **Type:**\n  Optional[str]\n\n#### cluster_init_status\n\nThe initialization status of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### cluster_health_status\n\nThe health status of the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### primary_agent_ip\n\nThe IP address of the primary agent in the cluster.\n\n* **Type:**\n  Optional[str]\n\n#### aws_deployment_subnet_id\n\nThe subnet ID used for deploying AWS resources.\n\n* **Type:**\n  Optional[str]\n\n#### node_metadata\n\nMetadata information for each node in the cluster.\n\n* **Type:**\n  Optional[List[[NodeMetadata](#bodosdk.models.cluster.NodeMetadata)]]\n\n#### availability_zone\n\nThe AWS availability zone in which the cluster is located.\n\n* **Type:**\n  Optional[str]\n\n#### instance_role\n\nThe IAM role used by instances in the cluster.\n\n* **Type:**\n  Optional[[InstanceRole](#bodosdk.models.instance_role.InstanceRole)]\n\n#### workspace\n\nA dictionary containing workspace-related information for the cluster.\n\n* **Type:**\n  Optional[dict]\n\n#### autoscaling_identifier\n\nThe identifier for autoscaling configuration.\n\n* **Type:**\n  Optional[str]\n\n#### last_asg_activity_id\n\nThe identifier of the last activity in the autoscaling group.\n\n* **Type:**\n  Optional[str]\n\n#### nodes_ip\n\nA list of IP addresses for the nodes in the cluster.\n\n* **Type:**\n  Optional[List[str]]\n\n#### accelerated_networking *: bool | None*\n\n#### auto_az *: bool | None*\n\n#### auto_pause *: int | None*\n\n#### auto_stop *: int | None*\n\n#### auto_upgrade *: bool | None*\n\n#### autoscaling_identifier *: str | None*\n\n#### availability_zone *: str | None*\n\n#### aws_deployment_subnet_id *: str | None*\n\n#### bodo_version *: str | None*\n\n#### cancel_jobs()\n\nCancels all jobs associated with the cluster.\n\n* **Returns:**\n  The Cluster instance.\n\n#### cluster_agent_version *: str | None*\n\n#### cluster_health_status *: str | None*\n\n#### cluster_init_status *: str | None*\n\n#### connect(catalog: str)\n\nEstablishes a connection to the specified catalog from Cluster.\n\nThis method is responsible for creating and returning a new Connection instance based on the provided catalog.\n\nParameters:\ncatalog (str): The name of the catalog to which the connection should be established.\n\nReturns:\nConnection: An instance of Connection initialized with the specified catalog and the current class instance.\n\n#### cores_per_worker *: int | None*\n\n#### created_at *: datetime | None*\n\n#### custom_tags *: Dict | None*\n\n#### delete(force: bool = False, mark_as_terminated: bool = False, wait: bool = False)\n\nDeletes the cluster, optionally forcing removal or marking as terminated.\n\n* **Parameters:**\n  * **force** \u2013 If True, forces the deletion of the cluster.\n  * **mark_as_terminated** \u2013 If True, marks the cluster as terminated instead of deleting.\n  * **wait** \u2013 If True, waits till cluster will be TERMINATED.\n* **Returns:**\n  The Cluster instance, potentially updated to reflect its new state.\n\nHandles:\n: ResourceNotFound: Silently if the cluster is already deleted or not found.\n\n#### description *: str | None*\n\n#### *property* id *: str*\n\nThe UUID of the cluster.\n\n* **Returns:**\n  The UUID string of the cluster.\n\n#### in_state_since *: datetime | None*\n\n#### instance_role *: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | None*\n\n#### instance_type *: str | None*\n\n#### is_job_dedicated *: bool | None*\n\n#### last_asg_activity_id *: str | None*\n\n#### last_known_activity *: datetime | None*\n\n#### name *: str | None*\n\n#### node_metadata *: List[[NodeMetadata](#bodosdk.models.cluster.NodeMetadata)] | None*\n\n#### nodes_ip *: List[str] | None*\n\n#### pause(wait: bool = False)\n\nPauses the cluster if it is running.\n\n* **Parameters:**\n  **wait** \u2013 If True, waits till cluster will be PAUSED.\n* **Returns:**\n  The Cluster instance with updated status.\n* **Raises:**\n  **ConflictException** \u2013 If the cluster cannot be paused due to its current status.\n\n#### primary_agent_ip *: str | None*\n\n#### resume(wait: bool = False)\n\nResumes the cluster if it was paused or stopped.\n\n* **Parameters:**\n  **wait** \u2013 If True, waits till cluster will be RUNNING.\n* **Returns:**\n  The Cluster instance with updated status.\n* **Raises:**\n  **ConflictException** \u2013 If the cluster cannot be resumed due to its current status.\n\n#### run_job(template_id: str = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, name: str = None, catalog: str = None, store_result: bool = False)\n\nSubmits a batch job for execution using specified configurations and resources.\n\nThis method creates and dispatches a job within a computing cluster, allowing for extensive customization of\nexecution parameters including source data, runtime environment, and failure handling strategies.\n\n* **Parameters:**\n  * **template_id** (*str* *,* *optional*) \u2013 Identifier for the job template to use.\n  * **code_type** (*str* *,* *optional*) \u2013 Type of code to execute (e.g., Python, Java).\n  * **source** (*Union* *[**dict* *,* *IS3Source* *,* *IGitRepoSource* *,* *IWorkspaceSource* *,* *ITextSource* *]* *,* *optional*) \u2013 Source of the code to be executed. Can be specified as a dictionary\n    or an instance of one of the predefined source interfaces.\n  * **exec_file** (*str* *,* *optional*) \u2013 Path to the executable file within the source.\n  * **args** (*Union* *[**dict* *,* *str* *]* *,* *optional*) \u2013 Arguments to pass to the executable.\n  * **parameters.** (*Can be a string* *or* *a dictionary of*) \u2013\n  * **env_vars** (*dict* *,* *optional*) \u2013 Environment variables to set for the job.\n  * **timeout** (*int* *,* *optional*) \u2013 Maximum runtime (in seconds) before the job is terminated.\n  * **num_retries** (*int* *,* *optional*) \u2013 Number of times to retry the job on failure.\n  * **delay_between_retries** (*int* *,* *optional*) \u2013 Time to wait between retries.\n  * **retry_on_timeout** (*bool* *,* *optional*) \u2013 Whether to retry the job if it times out.\n  * **name** (*str* *,* *optional*) \u2013 Name of the job.\n  * **catalog** (*str* *,* *optional*) \u2013 Catalog to log the job under.\n  * **store_result** (*bool* *,* *optional*) \u2013 Whether to store on S3 job results or not.\n* **Returns:**\n  An object representing the submitted job, capable of providing status and results.\n* **Return type:**\n  IJobRun\n\n#### run_sql_query(template_id: str = None, catalog: str = None, sql_query: str = None, name: str = None, args: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, store_result: bool = False)\n\n> Submits an SQL query for execution on the cluster, returning a job run object.\n\n> This method handles the execution of an SQL query within a defined cluster environment.\n> It supports customization of execution parameters such as query arguments,\n> job name, execution timeouts, and retry strategies.\n\n> Parameters:\n> : template_id (str, optional): Identifier for the job template to use.\n>   catalog (str, optional): Catalog under which to log the SQL job.\n>   sql_query (str, optional): The SQL query string to be executed.\n>   name (str, optional): Descriptive name for the SQL job.\n>   args (dict, optional): Dictionary of arguments that are passed to the SQL query.\n>   timeout (int, optional): Maximum allowable runtime in seconds before the job is terminated.\n>   num_retries (int, optional): Number of times the job will be retried on failure.\n>   delay_between_retries (int, optional): Interval in seconds between job retries.\n>   retry_on_timeout (bool, optional): Whether to retry the job if it times out.\n>   store_result (bool, optional): Whether to store on S3 job results or not.\n\n> Returns:\n> : IJobRun: An object representing the status and result of the executed SQL job.\n\n```\n`\n```\n\n#### start(wait: bool = False)\n\nStarts the cluster.\n\n* **Parameters:**\n  **wait** \u2013 If True, waits till cluster will be RUNNING.\n* **Returns:**\n  The Cluster instance with updated status.\n\n#### status *: str | None*\n\n#### stop(wait: bool = False)\n\nStops the cluster.\n\n* **Parameters:**\n  **wait** \u2013 If True, waits till cluster will be STOPPED.\n* **Returns:**\n  The Cluster instance with updated status.\n\n#### update(auto_stop: int | None = None, auto_pause: int | None = None, auto_upgrade: bool | None = None, description: str | None = None, name: str | None = None, workers_quantity: int | None = None, instance_role: [InstanceRole](#bodosdk.models.instance_role.InstanceRole) | None = None, instance_type: str | None = None, bodo_version: str | None = None, auto_az: bool | None = None, availability_zone: str | None = None, custom_tags: Dict | None = None)\n\nUpdates the cluster\u2019s configuration with the provided values.\n\n* **Parameters:**\n  * **auto_stop** \u2013 Optional; configures auto-stop feature.\n  * **auto_pause** \u2013 Optional; configures auto-pause feature.\n  * **auto_upgrade** \u2013 Optional; enables/disables auto-upgrade on restart.\n  * **description** \u2013 Optional; updates the cluster\u2019s description.\n  * **name** \u2013 Optional; updates the cluster\u2019s name.\n  * **workers_quantity** \u2013 Optional; updates the number of workers.\n  * **instance_role** \u2013 Optional; updates the instance role.\n  * **instance_type** \u2013 Optional; updates the instance type.\n  * **bodo_version** \u2013 Optional; updates the Bodo version.\n  * **auto_az** \u2013 Optional; enables/disables automatic availability zone selection.\n  * **availability_zone** \u2013 Optional; sets a specific availability zone.\n* **Returns:**\n  The updated Cluster instance.\n\n#### updated_at *: datetime | None*\n\n#### use_spot_instance *: bool | None*\n\n#### uuid *: str | None*\n\n#### wait_for_status(statuses: List[str], timeout: int = 600, tick: int = 30)\n\nWaits for the cluster to reach one of the specified states within a given timeout.\n\n* **Parameters:**\n  * **statuses** \u2013 A list of states to wait for.\n  * **timeout** \u2013 The maximum time to wait before raising a TimeoutException.\n  * **tick** \u2013 The interval between checks.\n* **Returns:**\n  The Cluster instance, once it has reached one of the desired states.\n* **Raises:**\n  **TimeoutException** \u2013 If the cluster does not reach a desired state within the timeout.\n\n#### workers_quantity *: int | None*\n\n#### workspace *: dict | None*\n\n### *class* bodosdk.models.cluster.ClusterFilter(\\*, uuids: List[str] | None = None, clusterNames: List[str] | None = None, statues: List[str] | None = None, tags: Dict | None = None)\n\nBases: `SDKBaseModel`, `IClusterFilter`\n\nRepresents a filter used to select clusters based on specific criteria.\n\nThis class is used to construct filter criteria for querying clusters by their identifiers,\nnames, statuses, or tags. It inherits from SDKBaseModel and implements the IClusterFilter interface.\n\n#### ids\n\nOptional list of cluster UUIDs. Default is an empty list.\n\n* **Type:**\n  Optional[List[str]]\n\n#### cluster_names\n\nOptional list of cluster names to filter by. Default is an empty list.\n\n* **Type:**\n  Optional[List[str]]\n\n#### statuses\n\nOptional list of cluster statuses to filter by. Default is an empty list.\n\n* **Type:**\n  Optional[List[str]]\n\n#### tags\n\nOptional dictionary of tags for more fine-grained filtering.\n\n* **Type:**\n  Optional[Dict]\n\n### Default is an empty dictionary.\n\nEach attribute supports being set via their field name or by the specified alias in the Field definition.\n\n#### *class* Config\n\nBases: `object`\n\nConfiguration for Pydantic models.\n[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### cluster_names *: List[str] | None*\n\n#### ids *: List[str] | None*\n\n#### statuses *: List[str] | None*\n\n#### tags *: Dict | None*\n\n### *class* bodosdk.models.cluster.ClusterList(workspace_client: IBodoWorkspaceClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [ClusterFilter](#bodosdk.models.cluster.ClusterFilter) | dict | None = None)\n\nBases: `IClusterList`, `SDKBaseModel`\n\nA model representing a list of clusters, providing pagination, filtering, and\noperations on clusters such as start, stop, delete, resume, and pause.\n\n#### page\n\nThe current page number for pagination, starting from 0.\n\n* **Type:**\n  Optional[int]\n\n#### page_size\n\nThe number of items to be displayed per page.\n\n* **Type:**\n  Optional[int]\n\n#### total\n\nThe total number of items available across all pages.\n\n* **Type:**\n  Optional[int]\n\n#### order\n\nOrdering information for listing clusters. Defaults to an empty dict.\n\n* **Type:**\n  Optional[Dict]\n\n#### filters\n\nFiltering criteria to apply when fetching the cluster list.\n\n* **Type:**\n  Optional[[ClusterFilter](#bodosdk.models.cluster.ClusterFilter)]\n\n#### \\_clusters\n\nInternal list of cluster objects.\n\n* **Type:**\n  List[ICluster]\n\n#### \\_index\n\nInternal index to track the current position when iterating through clusters.\n\n* **Type:**\n  int\n\n#### *class* Config\n\nBases: `object`\n\nConfiguration for Pydantic models.\n[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### cancel_jobs()\n\nCancels all jobs associated with the clusters.\n\n* **Returns:**\n  The ClusterList instance.\n\n#### delete(wait=False)\n\nDeletes each cluster in the list, updating the internal list with the result\nof each delete operation. This method effectively attempts to delete all clusters\nand returns the updated list.\n\n* **Returns:**\n  The current instance of ClusterList after attempting to delete\n  : all clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### filters *: [ClusterFilter](#bodosdk.models.cluster.ClusterFilter) | dict | None*\n\n#### order *: Dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### pause(wait=False)\n\nAttempts to pause each running cluster in the list. It handles exceptions gracefully,\nupdating the list with the status of each cluster following the operation.\n\n* **Returns:**\n  The current instance of ClusterList after attempting to pause\n  : all clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### refresh()\n\nRefreshes the list of clusters by resetting the pagination and filter settings,\nthen reloading the first page of clusters. This method effectively resets the\nClusterList instance to its initial state, based on current filters and ordering.\n\n* **Returns:**\n  The current instance of ClusterList after reloading the first page\n  : of clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### resume(wait=False)\n\nAttempts to resume each paused or stopped cluster in the list. It handles exceptions\ngracefully, ensuring the list is updated with the status of each cluster after\nthe operation.\n\n* **Returns:**\n  The current instance of ClusterList after attempting to resume\n  : all clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### run_job(template_id: str = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, name: str = None, catalog: str = None, store_result: bool = None)\n\nExecutes a job across all clusters managed by the instance.\n\nThis method supports multiple source types and configurations for executing jobs,\nincluding retries and custom environment variables.\n\n* **Parameters:**\n  * **template_id** (*str* *,* *optional*) \u2013 Identifier for the job template to be used.\n  * **code_type** (*str* *,* *optional*) \u2013 The type of code to execute (e.g., Python, Java).\n  * **source** (*Union* *[**dict* *,* *IS3Source* *,* *IGitRepoSource* *,* *IWorkspaceSource* *,* *ITextSource* *]* *,* *optional*) \u2013\n  * **retrieved.** (*The source from where the job's code will be*) \u2013\n  * **exec_file** (*str* *,* *optional*) \u2013 Path to the main executable file within the source.\n  * **args** (*Union* *[**dict* *,* *str* *]* *,* *optional*) \u2013 Arguments to pass to the job. Can be a dictionary or a\n  * **job.** (*string formatted as required by the*) \u2013\n  * **env_vars** (*dict* *,* *optional*) \u2013 Environment variables to set for the job execution.\n  * **timeout** (*int* *,* *optional*) \u2013 Maximum time in seconds for the job to run before it is terminated.\n  * **num_retries** (*int* *,* *optional*) \u2013 Number of times to retry the job on failure.\n  * **delay_between_retries** (*int* *,* *optional*) \u2013 Time in seconds to wait between retries.\n  * **retry_on_timeout** (*bool* *,* *optional*) \u2013 Whether to retry the job if it times out.\n  * **name** (*str* *,* *optional*) \u2013 A name for the job run.\n  * **catalog** (*str* *,* *optional*) \u2013 Catalog identifier to specify a data catalog for the job.\n  * **store_result** (*bool* *,* *optional*) \u2013 Whether to store on S3 job results or not.\n* **Returns:**\n  An object listing the UUIDs of jobs that were successfully initiated.\n* **Return type:**\n  IJobRunList\n\nDecorators:\n: @check_deprecation: Checks if the method or its parameters are deprecated.\n\n#### run_sql_query(template_id: str = None, catalog: str = None, sql_query: str = None, name: str = None, args: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, store_result: bool = None)\n\nExecutes an SQL job across all clusters managed by the instance.\n\nThis method submits an SQL query for execution, allowing for additional configurations such as retries\nand setting execution timeouts.\n\n* **Parameters:**\n  * **template_id** (*str* *,* *optional*) \u2013 Identifier for the job template to be used.\n  * **catalog** (*str* *,* *optional*) \u2013 Catalog identifier to specify a data catalog for the SQL job.\n  * **sql_query** (*str* *,* *optional*) \u2013 The SQL query to execute.\n  * **name** (*str* *,* *optional*) \u2013 A name for the job run.\n  * **args** (*dict* *,* *optional*) \u2013 Additional arguments specific to the SQL job.\n  * **timeout** (*int* *,* *optional*) \u2013 Maximum time in seconds for the job to run before it is terminated.\n  * **num_retries** (*int* *,* *optional*) \u2013 Number of times to retry the job on failure.\n  * **delay_between_retries** (*int* *,* *optional*) \u2013 Time in seconds to wait between retries.\n  * **retry_on_timeout** (*bool* *,* *optional*) \u2013 Whether to retry the job if it times out.\n  * **store_result** (*bool* *,* *optional*) \u2013 Whether to store on S3 job results or not.\n* **Returns:**\n  An object listing the UUIDs of SQL jobs that were successfully initiated.\n* **Return type:**\n  IJobRunList\n\nDecorators:\n: @check_deprecation: Checks if the method or its parameters are deprecated.\n\n#### start(wait=False)\n\nAttempts to start each stopped or paused cluster in the list. It handles exceptions\ngracefully, ensuring the list reflects the status of each cluster after the operation.\n\n* **Returns:**\n  The current instance of ClusterList after attempting to start\n  : all clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### stop(wait=False)\n\nAttempts to stop each running or starting cluster in the list. It handles exceptions\ngracefully, updating the list with the status of each cluster after the operation.\n\n* **Returns:**\n  The current instance of ClusterList after attempting to stop\n  : all clusters.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n#### total *: int | None*\n\n#### wait_for_status(statuses: List[str] = None, timeout: int = 600, tick: int = 60)\n\nWaits for each cluster in the list to reach one of the specified statuses, updating\nthe list with the results. This method polls each cluster\u2019s status until it matches\none of the desired statuses or until the timeout is reached.\n\n* **Parameters:**\n  * **statuses** (*List* *[**str* *]* *,* *optional*) \u2013 A list of status strings to wait for.\n  * **timeout** (*int* *,* *optional*) \u2013 The maximum time to wait for each cluster to reach the\n    desired status, in seconds.\n  * **tick** (*int* *,* *optional*) \u2013 The interval between status checks, in seconds.\n* **Returns:**\n  The current instance of ClusterList after waiting for all clusters\n  : to reach one of the specified statuses.\n* **Return type:**\n  [ClusterList](#bodosdk.models.cluster.ClusterList)\n\n### *class* bodosdk.models.cluster.InstanceType(\\*, name: str, vcpus: int, cores: int, memory: int, efa: bool | None = None, acceleratedNetworking: bool | None = None)\n\nBases: `SDKBaseModel`, `IInstanceType`\n\nRepresents the specifications for a type of computing instance.\n\nThis class defines a specific configuration of a computing instance,\nincluding its processing power and memory capabilities, as well as optional features related to networking.\n\n#### name\n\nThe name or identifier of the instance type.\n\n* **Type:**\n  str\n\n#### vcpus\n\nThe number of virtual CPUs available in this instance type.\n\n* **Type:**\n  int\n\n#### cores\n\nThe number of physical cores available in this instance type.\n\n* **Type:**\n  int\n\n#### memory\n\nThe amount of RAM (in megabytes) available in this instance type.\n\n* **Type:**\n  int\n\n#### efa\n\nIndicates whether Elastic Fabric Adapter (EFA) is supported. Defaults to None.\n\n* **Type:**\n  Optional[bool]\n\n#### accelerated_networking\n\nSpecifies if accelerated networking is enabled.\n\n* **Type:**\n  Optional[bool]\n\n### This is mapped to the JSON key 'acceleratedNetworking'. Defaults to None.\n\n#### accelerated_networking *: bool | None*\n\n#### cores *: int*\n\n#### efa *: bool | None*\n\n#### memory *: int*\n\n#### name *: str*\n\n#### vcpus *: int*\n\n### *class* bodosdk.models.cluster.NodeMetadata(\\*, privateIP: str | None = None, instanceId: str | None = None)\n\nBases: `SDKBaseModel`\n\n#### instance_id *: str | None*\n\n#### private_ip *: str | None*\n\n<a id=\"module-bodosdk.db.connection\"></a>\n\n### *class* bodosdk.db.connection.Connection(catalog: str, cluster: ICluster, timeout=3600)\n\nBases: `object`\n\n#### cursor()\n\n### *class* bodosdk.db.connection.Cursor(catalog: str, cluster: ICluster, timeout: int = 3600)\n\nBases: `object`\n\n#### execute(query: str, \\*\\*kwargs)\n\n#### execute_async(query: str, \\*\\*kwargs)\n\n#### fetchall()\n\n#### fetchmany(size)\n\n#### fetchone()\n\n#### *property* rowcount\n\n#### *property* rownumber\n\n<a id=\"module-bodosdk.models.job\"></a>\n\n### *class* bodosdk.models.job.GitRepoSource(\\*, type: str = 'GIT', repoUrl: str, reference: str | None = '', username: str, token: str)\n\nBases: `SDKBaseModel`\n\nGit repository source definition.\n\n\u2026\n\n#### repo_url\n\nGit repository URL.\n\n* **Type:**\n  str\n\n#### reference\n\nGit reference (branch, tag, commit hash). (Default: \u201c\u201d)\n\n* **Type:**\n  Optional[str]\n\n#### username\n\nGit username.\n\n* **Type:**\n  str\n\n#### token\n\nGit token.\n\n* **Type:**\n  str\n\n#### reference *: str | None*\n\n#### repo_url *: str*\n\n#### token *: str*\n\n#### type *: str*\n\n#### username *: str*\n\n### *class* bodosdk.models.job.JobConfig(\\*, type: str | None = None, source: [GitRepoSource](#bodosdk.models.job.GitRepoSource) | [WorkspaceSource](#bodosdk.models.job.WorkspaceSource) | [S3Source](#bodosdk.models.job.S3Source) | [TextSource](#bodosdk.models.job.TextSource) | None = None, sourceLocation: str | None = None, sqlQueryText: str | None = None, sqlQueryParameters: dict | None = None, args: dict | str | None = None, retryStrategy: [RetryStrategy](#bodosdk.models.job.RetryStrategy) | None = None, timeout: int | None = None, envVars: dict | None = None, catalog: str | None = None, storeResult: bool | None = False)\n\nBases: `SDKBaseModel`, `IJobConfig`\n\nConfigures details for executing a job, including the execution source, file location, and execution parameters.\n\n#### type\n\nThe type of job: PYTHON, SQL, IPYNB\n\n* **Type:**\n  Optional[str]\n\n#### source\n\n* **Type:**\n  Optional[Union[[GitRepoSource](#bodosdk.models.job.GitRepoSource), [WorkspaceSource](#bodosdk.models.job.WorkspaceSource), [S3Source](#bodosdk.models.job.S3Source), [TextSource](#bodosdk.models.job.TextSource)]]\n\n### The source from which the job is configured or executed.\n\n#### exec_file\n\nThe location of the file to execute.\n\n* **Type:**\n  Optional[str]\n\n#### exec_text\n\nThe text containing script/code/sql to execute, valid for TextSource\n\n* **Type:**\n  Optional[str]\n\n#### sql_query_parameters\n\nParameters to substitute within an SQL query.\n\n* **Type:**\n  Optional[dict]\n\n#### args\n\nAdditional arguments required for job execution.\n\n* **Type:**\n  Optional[Union[dict, str]]\n\n### Can be a dictionary or string.\n\n#### retry_strategy\n\n* **Type:**\n  Optional[[RetryStrategy](#bodosdk.models.job.RetryStrategy)]\n\n### Configuration for the job retry strategy.\n\n#### timeout\n\nThe maximum time (in seconds) allowed for the job to run before it times out.\n\n* **Type:**\n  Optional[int]\n\n#### env_vars\n\nEnvironment variables to be set for the job run.\n\n* **Type:**\n  Optional[dict]\n\n#### catalog\n\nThe catalog associated with the job, if applicable.\n\n* **Type:**\n  Optional[str]\n\n#### args *: dict | str | None*\n\n#### catalog *: str | None*\n\n#### env_vars *: dict | None*\n\n#### exec_file *: str | None*\n\n#### exec_text *: str | None*\n\n#### retry_strategy *: [RetryStrategy](#bodosdk.models.job.RetryStrategy) | None*\n\n#### source *: [GitRepoSource](#bodosdk.models.job.GitRepoSource) | [WorkspaceSource](#bodosdk.models.job.WorkspaceSource) | [S3Source](#bodosdk.models.job.S3Source) | [TextSource](#bodosdk.models.job.TextSource) | None*\n\n#### sql_query_parameters *: dict | None*\n\n#### store_result *: bool | None*\n\n#### timeout *: int | None*\n\n#### type *: str | None*\n\n### *class* bodosdk.models.job.JobFilter(\\*, ids: List[str | UUID] | None = None, template_ids: List[str | UUID] | None = None, cluster_ids: List[str | UUID] | None = None, types: List[str] | None = None, statuses: List[str] | None = None, started_at: datetime | None = None, finished_at: datetime | None = None)\n\nBases: `SDKBaseModel`\n\nProvides filtering options for querying job-related data.\n\n#### ids\n\nA list of job IDs to filter by.\n\n* **Type:**\n  Optional[List[Union[str, UUID]]]\n\n#### template_ids\n\nA list of job template IDs to filter by.\n\n* **Type:**\n  Optional[List[Union[str, UUID]]]\n\n#### cluster_ids\n\nA list of cluster IDs to filter jobs by.\n\n* **Type:**\n  Optional[List[Union[str, UUID]]]\n\n#### types\n\nA list of job types to filter by.\n\n* **Type:**\n  Optional[List[str]]\n\n#### statuses\n\nA list of job statuses to filter by.\n\n* **Type:**\n  Optional[List[str]]\n\n#### started_at\n\nA datetime value to filter jobs that started after it.\n\n* **Type:**\n  Optional[datetime]\n\n#### finished_at\n\nA datetime value to filter jobs that finished before it.\n\n* **Type:**\n  Optional[datetime]\n\n#### cluster_ids *: List[str | UUID] | None*\n\n#### finished_at *: datetime | None*\n\n#### ids *: List[str | UUID] | None*\n\n#### started_at *: datetime | None*\n\n#### statuses *: List[str] | None*\n\n#### template_ids *: List[str | UUID] | None*\n\n#### types *: List[str] | None*\n\n### *class* bodosdk.models.job.JobRun(workspace_client: IBodoWorkspaceClient = None, \\*, uuid: str | None = None, name: str | None = None, type: str | None = 'BATCH', submittedAt: datetime | None = None, finishedAt: datetime | None = None, lastHealthCheck: datetime | None = None, lastKnownActivity: datetime | None = None, status: str | None = None, reason: str | None = None, num_retries_used: int | None = (FieldInfo(default=0, alias='numRetriesUsed', alias_priority=2, extra={}),), tag: List | None = None, clusterUUID: str | None = None, cluster: 'Cluster' | None, clusterConfig: 'Cluster' | None = None, config: [JobConfig](#bodosdk.models.job.JobConfig) | None = None, jobTemplateUUID: str | None = None, submitter: str | None = None, stats: dict | None = None)\n\nBases: `SDKBaseModel`, `IJobRun`\n\nDetails a specific instance of a job run, including status and configuration details.\n\n#### uuid\n\nUnique identifier for the job run.\n\n* **Type:**\n  Optional[str]\n\n#### name\n\nName of the job run.\n\n* **Type:**\n  Optional[str]\n\n#### type\n\nType of job run, defaults to \u2018BATCH\u2019 if not specified.\n\n* **Type:**\n  Optional[str]\n\n#### submitted_at\n\nTimestamp when the job was submitted.\n\n* **Type:**\n  Optional[datetime]\n\n#### finished_at\n\nTimestamp when the job finished running.\n\n* **Type:**\n  Optional[datetime]\n\n#### last_health_check\n\nTimestamp of the last health check performed.\n\n* **Type:**\n  Optional[datetime]\n\n#### last_known_activity\n\nTimestamp of the last known activity of this job.\n\n* **Type:**\n  Optional[datetime]\n\n#### status\n\nCurrent status of the job run.\n\n* **Type:**\n  Optional[str]\n\n#### reason\n\nReason for the job\u2019s current status, particularly if there\u2019s an error or failure.\n\n* **Type:**\n  Optional[str]\n\n#### num_retries_used\n\nThe number of retries that have been used for this job run. Defaults to 0.\n\n* **Type:**\n  Optional[int]\n\n#### tags\n\nTags associated with the job run. Default is an empty list.\n\n* **Type:**\n  Optional[List]\n\n#### cluster_uuid\n\nUUID of the cluster on which the job is running.\n\n* **Type:**\n  Optional[str]\n\n#### cluster\n\nThe cluster object associated with the job run.\n\n* **Type:**\n  Optional[[Cluster](#bodosdk.models.cluster.Cluster)]\n\n#### cluster_config\n\nConfiguration of the cluster used for this job run.\n\n* **Type:**\n  Optional[[Cluster](#bodosdk.models.cluster.Cluster)]\n\n#### config\n\nJob configuration details used for this run.\n\n* **Type:**\n  Optional[[JobConfig](#bodosdk.models.job.JobConfig)]\n\n#### job_template_id\n\nUUID of the template from which this job was created.\n\n* **Type:**\n  Optional[str]\n\n#### submitter\n\nThe identifier of the user who submitted the job.\n\n* **Type:**\n  Optional[str]\n\n#### stats\n\nStatistical data about the job run.\n\n* **Type:**\n  Optional[dict]\n\n#### cancel()\n\nCancels the job associated with this instance and updates its state based on the response from the job API.\n\nThis method sends a cancellation request for the job identified by its UUID to the job API,\nhandles the response to update the job\u2019s attributes, and resets its modified state.\n\n* **Returns:**\n  The job instance, updated with the latest state after the cancellation attempt.\n* **Return type:**\n  [JobRun](#bodosdk.models.job.JobRun)\n* **Raises:**\n  **APIException** \u2013 If the cancellation request fails or returns an error response.\n\nDecorators:\n: @check_deprecation: Checks if the method or its parameters are deprecated.\n\n#### cluster *: 'Cluster' | None*\n\n#### cluster_config *: 'Cluster' | None*\n\n#### cluster_id *: str | None*\n\n#### config *: [JobConfig](#bodosdk.models.job.JobConfig) | None*\n\n#### finished_at *: datetime | None*\n\n#### get_logs_urls()\n\n#### get_result_urls()\n\n#### get_stderr()\n\n#### get_stdout()\n\n#### *property* id *: str*\n\n#### job_template_id *: str | None*\n\n#### last_health_check *: datetime | None*\n\n#### last_known_activity *: datetime | None*\n\n#### name *: str | None*\n\n#### num_retries_used *: int | None*\n\n#### reason *: str | None*\n\n#### stats *: dict | None*\n\n#### status *: str | None*\n\n#### submitted_at *: datetime | None*\n\n#### submitter *: str | None*\n\n#### tags *: List | None*\n\n#### type *: str | None*\n\n#### uuid *: str | None*\n\n#### wait_for_status(statuses: List[str], timeout: int = 3600, tick: int = 30)\n\nWaits for the job to reach one of the specified statuses, polling at regular intervals.\n\nThis method checks the current status of the job at regular intervals defined by the tick parameter.\nIf the job reaches one of the specified statuses before the timeout, it returns the job instance.\nIf the timeout is exceeded, it raises a TimeoutException.\n\n* **Parameters:**\n  * **statuses** (*list* *or* *tuple*) \u2013 A list or tuple of statuses that the job is expected to reach.\n  * **timeout** (*int* *,* *optional*) \u2013 The maximum time in seconds to wait for the job to reach one of\n  * **seconds.** (*the specified statuses. Defaults to 600*) \u2013\n  * **tick** (*int* *,* *optional*) \u2013 The time interval in seconds between status checks. Defaults to 30 seconds.\n* **Returns:**\n  The job instance if one of the specified statuses is reached within the timeout period.\n* **Return type:**\n  [JobRun](#bodosdk.models.job.JobRun)\n* **Raises:**\n  * **TimeoutException** \u2013 If the job does not reach one of the specified statuses within\n  * **the specified timeout period.** \u2013\n\nDecorators:\n: @check_deprecation: Checks if the method or its parameters are deprecated.\n\n### *class* bodosdk.models.job.JobRunList(workspace_client: IBodoWorkspaceClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [JobFilter](#bodosdk.models.job.JobFilter) | None = None)\n\nBases: `IJobRunList`, `SDKBaseModel`\n\nRepresents a paginated list of job runs, including metadata and filtering capabilities.\n\n#### page\n\nThe current page number in the paginated list. Defaults to 0.\n\n* **Type:**\n  Optional[int]\n\n#### page_size\n\nThe number of job runs to display per page. Defaults to 10.\n\n* **Type:**\n  Optional[int]\n\n#### total\n\nThe total number of job runs available.\n\n* **Type:**\n  Optional[int]\n\n#### order\n\nA dictionary specifying the order in which job runs are sorted.\n\n* **Type:**\n  Optional[Dict]\n\n#### filters\n\nA JobFilter object used to apply filtering on the list of job runs.\n\n* **Type:**\n  Optional[[JobFilter](#bodosdk.models.job.JobFilter)]\n\n#### cancel()\n\nCancels all jobs in the list.\n\nThis method iterates through each job in the current list (represented by instances of this class),\nand calls the cancel method on each job to attempt their cancellation.\nAfter attempting to cancel all jobs, it returns the updated list of jobs.\n\n* **Returns:**\n  The list instance, potentially with updated states of the individual jobs\n  if the cancellation requests were successful.\n* **Return type:**\n  [JobRunList](#bodosdk.models.job.JobRunList)\n\n#### NOTE\nThis method relies on the individual cancel() method of the job objects within the list.\nIf any job cancellation fails, it could raise an exception depending on\nthe implementation of the individual cancel() method.\n\n#### *property* clusters\n\n#### filters *: [JobFilter](#bodosdk.models.job.JobFilter) | None*\n\n#### order *: Dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### refresh()\n\nRefreshes the list of jobs by clearing the current elements and reloading the next page of job data.\n\nThis method resets the internal state of the list, including the pagination index and the elements themselves.\nIt then loads the next page of data from the underlying data source to repopulate the list.\nThe list is temporarily set to mutable during this process to allow updates, and then set back to immutable\nonce the refresh is complete.\n\n* **Returns:**\n  The refreshed job run list instance, with elements reloaded from the next available page.\n* **Return type:**\n  [JobRunList](#bodosdk.models.job.JobRunList)\n\n#### NOTE\nThis method assumes that the list supports pagination and that the underlying data source provides\nthe mechanism to load additional pages of data.\n\n#### total *: int | None*\n\n#### wait_for_status(statuses: List[str], timeout: int = 3600, tick: int = 30)\n\nWaits for each job in the list to reach one of the specified statuses, polling each at regular intervals.\n\nThis method iterates over each job within the list, checking at intervals (defined by tick) to see\nif the job has reached one of the desired statuses specified in statuses.\nIf a job reaches the desired status within the timeout period, the method continues to the next job.\nIf the timeout is reached without the job reaching the desired status, a TimeoutException is raised.\n\n* **Parameters:**\n  * **statuses** (*list* *or* *tuple*) \u2013 A list or tuple of statuses that each job is expected to reach.\n  * **timeout** (*int* *,* *optional*) \u2013 The maximum time in seconds to wait for each job to reach one of\n  * **seconds.** (*Defaults to 30*) \u2013\n  * **tick** (*int* *,* *optional*) \u2013 The time interval in seconds between status checks for each job.\n  * **seconds.** \u2013\n* **Returns:**\n  The job run list instance, after attempting to wait for all jobs to reach the desired statuses.\n* **Return type:**\n  [JobRunList](#bodosdk.models.job.JobRunList)\n* **Raises:**\n  * **TimeoutException** \u2013 If any job does not reach one of the specified statuses within the specified\n  * **timeout period****,** **including details** **of** **the job's UUID and its current status.** \u2013\n\nDecorators:\n: @check_deprecation: Checks if the method or its parameters are deprecated.\n\n#### NOTE\nThis method individually tracks the timeout for each job, resetting the start time at the beginning\nof the wait for each job in the list.\n\n### *class* bodosdk.models.job.JobRunLogsResponse(\\*, stderrUrl: str = None, stdoutUrl: str = None, expirationDate: str = None)\n\nBases: `SDKBaseModel`, `IJobRunLogsResponse`\n\nRepresents the response object containing URLs for accessing logs related to a job run.\n\n#### stderr_location_url\n\nThe URL to access the standard error logs of the job run.\n\n* **Type:**\n  str\n\n#### stdout_location_url\n\nThe URL to access the standard output logs of the job run.\n\n* **Type:**\n  str\n\n#### expiration_date\n\nThe date when the log URLs will expire and no longer be accessible.\n\n* **Type:**\n  str\n\n#### expiration_date *: str*\n\n#### stderr_location_url *: str*\n\n#### stdout_location_url *: str*\n\n### *class* bodosdk.models.job.JobTemplate(workspace_client: IBodoWorkspaceClient = None, \\*, uuid: str | None = None, name: str | None = None, jobRuns: List[[JobRun](#bodosdk.models.job.JobRun)] = None, description: str | None = None, createdBy: str | None = None, config: [JobConfig](#bodosdk.models.job.JobConfig) | None = None, clusterConfig: 'Cluster' | None = None)\n\nBases: `SDKBaseModel`, `IJobTemplate`\n\nRepresents a template for creating and managing jobs within an SDK environment, e\nncapsulating common job configurations.\n\n#### uuid\n\nThe unique identifier for the job template.\n\n* **Type:**\n  Optional[str]\n\n#### name\n\nThe name of the job template.\n\n* **Type:**\n  Optional[str]\n\n#### job_runs\n\nA list of job runs associated with this template. Default is an empty list\n\n* **Type:**\n  List[[JobRun](#bodosdk.models.job.JobRun)]\n\n### if none are specified.\n\n#### description\n\nA brief description of the job template.\n\n* **Type:**\n  Optional[str]\n\n#### created_by\n\nThe identifier of the user who created the job template.\n\n* **Type:**\n  Optional[str]\n\n#### config\n\nThe job configuration specifics for this template.\n\n* **Type:**\n  Optional[[JobConfig](#bodosdk.models.job.JobConfig)]\n\n#### cluster_config\n\nConfiguration details of the cluster on which the jobs will run. D\n\n* **Type:**\n  Optional[[Cluster](#bodosdk.models.cluster.Cluster)]\n\n### efault is None.\n\n#### cluster_config *: [Cluster](#bodosdk.models.cluster.Cluster) | None*\n\n#### config *: [JobConfig](#bodosdk.models.job.JobConfig) | None*\n\n#### created_by *: str | None*\n\n#### delete()\n\n#### description *: str | None*\n\n#### *property* id\n\n#### job_runs *: List[[JobRun](#bodosdk.models.job.JobRun)]*\n\n#### name *: str | None*\n\n#### run(name: str = None, cluster: dict | ICluster = None, code_type: str = None, source: dict | IS3Source | IGitRepoSource | IWorkspaceSource | ITextSource = None, exec_file: str = None, exec_text: str = None, args: dict | str = None, env_vars: dict = None, timeout: int = None, num_retries: int = None, delay_between_retries: int = None, retry_on_timeout: bool = None, catalog: str = None, store_result: bool = False)\n\n#### uuid *: str | None*\n\n### *class* bodosdk.models.job.JobTemplateFilter(\\*, ids: List[str] | None = None, names: List[str] | None = None, tags: dict | None = None)\n\nBases: `SDKBaseModel`, `IJobTemplateFilter`\n\nClass representig filters for JobTemplateList\n\n#### ids\n\nreturns list matching given ids\n\n* **Type:**\n  List[str] | None\n\n#### names\n\nreturns list matching given names\n\n* **Type:**\n  List[str] | None\n\n#### tags\n\nreturns list matching given tags\n\n* **Type:**\n  dict | None\n\n#### ids *: List[str] | None*\n\n#### names *: List[str] | None*\n\n#### tags *: dict | None*\n\n### *class* bodosdk.models.job.JobTemplateList(workspace_client: IBodoWorkspaceClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [JobTemplateFilter](#bodosdk.models.job.JobTemplateFilter) | None = None)\n\nBases: `IJobTemplateList`, `SDKBaseModel`\n\nRepresents a list of JobTemplates, providing pagination and filtering capabilities.\n\n#### page\n\nThe current page number in the list of Job Templates. Defaults to 0.\n\n* **Type:**\n  Optional[int]\n\n#### page_size\n\nThe number of Job Templates to display per page. Defaults to 10.\n\n* **Type:**\n  Optional[int]\n\n#### total\n\nThe total number of Job Templates available.\n\n* **Type:**\n  Optional[int]\n\n#### order\n\nA dictionary specifying the order in which Job Templates are sorted.\n\n* **Type:**\n  Optional[Dict]\n\n#### filters\n\nA filter object used to filter the Job Templates listed.\n\n* **Type:**\n  Optional[[InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter)]\n\n#### delete()\n\nDeletes all job definitions in the list.\n\nThis method iterates over each job definition contained within the list and calls its individual\ndelete method. This action attempts to remove each job definition from the underlying storage\nor management system.\n\n#### NOTE\nThe behavior and success of the deletion process depend on the implementation of the individual\ndelete method of each job definition. This may include handling exceptions and ensuring that each\njob definition is properly removed. If an error occurs during the deletion of any job definition,\nit may raise an exception, which should be handled by the caller or within the individual delete methods.\n\n#### filters *: [JobTemplateFilter](#bodosdk.models.job.JobTemplateFilter) | None*\n\n#### order *: Dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### refresh()\n\nRefreshes the list of job templates by clearing the current elements and reloading the next page of job data.\n\nThis method resets the internal state of the list, including the pagination index and the elements themselves.\nIt then loads the next page of data from the underlying data source to repopulate the list.\nThe list is temporarily set to mutable during this process to allow updates, and then set back to\nimmutable once the refresh is complete.\n\n* **Returns:**\n  The refreshed job template list instance, with elements reloaded from\n  the next available page.\n* **Return type:**\n  [JobTemplateList](#bodosdk.models.job.JobTemplateList)\n\n#### NOTE\nThis method assumes that the list supports pagination and that the underlying data source provides\nthe mechanism to load additional pages of data.\n\n#### run(instance_type: str = None, workers_quantity: int = None, bodo_version: str = None)\n\n)\nExecutes all job definitions in the list with specified configurations and aggregates their run IDs.\n\nThis method iterates over each job definition in the list and invokes the run method on each, passing\nthe specified configuration parameters such as instance type, the quantity of workers, and the Bodo version.\nIt collects the IDs of the resulting job runs and returns a consolidated list of these job runs.\n\n* **Parameters:**\n  * **instance_type** (*str* *,* *optional*) \u2013 The type of instance to use for the jobs.\n  * **specifications.** (*This may specify the hardware*) \u2013\n  * **workers_quantity** (*int* *,* *optional*) \u2013 The number of worker instances to deploy for the jobs.\n  * **bodo_version** (*str* *,* *optional*) \u2013 The specific version of Bodo to use for executing the jobs.\n* **Returns:**\n  An interface to the list of job runs created by executing the job definitions,\n  allowing further operations like monitoring and management.\n* **Return type:**\n  IJobRunList\n\n#### NOTE\nThe run method for each job definition must correctly handle the passed configurations.\nIf any job execution fails, the behavior and handling of errors should be considered based\non the implementation of each job definition\u2019s run method.\n\n#### total *: int | None*\n\n### *class* bodosdk.models.job.RetryStrategy(\\*, numRetries: int = 0, delayBetweenRetries: int = 1, retryOnTimeout: bool = False)\n\nBases: `SDKBaseModel`\n\nA Pydantic model that defines the retry strategy for a job or a task. It specifies how many retries\nshould be attempted,\nthe delay between retries, and whether to retry on timeout.\n\n#### num_retries\n\nThe number of times to retry the job after a failure. Defaults to 0, meaning no\n\n* **Type:**\n  int\n\n### retries by default.\n\n#### delay_between_retries\n\nThe delay between consecutive retries, expressed in minutes. Defaults to 1 minute.\n\n* **Type:**\n  int\n\n#### retry_on_timeout\n\nA flag to determine if the job should be retried upon timing out. Defaults to False,\n\n* **Type:**\n  bool\n\n### indicating no retry on timeout.\n\nEach field is represented with a default value and an alias that matches the corresponding key in JSON or\nother serialized forms.\n\n#### delay_between_retries *: int*\n\n#### num_retries *: int*\n\n#### retry_on_timeout *: bool*\n\n### *class* bodosdk.models.job.S3Source(\\*, type: str = 'S3', bucketPath: str, bucketRegion: str)\n\nBases: `SDKBaseModel`\n\nS3 source definition.\n\n\u2026\n\n#### bucket_path\n\nS3 bucket path.\n\n* **Type:**\n  str\n\n#### bucket_region\n\nS3 bucket region.\n\n* **Type:**\n  str\n\n#### bucket_path *: str*\n\n#### bucket_region *: str*\n\n#### type *: str*\n\n### *class* bodosdk.models.job.TextSource(\\*, type: str = 'SQL')\n\nBases: `SDKBaseModel`\n\nRepresents a specific type of source where the job configuration can originate from a text source.\n\n#### type\n\nSpecifies the type of source\n\n* **Type:**\n  str\n\n#### type *: str*\n\n### *class* bodosdk.models.job.WorkspaceSource(\\*, type: str = 'WORKSPACE', path: str)\n\nBases: `SDKBaseModel`\n\nWorkspace source definition.\n\n\u2026\n\n#### path\n\nWorkspace path.\n\n* **Type:**\n  str\n\n#### path *: str*\n\n#### type *: str*\n\n<a id=\"module-bodosdk.models.common\"></a>\n\n### *class* bodosdk.models.common.AWSNetworkData(\\*, region: str | None = None, storageEndpoint: bool | None = None, vpcId: str | None = None, publicSubnetsIds: List[str] | None = None, privateSubnetsIds: List[str] | None = None, policyArns: List[str] | None = None)\n\nBases: [`NetworkData`](#bodosdk.models.common.NetworkData)\n\nExtends the NetworkData class to include specific properties for AWS networking.\n\n#### vpc_id\n\nThe ID of the AWS Virtual Private Cloud (VPC) where workspace should be created.\n\n* **Type:**\n  Optional[str]\n\n#### public_subnets_ids\n\nList of IDs for the public subnets within the AWS VPC.\n\n* **Type:**\n  Optional[List[str]]\n\n#### private_subnets_ids\n\nList of IDs for the private subnets within the AWS VPC.\n\n* **Type:**\n  Optional[List[str]]\n\n#### policies_arn\n\nList of AWS Resource Names (ARNs) for the policies applied to the network.\n\n* **Type:**\n  Optional[List[str]]\n\n#### policies_arn *: List[str] | None*\n\n#### private_subnets_ids *: List[str] | None*\n\n#### public_subnets_ids *: List[str] | None*\n\n#### vpc_id *: str | None*\n\n### *class* bodosdk.models.common.NetworkData(\\*, region: str | None = None, storageEndpoint: bool | None = None)\n\nBases: `SDKBaseModel`\n\nA base model for network-related data within an SDK context.\n\n#### region\n\nThe geographic region where the network is located.\n\n* **Type:**\n  Optional[str]\n\n#### storage_endpoint\n\nIndicates whether a storage endpoint is enabled.\n\n* **Type:**\n  Optional[bool]\n\n#### region *: str | None*\n\n#### storage_endpoint *: bool | None*\n\n<a id=\"module-bodosdk.models.instance_role\"></a>\n\n### *class* bodosdk.models.instance_role.InstanceRole(workspace_client: IBodoWorkspaceClient = None, \\*, uuid: str | None = None, name: str | None = None, description: str | None = None, roleArn: str | None = None, status: str | None = None)\n\nBases: `SDKBaseModel`, `IInstanceRole`\n\n#### delete()\n\nRemoves instance role from workspace\n\n* **Returns:**\n  None\n\n#### description *: str | None*\n\n#### *property* id\n\n#### name *: str | None*\n\n#### role_arn *: str | None*\n\n#### status *: str | None*\n\n#### uuid *: str | None*\n\n### *class* bodosdk.models.instance_role.InstanceRoleFilter(\\*, uuids: List[str] | None = None, names: List[str] | None = None, roleArns: List[str] | None = None)\n\nBases: `SDKBaseModel`, `IInstanceRoleFilter`\n\nClass representing filters for InstanceRoleList\n\n#### ids\n\nreturns list matching given ids\n\n* **Type:**\n  List[str] | None\n\n#### names\n\nreturns list matching given names\n\n* **Type:**\n  List[str] | None\n\n#### role_arns\n\nreturns list matching giver arns\n\n* **Type:**\n  List[str] | None\n\n#### *class* Config\n\nBases: `object`\n\nConfiguration for Pydantic models.\n[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### ids *: List[str] | None*\n\n#### names *: List[str] | None*\n\n#### role_arns *: List[str] | None*\n\n### *class* bodosdk.models.instance_role.InstanceRoleList(workspace_client: IBodoWorkspaceClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter) | None = None)\n\nBases: `IInstanceRoleList`, `SDKBaseModel`\n\nRepresents a list of instance roles within an SDK context, providing pagination and filtering capabilities.\n\n#### page\n\nThe current page number in the list of instance roles. Defaults to 0.\n\n* **Type:**\n  Optional[int]\n\n#### page_size\n\nThe number of instance roles to display per page. Defaults to 10.\n\n* **Type:**\n  Optional[int]\n\n#### total\n\nThe total number of instance roles available.\n\n* **Type:**\n  Optional[int]\n\n#### order\n\nA dictionary specifying the order in which instance roles are sorted.\n\n* **Type:**\n  Optional[Dict]\n\n#### filters\n\nA filter object used to filter the instance roles listed.\n\n* **Type:**\n  Optional[[InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter)]\n\n#### *class* Config\n\nBases: `object`\n\nConfiguration for Pydantic models.\n[https://docs.pydantic.dev/latest/api/config/](https://docs.pydantic.dev/latest/api/config/)\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### delete()\n\n#### filters *: [InstanceRoleFilter](#bodosdk.models.instance_role.InstanceRoleFilter) | None*\n\n#### order *: Dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### total *: int | None*\n\n<a id=\"module-bodosdk.models.workspace\"></a>\n\n### *class* bodosdk.models.workspace.Workspace(org_client: IBodoOrganizationClient = None, \\*, name: str | None = None, uuid: str | UUID | None = None, status: str | None = None, organizationUUID: str | UUID | None = None, networkData: [NetworkData](#bodosdk.models.common.NetworkData) | [AWSNetworkData](#bodosdk.models.common.AWSNetworkData) | None = None, createdBy: str | None = None, notebookAutoDeployEnabled: bool | None = None, assignedAt: datetime | None = None, customTags: Dict[str, Any] | None = None, jupyterLastActivity: datetime | None = None, jupyterIsActive: bool | None = False, cloudConfig: [CloudConfigBase](#bodosdk.models.cloud_config.CloudConfigBase) | [AwsCloudConfig](#bodosdk.models.cloud_config.AwsCloudConfig) | [AzureCloudConfig](#bodosdk.models.cloud_config.AzureCloudConfig) | None = None)\n\nBases: `SDKBaseModel`, `IWorkspace`\n\n#### assigned_at *: datetime | None*\n\n#### cloud_config *: [CloudConfigBase](#bodosdk.models.cloud_config.CloudConfigBase) | [AwsCloudConfig](#bodosdk.models.cloud_config.AwsCloudConfig) | [AzureCloudConfig](#bodosdk.models.cloud_config.AzureCloudConfig) | None*\n\n#### created_by *: str | None*\n\n#### custom_tags *: Dict[str, Any] | None*\n\n#### delete()\n\nDeletes the workspace from the API based on its UUID and updates the instance\u2019s properties\nwith the response from the deletion API call.\n\n* **Returns:**\n  The Workspace instance after deletion, updated with the API\u2019s response data.\n\n#### *property* id\n\n#### jupyter_is_active *: bool | None*\n\n#### jupyter_last_activity *: datetime | None*\n\n#### name *: str | None*\n\n#### network_data *: [NetworkData](#bodosdk.models.common.NetworkData) | [AWSNetworkData](#bodosdk.models.common.AWSNetworkData) | None*\n\n#### notebook_auto_deploy_enabled *: bool | None*\n\n#### organization_uuid *: str | UUID | None*\n\n#### status *: str | None*\n\n#### update_infra()\n\n#### uuid *: str | UUID | None*\n\n#### wait_for_status(statuses, timeout=600, tick=30)\n\nWaits for the workspace to reach one of the specified states within a given timeout.\n\n* **Parameters:**\n  * **statuses** \u2013 A list of states to wait for.\n  * **timeout** \u2013 The maximum time to wait before raising a TimeoutException.\n  * **tick** \u2013 The interval between checks.\n* **Returns:**\n  The workspace instance, once it has reached one of the desired states.\n* **Raises:**\n  **TimeoutException** \u2013 If the workspace does not reach a desired state within the timeout.\n\n### *class* bodosdk.models.workspace.WorkspaceFilter(\\*, uuids: List[str] | None = None, names: List[str] | None = None, statuses: List[str] | None = None, organizationUUIDs: List[str] | None = None)\n\nBases: `SDKBaseModel`, `IWorkspaceFilter`\n\n#### *class* Config\n\nBases: `object`\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### ids *: List[str] | None*\n\n#### names *: List[str] | None*\n\n#### organization_uuids *: List[str] | None*\n\n#### statuses *: List[str] | None*\n\n### *class* bodosdk.models.workspace.WorkspaceList(org_client: IBodoOrganizationClient = None, \\*, page: int | None = 0, pageSize: int | None = 10, total: int | None = None, order: Dict | None = None, filters: [WorkspaceFilter](#bodosdk.models.workspace.WorkspaceFilter) | None = None)\n\nBases: `IWorkspaceList`, `SDKBaseModel`\n\n#### *class* Config\n\nBases: `object`\n\n#### allow_population_by_field_name *= True*\n\n#### extra *= 'forbid'*\n\n#### delete()\n\nDeletes the workspaces present on the list\n\n* **Returns:**\n  WorkspaceListAPIModel\n\n#### filters *: [WorkspaceFilter](#bodosdk.models.workspace.WorkspaceFilter) | None*\n\n#### order *: Dict | None*\n\n#### page *: int | None*\n\n#### page_size *: int | None*\n\n#### total *: int | None*\n\n#### update_infra()\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Bodo Platform SDK 2.0.1",
    "version": "2.0.1",
    "project_urls": {
        "Homepage": "https://github.com/Bodo-inc/bodo-sdk"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2833eeaa7235ef192462ca85663d8f529b065c31724b983136761b74c33a1c55",
                "md5": "82d7de2baa4dc1e5073af81fc993b0d2",
                "sha256": "fe4a2bb7ce07c723cc818d2840a89e009da809988824e7940cee26abaaffb32a"
            },
            "downloads": -1,
            "filename": "bodosdk-2.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "82d7de2baa4dc1e5073af81fc993b0d2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 92785,
            "upload_time": "2024-05-29T21:32:34",
            "upload_time_iso_8601": "2024-05-29T21:32:34.794380Z",
            "url": "https://files.pythonhosted.org/packages/28/33/eeaa7235ef192462ca85663d8f529b065c31724b983136761b74c33a1c55/bodosdk-2.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "54ccaf7e5abc165148a38acb005af43d959564c24024adf9b18719096426c623",
                "md5": "07f4f4d74efb32981d3294b258bb4813",
                "sha256": "bfb08688f4eb5cd357f55cfb1e62d5d977cf603fe573f56b745f41274b883802"
            },
            "downloads": -1,
            "filename": "bodosdk-2.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "07f4f4d74efb32981d3294b258bb4813",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 111214,
            "upload_time": "2024-05-29T21:32:36",
            "upload_time_iso_8601": "2024-05-29T21:32:36.969473Z",
            "url": "https://files.pythonhosted.org/packages/54/cc/af7e5abc165148a38acb005af43d959564c24024adf9b18719096426c623/bodosdk-2.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-29 21:32:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Bodo-inc",
    "github_project": "bodo-sdk",
    "github_not_found": true,
    "lcname": "bodosdk"
}
        
Elapsed time: 0.54618s