> ## Documentation Index
> Fetch the complete documentation index at: https://docs.open-metadata.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Ometa API

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L0")

# module `ometa_api`

OpenMetadata is the high level Python API that serves as a wrapper for the metadata-server API. It is based on the generated pydantic models from the JSON schemas and provides a typed approach to working with OpenMetadata entities.

## **Global Variables**

* **ROUTES**

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L73")

## class `MissingEntityTypeException`

We are receiving an Entity Type\[T] not covered in our suffix generation list

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L80")

## class `InvalidEntityException`

We receive an entity not supported in an operation

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L86")

## class `EmptyPayloadException`

Raise when receiving no data, even if no exception during the API call is received

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L93")

## class `OpenMetadata`

Generic interface to the OpenMetadata API

It is a polymorphism on all our different Entities.

Specific functionalities to be inherited from Mixins

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L130")

### method `__init__`

```python theme={null}
__init__(config: OpenMetadataConnection, raw_data: bool = False)
```

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L523")

### method `close`

```python theme={null}
close()
```

Closing connection

Returns None

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L508")

### method `compute_percentile`

```python theme={null}
compute_percentile(entity: Union[Type[~T], str], date: str) → None
```

Compute an entity usage percentile

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L258")

### method `create_or_update`

```python theme={null}
create_or_update(data: ~C) → ~T
```

We allow CreateEntity for PUT, so we expect a type C.

We PUT to the endpoint and return the Entity generated result

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L487")

### method `delete`

```python theme={null}
delete(
    entity: Type[~T],
    entity_id: Union[str, Uuid],
    recursive: bool = False,
    hard_delete: bool = False
) → None
```

API call to delete an entity from entity ID

Args entity (T): entity Type entity\_id (basic.Uuid): entity ID Returns None

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L301")

### method `get_by_id`

```python theme={null}
get_by_id(
    entity: Type[~T],
    entity_id: Union[str, Uuid],
    fields: Optional[List[str]] = None,
    nullable: bool = True
) → Optional[~T]
```

Return entity by ID or None

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L283")

### method `get_by_name`

```python theme={null}
get_by_name(
    entity: Type[~T],
    fqn: Union[str, FullyQualifiedEntityName],
    fields: Optional[List[str]] = None,
    nullable: bool = True
) → Optional[~T]
```

Return entity by name or None

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L193")

### method `get_create_entity_type`

```python theme={null}
get_create_entity_type(entity: Type[~T]) → Type[~C]
```

imports and returns the Create Type from an Entity Type T. We are following the expected path structure to import on-the-fly the necessary class and pass it to the consumer

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L224")

### method `get_entity_from_create`

```python theme={null}
get_entity_from_create(create: Type[~C]) → Type[~T]
```

Inversely, import the Entity type based on the create Entity class

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L356")

### method `get_entity_reference`

```python theme={null}
get_entity_reference(entity: Type[~T], fqn: str) → Optional[EntityReference]
```

Helper method to obtain an EntityReference from a FQN and the Entity class.

**Args:**

`entity`: Entity Class

`fqn`: Entity instance FQN

**Returns:**

EntityReference or None

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L184")

### method `get_module_path`

```python theme={null}
get_module_path(entity: Type[~T]) → str
```

Based on the entity, return the module path it is found inside generated

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L169")

### method `get_suffix`

```python theme={null}
get_suffix(entity: Type[~T]) → str
```

Given an entity Type from the generated sources, return the endpoint to run requests.

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L516")

### method `health_check`

```python theme={null}
health_check() → bool
```

Run version api call. Return `true` if response is not None

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L418")

### method `list_all_entities`

```python theme={null}
list_all_entities(
    entity: Type[~T],
    fields: Optional[List[str]] = None,
    limit: int = 1000,
    params: Optional[Dict[str, str]] = None,
    skip_on_failure: bool = False
) → Iterable[~T]
```

Utility method that paginates over all EntityLists to return a generator to fetch entities.

**Parameters**:

* `entity`: Entity Type, such as Table

* `fields`: Extra fields to return

* `limit`: Number of entities in each pagination

* `params`: Extra parameters, e.g., `{"service": "serviceName"}` to filter

**Returns**:

Generator that will be yielding all Entities

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L379")

### method `list_entities`

```python theme={null}
list_entities(
    entity: Type[~T],
    fields: Optional[List[str]] = None,
    after: Optional[str] = None,
    limit: int = 100,
    params: Optional[Dict[str, str]] = None,
    skip_on_failure: bool = False
) → EntityList[~T]
```

Helps us paginate over the collection

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L476")

### method `list_services`

```python theme={null}
list_services(entity: Type[~T]) → List[EntityList[~T]]
```

Service listing does not implement paging

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L461")

### method `list_versions`

```python theme={null}
list_versions(
    entity_id: Union[str, Uuid],
    entity: Type[~T]
) → EntityVersionHistory
```

Version history of an entity

***

[<img src="https://img.shields.io/badge/-source-cccccc?style=flat-square" />](https://github.com/open-metadata/OpenMetadata/tree/main/ingestion/src/metadata/ingestion/ometa/ometa_api.py#L211")

### method `update_file_name`

```python theme={null}
update_file_name(create: Type[~C], file_name: str) → str
```

Update the filename for services and schemas

***
