diff --git a/entity/.gitattributes b/entity/.gitattributes
new file mode 100755
index 000000000..4d75d5900
--- /dev/null
+++ b/entity/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.py linguist-generated=false
\ No newline at end of file
diff --git a/entity/.gitignore b/entity/.gitignore
new file mode 100755
index 000000000..8ac3f51d4
--- /dev/null
+++ b/entity/.gitignore
@@ -0,0 +1,7 @@
+.python-version
+.DS_Store
+venv/
+src/*.egg-info/
+__pycache__/
+.pytest_cache/
+.python-version`
diff --git a/entity/README.md b/entity/README.md
index 9ae90f288..fd12c1886 100755
--- a/entity/README.md
+++ b/entity/README.md
@@ -16,87 +16,214 @@ from epilot.models import operations, shared
s = epilot.Epilot(
security=shared.Security(
- epilot_auth="Bearer YOUR_BEARER_TOKEN_HERE",
+ epilot_auth="",
),
)
-
req = operations.AttachActivityRequest(
entities=[
- "9bd9d8d6-9a67-44e0-b467-cc8796ed151a",
- "05dfc2dd-f7cc-478c-a1ba-928fc816742c",
- "b7392059-2939-46fe-a759-6eb10faaa235",
+ 'ee1dee63-2954-4671-8246-751c43fec091',
],
- id="01F130Q52Q6MWSNS8N2AVXV4JN",
+ id='01F130Q52Q6MWSNS8N2AVXV4JN',
)
-
+
res = s.activity.attach_activity(req)
if res.activity_item is not None:
# handle response
+ pass
```
-## SDK Available Operations
+## Available Resources and Operations
+
+### [activity](docs/sdks/activity/README.md)
-### activity
+* [attach_activity](docs/sdks/activity/README.md#attach_activity) - attachActivity
+* [create_activity](docs/sdks/activity/README.md#create_activity) - createActivity
+* [get_activity](docs/sdks/activity/README.md#get_activity) - getActivity
+* [get_entity_activity_feed](docs/sdks/activity/README.md#get_entity_activity_feed) - getEntityActivityFeed
-* `attach_activity` - attachActivity
-* `create_activity` - createActivity
-* `get_activity` - getActivity
-* `get_entity_activity_feed` - getEntityActivityFeed
+### [entities](docs/sdks/entities/README.md)
-### entities
+* [autocomplete](docs/sdks/entities/README.md#autocomplete) - autocomplete
+* [create_entity](docs/sdks/entities/README.md#create_entity) - createEntity
+* [delete_entity](docs/sdks/entities/README.md#delete_entity) - deleteEntity
+* [get_entity](docs/sdks/entities/README.md#get_entity) - getEntity
+* [patch_entity](docs/sdks/entities/README.md#patch_entity) - patchEntity
+* [search_entities](docs/sdks/entities/README.md#search_entities) - searchEntities
+* [update_entity](docs/sdks/entities/README.md#update_entity) - updateEntity
+* [upsert_entity](docs/sdks/entities/README.md#upsert_entity) - upsertEntity
-* `autocomplete` - autocomplete
-* `create_entity` - createEntity
-* `delete_entity` - deleteEntity
-* `get_entity` - getEntity
-* `patch_entity` - patchEntity
-* `search_entities` - searchEntities
-* `update_entity` - updateEntity
-* `upsert_entity` - upsertEntity
+### [entity_import](docs/sdks/entityimport/README.md)
-### export
+* [import_entities](docs/sdks/entityimport/README.md#import_entities) - Import Entities
-* `export_entities` - exportEntities
-* `import_entities` - importEntities
+### [export](docs/sdks/export/README.md)
-### relations
+* [export_entities](docs/sdks/export/README.md#export_entities) - exportEntities
-* `add_relations` - addRelations
-* `delete_relation` - deleteRelation
-* `get_relations` - getRelations
-* `get_relations_v2` - getRelationsV2
-* `update_relation` - updateRelation
+### [relations](docs/sdks/relations/README.md)
-### saved_views
+* [add_relations](docs/sdks/relations/README.md#add_relations) - addRelations
+* [delete_relation](docs/sdks/relations/README.md#delete_relation) - deleteRelation
+* [get_related_entities_count](docs/sdks/relations/README.md#get_related_entities_count) - getRelatedEntitiesCount
+* [get_relations](docs/sdks/relations/README.md#get_relations) - getRelations
+* [get_relations_v2](docs/sdks/relations/README.md#get_relations_v2) - getRelationsV2
+* [get_relations_v3](docs/sdks/relations/README.md#get_relations_v3) - getRelationsV3
+* [update_relation](docs/sdks/relations/README.md#update_relation) - updateRelation
-* `create_saved_view` - createSavedView
-* `delete_saved_view` - deleteSavedView
-* `get_saved_view` - getSavedView
-* `list_saved_views` - listSavedViews
-* `update_saved_view` - updateSavedView
+### [saved_views](docs/sdks/savedviews/README.md)
-### schemas
+* [create_saved_view](docs/sdks/savedviews/README.md#create_saved_view) - createSavedView
+* [delete_saved_view](docs/sdks/savedviews/README.md#delete_saved_view) - deleteSavedView
+* [get_saved_view](docs/sdks/savedviews/README.md#get_saved_view) - getSavedView
+* [list_favorite_views_for_user](docs/sdks/savedviews/README.md#list_favorite_views_for_user) - listFavoriteViewsForUser
+* [list_saved_views](docs/sdks/savedviews/README.md#list_saved_views) - listSavedViews
+* [update_saved_view](docs/sdks/savedviews/README.md#update_saved_view) - updateSavedView
-* `delete_schema` - deleteSchema
-* `get_schema` - getSchema
-* `get_schema_versions` - getSchemaVersions
-* `list_schema_blueprints` - listSchemaBlueprints
-* `list_schemas` - listSchemas
-* `list_taxonomy_classifications_for_schema` - listTaxonomyClassificationsForSchema
-* `put_schema` - putSchema
+### [schemas](docs/sdks/schemas/README.md)
-### taxonomy
+* [delete_schema](docs/sdks/schemas/README.md#delete_schema) - deleteSchema
+* [get_schema](docs/sdks/schemas/README.md#get_schema) - getSchema
+* [get_schema_versions](docs/sdks/schemas/README.md#get_schema_versions) - getSchemaVersions
+* [list_schema_blueprints](docs/sdks/schemas/README.md#list_schema_blueprints) - listSchemaBlueprints
+* [list_schemas](docs/sdks/schemas/README.md#list_schemas) - listSchemas
+* [list_taxonomy_classifications_for_schema](docs/sdks/schemas/README.md#list_taxonomy_classifications_for_schema) - listTaxonomyClassificationsForSchema
+* [put_schema](docs/sdks/schemas/README.md#put_schema) - putSchema
-* `get_taxonomy` - getTaxonomy
-* `list_taxonomies` - listTaxonomies
-* `taxonomies_classifications_search` - taxonomiesClassificationsSearch
-* `taxonomy_autocomplete` - taxonomyAutocomplete
-* `update_classifications_for_taxonomy` - updateClassificationsForTaxonomy
+### [taxonomy](docs/sdks/taxonomy/README.md)
+
+* [get_taxonomy](docs/sdks/taxonomy/README.md#get_taxonomy) - getTaxonomy
+* [list_taxonomies](docs/sdks/taxonomy/README.md#list_taxonomies) - listTaxonomies
+* [taxonomies_classifications_search](docs/sdks/taxonomy/README.md#taxonomies_classifications_search) - taxonomiesClassificationsSearch
+* [taxonomy_autocomplete](docs/sdks/taxonomy/README.md#taxonomy_autocomplete) - taxonomyAutocomplete
+* [update_classifications_for_taxonomy](docs/sdks/taxonomy/README.md#update_classifications_for_taxonomy) - updateClassificationsForTaxonomy
+
+
+
+
+
+
+
+
+
+# Pagination
+
+Some of the endpoints in this SDK support pagination. To use pagination, you make your SDK calls as usual, but the
+returned response object will have a `Next` method that can be called to pull down the next group of results. If the
+return value of `Next` is `None`, then there are no more pages to be fetched.
+
+Here's an example of one such pagination call:
+
+
+
+
+
+# Error Handling
+
+Handling errors in your SDK should largely match your expectations. All operations return a response object or raise an error. If Error objects are specified in your OpenAPI Spec, the SDK will raise the appropriate Error type.
+
+
+
+
+
+# Server Selection
+
+## Select Server by Index
+
+You can override the default server globally by passing a server index to the `server_idx: int` optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
+
+| # | Server | Variables |
+| - | ------ | --------- |
+| 0 | `https://entity.sls.epilot.io` | None |
+
+For example:
+
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+ server_idx=0
+)
+
+req = operations.AttachActivityRequest(
+ entities=[
+ 'ee1dee63-2954-4671-8246-751c43fec091',
+ ],
+ id='01F130Q52Q6MWSNS8N2AVXV4JN',
+)
+
+res = s.activity.attach_activity(req)
+
+if res.activity_item is not None:
+ # handle response
+ pass
+```
+
+
+## Override Server URL Per-Client
+
+The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example:
+
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+ server_url="https://entity.sls.epilot.io"
+)
+
+req = operations.AttachActivityRequest(
+ entities=[
+ 'ee1dee63-2954-4671-8246-751c43fec091',
+ ],
+ id='01F130Q52Q6MWSNS8N2AVXV4JN',
+)
+
+res = s.activity.attach_activity(req)
+
+if res.activity_item is not None:
+ # handle response
+ pass
+```
+
+
+
+
+
+# Custom HTTP Client
+
+The Python SDK makes API calls using the (requests)[https://pypi.org/project/requests/] HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with a custom `requests.Session` object.
+
+
+For example, you could specify a header for every request that your sdk makes as follows:
+
+```python
+import epilot
+import requests
+
+http_client = requests.Session()
+http_client.headers.update({'x-custom-header': 'someValue'})
+s = epilot.Epilot(client: http_client)
+```
+
+
+
+
+
+
### SDK Generated by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
diff --git a/entity/RELEASES.md b/entity/RELEASES.md
index 12414e257..ec54217ca 100644
--- a/entity/RELEASES.md
+++ b/entity/RELEASES.md
@@ -34,4 +34,382 @@ Based on:
### Changes
Based on:
- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
-- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
\ No newline at end of file
+- Speakeasy CLI 1.19.2 (2.16.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-09 01:50:11
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.45.2 (2.37.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-10 01:42:07
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.47.0 (2.39.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-11 01:57:50
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.47.1 (2.39.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-14 01:42:19
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.47.3 (2.40.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-16 01:42:44
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.48.0 (2.41.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-20 01:37:43
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.49.0 (2.41.4) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-21 01:39:20
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.49.1 (2.41.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-23 01:53:34
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.50.1 (2.43.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-27 01:55:53
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.51.1 (2.50.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-06-29 01:50:35
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.51.3 (2.52.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-01 02:00:20
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.52.0 (2.55.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-06 01:56:21
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.52.2 (2.57.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-07 01:53:55
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.53.0 (2.58.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-08 01:53:00
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.53.1 (2.58.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-11 01:46:12
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.56.0 (2.61.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-12 01:54:35
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.56.4 (2.61.5) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-13 01:56:55
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.57.0 (2.62.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-14 01:56:32
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.59.0 (2.65.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-17 01:59:57
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.60.0 (2.66.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-18 02:04:21
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.61.0 (2.70.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-19 02:52:43
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.62.1 (2.70.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-22 01:34:37
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.64.0 (2.71.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-26 01:38:03
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.65.0 (2.73.0) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-27 01:20:33
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.65.1 (2.73.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-28 01:21:29
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.65.2 (2.75.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-07-29 01:21:49
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.65.2 (2.75.1) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-01 01:40:22
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.66.1 (2.75.2) https://github.com/speakeasy-api/speakeasy
+
+## 2023-08-26 01:09:32
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.74.16 (2.88.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.21.0] entity
+
+## 2023-08-29 01:12:32
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.74.17 (2.88.5) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.21.1] entity
+
+## 2023-08-31 01:12:33
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.76.1 (2.89.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.22.0] entity
+
+## 2023-09-01 01:17:05
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.77.0 (2.91.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.0] entity
+
+## 2023-09-02 01:09:50
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.77.2 (2.93.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.1] entity
+
+## 2023-09-05 01:11:16
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.78.3 (2.96.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.2] entity
+
+## 2023-09-08 01:12:56
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.82.0 (2.107.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.3] entity
+
+## 2023-09-12 01:10:58
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.82.5 (2.108.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.4] entity
+
+## 2023-09-13 01:13:53
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.82.5 (2.108.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.5] entity
+
+## 2023-09-16 01:11:19
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.86.0 (2.115.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.6] entity
+
+## 2023-09-20 01:13:19
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.88.0 (2.118.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.7] entity
+
+## 2023-09-22 01:13:25
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.89.0 (2.125.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.23.8] entity
+
+## 2023-09-26 01:13:58
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.91.0 (2.129.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.24.0] entity
+
+## 2023-09-27 01:14:11
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.91.2 (2.131.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.24.1] entity
+
+## 2023-09-29 01:13:36
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.91.3 (2.139.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.25.0] entity
+
+## 2023-10-01 01:22:52
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.92.2 (2.142.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.26.0] entity
+
+## 2023-10-02 01:14:30
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.92.3 (2.143.2) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.26.1] entity
+
+## 2023-10-05 01:14:15
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.94.0 (2.147.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.26.2] entity
+
+## 2023-10-07 01:12:55
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.96.1 (2.150.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.27.0] entity
+
+## 2023-10-13 01:15:59
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.99.1 (2.154.1) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.27.1] entity
+
+## 2023-10-18 01:14:28
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.101.0 (2.161.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.0.0] entity
+
+## 2023-10-21 01:12:09
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.104.0 (2.169.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.0] entity
+
+## 2023-10-23 01:14:22
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.104.0 (2.169.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.1] entity
+
+## 2023-10-24 01:13:56
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.105.0 (2.169.3) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.2] entity
+
+## 2023-10-25 01:13:51
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.107.0 (2.171.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.3] entity
+
+## 2023-10-28 01:11:29
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.109.0 (2.173.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.4] entity
+
+## 2023-11-01 01:18:34
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.api.epilot.io/entity.yaml
+- Speakeasy CLI 1.109.2 (2.173.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v2.1.5] entity
\ No newline at end of file
diff --git a/entity/USAGE.md b/entity/USAGE.md
index 7de411ee1..24193e39b 100755
--- a/entity/USAGE.md
+++ b/entity/USAGE.md
@@ -1,27 +1,27 @@
+
+
```python
import epilot
from epilot.models import operations, shared
s = epilot.Epilot(
security=shared.Security(
- epilot_auth="Bearer YOUR_BEARER_TOKEN_HERE",
+ epilot_auth="",
),
)
-
req = operations.AttachActivityRequest(
entities=[
- "9bd9d8d6-9a67-44e0-b467-cc8796ed151a",
- "05dfc2dd-f7cc-478c-a1ba-928fc816742c",
- "b7392059-2939-46fe-a759-6eb10faaa235",
+ 'ee1dee63-2954-4671-8246-751c43fec091',
],
- id="01F130Q52Q6MWSNS8N2AVXV4JN",
+ id='01F130Q52Q6MWSNS8N2AVXV4JN',
)
-
+
res = s.activity.attach_activity(req)
if res.activity_item is not None:
# handle response
+ pass
```
\ No newline at end of file
diff --git a/entity/docs/models/operations/addrelationsrequest.md b/entity/docs/models/operations/addrelationsrequest.md
new file mode 100755
index 000000000..911ab25a8
--- /dev/null
+++ b/entity/docs/models/operations/addrelationsrequest.md
@@ -0,0 +1,12 @@
+# AddRelationsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request_body` | List[[shared.RelationItem](../../models/shared/relationitem.md)] | :heavy_minus_sign: | N/A | |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/addrelationsresponse.md b/entity/docs/models/operations/addrelationsresponse.md
new file mode 100755
index 000000000..6001b8933
--- /dev/null
+++ b/entity/docs/models/operations/addrelationsresponse.md
@@ -0,0 +1,11 @@
+# AddRelationsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `relation_item` | [Optional[shared.RelationItem]](../../models/shared/relationitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/attachactivityrequest.md b/entity/docs/models/operations/attachactivityrequest.md
new file mode 100755
index 000000000..86bfd18fc
--- /dev/null
+++ b/entity/docs/models/operations/attachactivityrequest.md
@@ -0,0 +1,9 @@
+# AttachActivityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `entities` | List[*str*] | :heavy_minus_sign: | Comma-separated list of entities which the activity primarily concerns | |
+| `id` | *str* | :heavy_check_mark: | Activity Id | 01F130Q52Q6MWSNS8N2AVXV4JN |
\ No newline at end of file
diff --git a/entity/docs/models/operations/attachactivityresponse.md b/entity/docs/models/operations/attachactivityresponse.md
new file mode 100755
index 000000000..78ed39dc2
--- /dev/null
+++ b/entity/docs/models/operations/attachactivityresponse.md
@@ -0,0 +1,11 @@
+# AttachActivityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `activity_item` | [Optional[shared.ActivityItem]](../../models/shared/activityitem.md) | :heavy_minus_sign: | Success |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/autocomplete200applicationjson.md b/entity/docs/models/operations/autocomplete200applicationjson.md
new file mode 100755
index 000000000..a861c108d
--- /dev/null
+++ b/entity/docs/models/operations/autocomplete200applicationjson.md
@@ -0,0 +1,11 @@
+# Autocomplete200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `hits` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 |
+| `results` | List[[Union[str, bool, Dict[str, Any]]](../../models/operations/autocomplete200applicationjsonresults.md)] | :heavy_minus_sign: | N/A | value |
\ No newline at end of file
diff --git a/entity/docs/models/operations/autocomplete200applicationjsonresults.md b/entity/docs/models/operations/autocomplete200applicationjsonresults.md
new file mode 100755
index 000000000..9ee1890ec
--- /dev/null
+++ b/entity/docs/models/operations/autocomplete200applicationjsonresults.md
@@ -0,0 +1,23 @@
+# Autocomplete200ApplicationJSONResults
+
+
+## Supported Types
+
+###
+
+```python
+autocomplete200ApplicationJSONResults: str = /* values here */
+```
+
+###
+
+```python
+autocomplete200ApplicationJSONResults: bool = /* values here */
+```
+
+###
+
+```python
+autocomplete200ApplicationJSONResults: Dict[str, Any] = /* values here */
+```
+
diff --git a/entity/docs/models/operations/autocompleterequest.md b/entity/docs/models/operations/autocompleterequest.md
new file mode 100755
index 000000000..788da2934
--- /dev/null
+++ b/entity/docs/models/operations/autocompleterequest.md
@@ -0,0 +1,11 @@
+# AutocompleteRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `attribute` | *str* | :heavy_check_mark: | Autocomplete attribute | _tags |
+| `input` | *Optional[str]* | :heavy_minus_sign: | Input to autocomplete | |
+| `size` | *Optional[int]* | :heavy_minus_sign: | Maximum number of results to return | |
+| `slug` | *Optional[str]* | :heavy_minus_sign: | Limit results to entity schema | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/autocompleteresponse.md b/entity/docs/models/operations/autocompleteresponse.md
new file mode 100755
index 000000000..8f820dff9
--- /dev/null
+++ b/entity/docs/models/operations/autocompleteresponse.md
@@ -0,0 +1,11 @@
+# AutocompleteResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `autocomplete_200_application_json_object` | [Optional[Autocomplete200ApplicationJSON]](../../models/operations/autocomplete200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/createactivityrequest.md b/entity/docs/models/operations/createactivityrequest.md
new file mode 100755
index 000000000..55e99f092
--- /dev/null
+++ b/entity/docs/models/operations/createactivityrequest.md
@@ -0,0 +1,9 @@
+# CreateActivityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `activity` | [Optional[shared.Activity]](../../models/shared/activity.md) | :heavy_minus_sign: | N/A |
+| `entities` | List[*str*] | :heavy_minus_sign: | Comma-separated list of entities which the activity primarily concerns |
\ No newline at end of file
diff --git a/entity/docs/models/operations/createactivityresponse.md b/entity/docs/models/operations/createactivityresponse.md
new file mode 100755
index 000000000..81bd58bde
--- /dev/null
+++ b/entity/docs/models/operations/createactivityresponse.md
@@ -0,0 +1,11 @@
+# CreateActivityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `activity_item` | [Optional[shared.ActivityItem]](../../models/shared/activityitem.md) | :heavy_minus_sign: | Success |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/createentityrequest.md b/entity/docs/models/operations/createentityrequest.md
new file mode 100755
index 000000000..42257e042
--- /dev/null
+++ b/entity/docs/models/operations/createentityrequest.md
@@ -0,0 +1,11 @@
+# CreateEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `entity` | [Optional[shared.Entity]](../../models/shared/entity.md) | :heavy_minus_sign: | N/A | |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/createentityresponse.md b/entity/docs/models/operations/createentityresponse.md
new file mode 100755
index 000000000..b63d7c5d6
--- /dev/null
+++ b/entity/docs/models/operations/createentityresponse.md
@@ -0,0 +1,11 @@
+# CreateEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_item` | [Optional[shared.EntityItem]](../../models/shared/entityitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/createsavedviewresponse.md b/entity/docs/models/operations/createsavedviewresponse.md
new file mode 100755
index 000000000..c40e1dc1e
--- /dev/null
+++ b/entity/docs/models/operations/createsavedviewresponse.md
@@ -0,0 +1,11 @@
+# CreateSavedViewResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `saved_view_item` | [Optional[shared.SavedViewItem]](../../models/shared/savedviewitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deleteentityrequest.md b/entity/docs/models/operations/deleteentityrequest.md
new file mode 100755
index 000000000..b456f7821
--- /dev/null
+++ b/entity/docs/models/operations/deleteentityrequest.md
@@ -0,0 +1,10 @@
+# DeleteEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deleteentityresponse.md b/entity/docs/models/operations/deleteentityresponse.md
new file mode 100755
index 000000000..1ff556201
--- /dev/null
+++ b/entity/docs/models/operations/deleteentityresponse.md
@@ -0,0 +1,10 @@
+# DeleteEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deleterelationrequest.md b/entity/docs/models/operations/deleterelationrequest.md
new file mode 100755
index 000000000..e20e7c9a2
--- /dev/null
+++ b/entity/docs/models/operations/deleterelationrequest.md
@@ -0,0 +1,13 @@
+# DeleteRelationRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `attribute` | *str* | :heavy_check_mark: | The attribute that express meaning | |
+| `entity_id` | *str* | :heavy_check_mark: | The attribute that express meaning | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deleterelationresponse.md b/entity/docs/models/operations/deleterelationresponse.md
new file mode 100755
index 000000000..1c6ddb31d
--- /dev/null
+++ b/entity/docs/models/operations/deleterelationresponse.md
@@ -0,0 +1,10 @@
+# DeleteRelationResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deletesavedviewrequest.md b/entity/docs/models/operations/deletesavedviewrequest.md
new file mode 100755
index 000000000..2d3befa8e
--- /dev/null
+++ b/entity/docs/models/operations/deletesavedviewrequest.md
@@ -0,0 +1,8 @@
+# DeleteSavedViewRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *str* | :heavy_check_mark: | View id |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deletesavedviewresponse.md b/entity/docs/models/operations/deletesavedviewresponse.md
new file mode 100755
index 000000000..1be59ea6d
--- /dev/null
+++ b/entity/docs/models/operations/deletesavedviewresponse.md
@@ -0,0 +1,10 @@
+# DeleteSavedViewResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deleteschemarequest.md b/entity/docs/models/operations/deleteschemarequest.md
new file mode 100755
index 000000000..8c104d0df
--- /dev/null
+++ b/entity/docs/models/operations/deleteschemarequest.md
@@ -0,0 +1,8 @@
+# DeleteSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/deleteschemaresponse.md b/entity/docs/models/operations/deleteschemaresponse.md
new file mode 100755
index 000000000..9c6e1c201
--- /dev/null
+++ b/entity/docs/models/operations/deleteschemaresponse.md
@@ -0,0 +1,10 @@
+# DeleteSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/exportentitiesrequest.md b/entity/docs/models/operations/exportentitiesrequest.md
new file mode 100755
index 000000000..7143d4571
--- /dev/null
+++ b/entity/docs/models/operations/exportentitiesrequest.md
@@ -0,0 +1,11 @@
+# ExportEntitiesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `entity_search_params` | [Optional[shared.EntitySearchParams]](../../models/shared/entitysearchparams.md) | :heavy_minus_sign: | N/A | |
+| `is_template` | *Optional[bool]* | :heavy_minus_sign: | Pass 'true' to generate import template | |
+| `job_id` | *Optional[str]* | :heavy_minus_sign: | Export Job Id to get the result | abc123 |
+| `language` | *Optional[str]* | :heavy_minus_sign: | Export headers translation language | |
\ No newline at end of file
diff --git a/entity/docs/models/operations/exportentitiesresponse.md b/entity/docs/models/operations/exportentitiesresponse.md
new file mode 100755
index 000000000..f5039e620
--- /dev/null
+++ b/entity/docs/models/operations/exportentitiesresponse.md
@@ -0,0 +1,10 @@
+# ExportEntitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getactivityrequest.md b/entity/docs/models/operations/getactivityrequest.md
new file mode 100755
index 000000000..b0e3dff9a
--- /dev/null
+++ b/entity/docs/models/operations/getactivityrequest.md
@@ -0,0 +1,10 @@
+# GetActivityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `id` | *str* | :heavy_check_mark: | Activity Id | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `operations_from` | *Optional[int]* | :heavy_minus_sign: | Pagination offset for operations
| |
+| `operations_size` | *Optional[int]* | :heavy_minus_sign: | Maximum number of operations to include in response (default: 10)
| |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getactivityresponse.md b/entity/docs/models/operations/getactivityresponse.md
new file mode 100755
index 000000000..98ce41384
--- /dev/null
+++ b/entity/docs/models/operations/getactivityresponse.md
@@ -0,0 +1,11 @@
+# GetActivityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `activity_item` | [Optional[shared.ActivityItem]](../../models/shared/activityitem.md) | :heavy_minus_sign: | Success |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getentity200applicationjson.md b/entity/docs/models/operations/getentity200applicationjson.md
new file mode 100755
index 000000000..8b68b39bb
--- /dev/null
+++ b/entity/docs/models/operations/getentity200applicationjson.md
@@ -0,0 +1,11 @@
+# GetEntity200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `entity` | [Optional[shared.EntityItem]](../../models/shared/entityitem.md) | :heavy_minus_sign: | N/A |
+| `relations` | List[[shared.EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getentityactivityfeed200applicationjson.md b/entity/docs/models/operations/getentityactivityfeed200applicationjson.md
new file mode 100755
index 000000000..a19ff44ab
--- /dev/null
+++ b/entity/docs/models/operations/getentityactivityfeed200applicationjson.md
@@ -0,0 +1,11 @@
+# GetEntityActivityFeed200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `results` | List[[shared.ActivityItem](../../models/shared/activityitem.md)] | :heavy_minus_sign: | N/A | |
+| `total` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getentityactivityfeedrequest.md b/entity/docs/models/operations/getentityactivityfeedrequest.md
new file mode 100755
index 000000000..98e4998a1
--- /dev/null
+++ b/entity/docs/models/operations/getentityactivityfeedrequest.md
@@ -0,0 +1,15 @@
+# GetEntityActivityFeedRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `after` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | Get activities after this timestamp | |
+| `before` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | get activities before this timestamp | |
+| `from_` | *Optional[int]* | :heavy_minus_sign: | Starting page number | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `include_relations` | *Optional[bool]* | :heavy_minus_sign: | Include activities from related entities | |
+| `size` | *Optional[int]* | :heavy_minus_sign: | max number of results to return | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
+| `type` | *Optional[str]* | :heavy_minus_sign: | Filter by activity type | SyncActivity |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getentityactivityfeedresponse.md b/entity/docs/models/operations/getentityactivityfeedresponse.md
new file mode 100755
index 000000000..79a167013
--- /dev/null
+++ b/entity/docs/models/operations/getentityactivityfeedresponse.md
@@ -0,0 +1,11 @@
+# GetEntityActivityFeedResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_entity_activity_feed_200_application_json_object` | [Optional[GetEntityActivityFeed200ApplicationJSON]](../../models/operations/getentityactivityfeed200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getentityrequest.md b/entity/docs/models/operations/getentityrequest.md
new file mode 100755
index 000000000..3b1f862d1
--- /dev/null
+++ b/entity/docs/models/operations/getentityrequest.md
@@ -0,0 +1,10 @@
+# GetEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `hydrate` | *Optional[bool]* | :heavy_minus_sign: | When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place. | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getentityresponse.md b/entity/docs/models/operations/getentityresponse.md
new file mode 100755
index 000000000..51acec577
--- /dev/null
+++ b/entity/docs/models/operations/getentityresponse.md
@@ -0,0 +1,11 @@
+# GetEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_entity_200_application_json_object` | [Optional[GetEntity200ApplicationJSON]](../../models/operations/getentity200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelatedentitiescountrequest.md b/entity/docs/models/operations/getrelatedentitiescountrequest.md
new file mode 100755
index 000000000..6f8be471a
--- /dev/null
+++ b/entity/docs/models/operations/getrelatedentitiescountrequest.md
@@ -0,0 +1,10 @@
+# GetRelatedEntitiesCountRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `exclude_schemas` | List[*str*] | :heavy_minus_sign: | Filter results to exclude schemas | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelatedentitiescountresponse.md b/entity/docs/models/operations/getrelatedentitiescountresponse.md
new file mode 100755
index 000000000..a930915f4
--- /dev/null
+++ b/entity/docs/models/operations/getrelatedentitiescountresponse.md
@@ -0,0 +1,11 @@
+# GetRelatedEntitiesCountResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `get_related_entities_count` | [Optional[shared.GetRelatedEntitiesCount]](../../models/shared/getrelatedentitiescount.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelationsrequest.md b/entity/docs/models/operations/getrelationsrequest.md
new file mode 100755
index 000000000..7edbc6270
--- /dev/null
+++ b/entity/docs/models/operations/getrelationsrequest.md
@@ -0,0 +1,15 @@
+# GetRelationsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `exclude_schemas` | List[*str*] | :heavy_minus_sign: | Filter results to exclude schemas | |
+| `from_` | *Optional[int]* | :heavy_minus_sign: | Starting page number | |
+| `hydrate` | *Optional[bool]* | :heavy_minus_sign: | When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place. | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `include_reverse` | *Optional[bool]* | :heavy_minus_sign: | When true, includes reverse relations in response (other entities pointing to this entity) | |
+| `include_schemas` | List[*str*] | :heavy_minus_sign: | Filter results to only include schemas | |
+| `size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelationsresponse.md b/entity/docs/models/operations/getrelationsresponse.md
new file mode 100755
index 000000000..ad56da2e4
--- /dev/null
+++ b/entity/docs/models/operations/getrelationsresponse.md
@@ -0,0 +1,11 @@
+# GetRelationsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `get_relations_resp` | List[[Union[shared.RelationItem, shared.RelationEntity]](../../models/shared/getrelationsresp.md)] | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelationsv2request.md b/entity/docs/models/operations/getrelationsv2request.md
new file mode 100755
index 000000000..4149c6dff
--- /dev/null
+++ b/entity/docs/models/operations/getrelationsv2request.md
@@ -0,0 +1,15 @@
+# GetRelationsV2Request
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `fields` | List[*str*] | :heavy_minus_sign: | List of entity fields to include in results | _id,_schema,_title |
+| `from_` | *Optional[int]* | :heavy_minus_sign: | Starting page number | |
+| `hydrate` | *Optional[bool]* | :heavy_minus_sign: | When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place. | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `include_reverse` | *Optional[bool]* | :heavy_minus_sign: | When true, includes reverse relations in response (other entities pointing to this entity) | |
+| `query` | *Optional[str]* | :heavy_minus_sign: | Input to filter search results | |
+| `size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelationsv2response.md b/entity/docs/models/operations/getrelationsv2response.md
new file mode 100755
index 000000000..1f3d24b91
--- /dev/null
+++ b/entity/docs/models/operations/getrelationsv2response.md
@@ -0,0 +1,11 @@
+# GetRelationsV2Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `get_relations_resp_with_pagination` | [Optional[shared.GetRelationsRespWithPagination]](../../models/shared/getrelationsrespwithpagination.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelationsv3request.md b/entity/docs/models/operations/getrelationsv3request.md
new file mode 100755
index 000000000..a7db9d1cf
--- /dev/null
+++ b/entity/docs/models/operations/getrelationsv3request.md
@@ -0,0 +1,15 @@
+# GetRelationsV3Request
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `exclude_schemas` | List[*str*] | :heavy_minus_sign: | Filter results to exclude schemas | |
+| `from_` | *Optional[int]* | :heavy_minus_sign: | Starting page number | |
+| `hydrate` | *Optional[bool]* | :heavy_minus_sign: | When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place. | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `include_reverse` | *Optional[bool]* | :heavy_minus_sign: | When true, includes reverse relations in response (other entities pointing to this entity) | |
+| `include_schemas` | List[*str*] | :heavy_minus_sign: | Filter results to only include schemas | |
+| `size` | *Optional[int]* | :heavy_minus_sign: | Number of results to return per page | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getrelationsv3response.md b/entity/docs/models/operations/getrelationsv3response.md
new file mode 100755
index 000000000..9a7f44fba
--- /dev/null
+++ b/entity/docs/models/operations/getrelationsv3response.md
@@ -0,0 +1,11 @@
+# GetRelationsV3Response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `get_relations_resp_with_pagination` | [Optional[shared.GetRelationsRespWithPagination]](../../models/shared/getrelationsrespwithpagination.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getsavedview200applicationjson.md b/entity/docs/models/operations/getsavedview200applicationjson.md
new file mode 100755
index 000000000..882160635
--- /dev/null
+++ b/entity/docs/models/operations/getsavedview200applicationjson.md
@@ -0,0 +1,10 @@
+# GetSavedView200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `view` | [Optional[shared.SavedViewItem]](../../models/shared/savedviewitem.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getsavedviewrequest.md b/entity/docs/models/operations/getsavedviewrequest.md
new file mode 100755
index 000000000..926155d37
--- /dev/null
+++ b/entity/docs/models/operations/getsavedviewrequest.md
@@ -0,0 +1,8 @@
+# GetSavedViewRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *str* | :heavy_check_mark: | View id |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getsavedviewresponse.md b/entity/docs/models/operations/getsavedviewresponse.md
new file mode 100755
index 000000000..84207c031
--- /dev/null
+++ b/entity/docs/models/operations/getsavedviewresponse.md
@@ -0,0 +1,11 @@
+# GetSavedViewResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_saved_view_200_application_json_object` | [Optional[GetSavedView200ApplicationJSON]](../../models/operations/getsavedview200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getschemarequest.md b/entity/docs/models/operations/getschemarequest.md
new file mode 100755
index 000000000..6fe00fc7d
--- /dev/null
+++ b/entity/docs/models/operations/getschemarequest.md
@@ -0,0 +1,9 @@
+# GetSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getschemaresponse.md b/entity/docs/models/operations/getschemaresponse.md
new file mode 100755
index 000000000..7c661e329
--- /dev/null
+++ b/entity/docs/models/operations/getschemaresponse.md
@@ -0,0 +1,11 @@
+# GetSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_schema_item` | [Optional[shared.EntitySchemaItem]](../../models/shared/entityschemaitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getschemaversions200applicationjson.md b/entity/docs/models/operations/getschemaversions200applicationjson.md
new file mode 100755
index 000000000..1cbbadab6
--- /dev/null
+++ b/entity/docs/models/operations/getschemaversions200applicationjson.md
@@ -0,0 +1,11 @@
+# GetSchemaVersions200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `drafts` | List[[shared.EntitySchemaItem](../../models/shared/entityschemaitem.md)] | :heavy_minus_sign: | N/A |
+| `versions` | List[[shared.EntitySchemaItem](../../models/shared/entityschemaitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getschemaversionsrequest.md b/entity/docs/models/operations/getschemaversionsrequest.md
new file mode 100755
index 000000000..89dec35be
--- /dev/null
+++ b/entity/docs/models/operations/getschemaversionsrequest.md
@@ -0,0 +1,12 @@
+# GetSchemaVersionsRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `drafts_from` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `drafts_size` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
+| `versions_from` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `versions_size` | *Optional[float]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/operations/getschemaversionsresponse.md b/entity/docs/models/operations/getschemaversionsresponse.md
new file mode 100755
index 000000000..16df859a3
--- /dev/null
+++ b/entity/docs/models/operations/getschemaversionsresponse.md
@@ -0,0 +1,11 @@
+# GetSchemaVersionsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `get_schema_versions_200_application_json_object` | [Optional[GetSchemaVersions200ApplicationJSON]](../../models/operations/getschemaversions200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/gettaxonomyrequest.md b/entity/docs/models/operations/gettaxonomyrequest.md
new file mode 100755
index 000000000..a0fc1bb0d
--- /dev/null
+++ b/entity/docs/models/operations/gettaxonomyrequest.md
@@ -0,0 +1,8 @@
+# GetTaxonomyRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `taxonomy_slug` | *str* | :heavy_check_mark: | Taxonomy slug |
\ No newline at end of file
diff --git a/entity/docs/models/operations/gettaxonomyresponse.md b/entity/docs/models/operations/gettaxonomyresponse.md
new file mode 100755
index 000000000..c4407cd22
--- /dev/null
+++ b/entity/docs/models/operations/gettaxonomyresponse.md
@@ -0,0 +1,11 @@
+# GetTaxonomyResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `taxonomy` | [Optional[shared.Taxonomy]](../../models/shared/taxonomy.md) | :heavy_minus_sign: | Taxonomy |
\ No newline at end of file
diff --git a/entity/docs/models/operations/importentitiesrequest.md b/entity/docs/models/operations/importentitiesrequest.md
new file mode 100755
index 000000000..29780c4c1
--- /dev/null
+++ b/entity/docs/models/operations/importentitiesrequest.md
@@ -0,0 +1,9 @@
+# ImportEntitiesRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `entity_import_params` | [Optional[shared.EntityImportParams]](../../models/shared/entityimportparams.md) | :heavy_minus_sign: | N/A | |
+| `job_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the import job. This ID is used to track the progress and fetch the result of the import operation. | abc123 |
\ No newline at end of file
diff --git a/entity/docs/models/operations/importentitiesresponse.md b/entity/docs/models/operations/importentitiesresponse.md
new file mode 100755
index 000000000..39f37b821
--- /dev/null
+++ b/entity/docs/models/operations/importentitiesresponse.md
@@ -0,0 +1,10 @@
+# ImportEntitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listfavoriteviewsforuser200applicationjson.md b/entity/docs/models/operations/listfavoriteviewsforuser200applicationjson.md
new file mode 100755
index 000000000..7d41cb21c
--- /dev/null
+++ b/entity/docs/models/operations/listfavoriteviewsforuser200applicationjson.md
@@ -0,0 +1,10 @@
+# ListFavoriteViewsForUser200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `results` | List[[shared.SavedViewItem](../../models/shared/savedviewitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listfavoriteviewsforuserresponse.md b/entity/docs/models/operations/listfavoriteviewsforuserresponse.md
new file mode 100755
index 000000000..b857e12ff
--- /dev/null
+++ b/entity/docs/models/operations/listfavoriteviewsforuserresponse.md
@@ -0,0 +1,11 @@
+# ListFavoriteViewsForUserResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_favorite_views_for_user_200_application_json_object` | [Optional[ListFavoriteViewsForUser200ApplicationJSON]](../../models/operations/listfavoriteviewsforuser200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listsavedviews200applicationjson.md b/entity/docs/models/operations/listsavedviews200applicationjson.md
new file mode 100755
index 000000000..119d02ea0
--- /dev/null
+++ b/entity/docs/models/operations/listsavedviews200applicationjson.md
@@ -0,0 +1,10 @@
+# ListSavedViews200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `results` | List[[shared.SavedViewItem](../../models/shared/savedviewitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listsavedviewsresponse.md b/entity/docs/models/operations/listsavedviewsresponse.md
new file mode 100755
index 000000000..89fb9157e
--- /dev/null
+++ b/entity/docs/models/operations/listsavedviewsresponse.md
@@ -0,0 +1,11 @@
+# ListSavedViewsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_saved_views_200_application_json_object` | [Optional[ListSavedViews200ApplicationJSON]](../../models/operations/listsavedviews200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listschemablueprints200applicationjson.md b/entity/docs/models/operations/listschemablueprints200applicationjson.md
new file mode 100755
index 000000000..e65ce25b4
--- /dev/null
+++ b/entity/docs/models/operations/listschemablueprints200applicationjson.md
@@ -0,0 +1,10 @@
+# ListSchemaBlueprints200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `results` | List[[shared.EntitySchemaItem](../../models/shared/entityschemaitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listschemablueprintsresponse.md b/entity/docs/models/operations/listschemablueprintsresponse.md
new file mode 100755
index 000000000..779aa958f
--- /dev/null
+++ b/entity/docs/models/operations/listschemablueprintsresponse.md
@@ -0,0 +1,11 @@
+# ListSchemaBlueprintsResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_schema_blueprints_200_application_json_object` | [Optional[ListSchemaBlueprints200ApplicationJSON]](../../models/operations/listschemablueprints200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listschemas200applicationjson.md b/entity/docs/models/operations/listschemas200applicationjson.md
new file mode 100755
index 000000000..8b0555f3a
--- /dev/null
+++ b/entity/docs/models/operations/listschemas200applicationjson.md
@@ -0,0 +1,10 @@
+# ListSchemas200ApplicationJSON
+
+Success
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `results` | List[[shared.EntitySchemaItem](../../models/shared/entityschemaitem.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listschemasrequest.md b/entity/docs/models/operations/listschemasrequest.md
new file mode 100755
index 000000000..9d5189ba9
--- /dev/null
+++ b/entity/docs/models/operations/listschemasrequest.md
@@ -0,0 +1,8 @@
+# ListSchemasRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `unpublished` | *Optional[bool]* | :heavy_minus_sign: | Return unpublished draft schemas |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listschemasresponse.md b/entity/docs/models/operations/listschemasresponse.md
new file mode 100755
index 000000000..000d9c8e2
--- /dev/null
+++ b/entity/docs/models/operations/listschemasresponse.md
@@ -0,0 +1,11 @@
+# ListSchemasResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_schemas_200_application_json_object` | [Optional[ListSchemas200ApplicationJSON]](../../models/operations/listschemas200applicationjson.md) | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listtaxonomies200applicationjson.md b/entity/docs/models/operations/listtaxonomies200applicationjson.md
new file mode 100755
index 000000000..0db943e4c
--- /dev/null
+++ b/entity/docs/models/operations/listtaxonomies200applicationjson.md
@@ -0,0 +1,10 @@
+# ListTaxonomies200ApplicationJSON
+
+Returns list of taxonomies in an organisation
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `results` | List[[shared.Taxonomy](../../models/shared/taxonomy.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listtaxonomiesresponse.md b/entity/docs/models/operations/listtaxonomiesresponse.md
new file mode 100755
index 000000000..781676fee
--- /dev/null
+++ b/entity/docs/models/operations/listtaxonomiesresponse.md
@@ -0,0 +1,11 @@
+# ListTaxonomiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_taxonomies_200_application_json_object` | [Optional[ListTaxonomies200ApplicationJSON]](../../models/operations/listtaxonomies200applicationjson.md) | :heavy_minus_sign: | Returns list of taxonomies in an organisation |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listtaxonomyclassificationsforschema200applicationjson.md b/entity/docs/models/operations/listtaxonomyclassificationsforschema200applicationjson.md
new file mode 100755
index 000000000..82004af91
--- /dev/null
+++ b/entity/docs/models/operations/listtaxonomyclassificationsforschema200applicationjson.md
@@ -0,0 +1,10 @@
+# ListTaxonomyClassificationsForSchema200ApplicationJSON
+
+List of taxonomy classifications
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `results` | List[[shared.TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listtaxonomyclassificationsforschemarequest.md b/entity/docs/models/operations/listtaxonomyclassificationsforschemarequest.md
new file mode 100755
index 000000000..55ab5ecfa
--- /dev/null
+++ b/entity/docs/models/operations/listtaxonomyclassificationsforschemarequest.md
@@ -0,0 +1,11 @@
+# ListTaxonomyClassificationsForSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `query` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
+| `taxonomy_slug` | *str* | :heavy_check_mark: | Taxonomy slug | |
\ No newline at end of file
diff --git a/entity/docs/models/operations/listtaxonomyclassificationsforschemaresponse.md b/entity/docs/models/operations/listtaxonomyclassificationsforschemaresponse.md
new file mode 100755
index 000000000..c31eb9a54
--- /dev/null
+++ b/entity/docs/models/operations/listtaxonomyclassificationsforschemaresponse.md
@@ -0,0 +1,11 @@
+# ListTaxonomyClassificationsForSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `list_taxonomy_classifications_for_schema_200_application_json_object` | [Optional[ListTaxonomyClassificationsForSchema200ApplicationJSON]](../../models/operations/listtaxonomyclassificationsforschema200applicationjson.md) | :heavy_minus_sign: | List of taxonomy classifications |
\ No newline at end of file
diff --git a/entity/docs/models/operations/patchentityrequest.md b/entity/docs/models/operations/patchentityrequest.md
new file mode 100755
index 000000000..84235986b
--- /dev/null
+++ b/entity/docs/models/operations/patchentityrequest.md
@@ -0,0 +1,13 @@
+# PatchEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `entity` | [shared.Entity](../../models/shared/entity.md) | :heavy_check_mark: | N/A | |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `dry_run` | *Optional[bool]* | :heavy_minus_sign: | Dry Run mode = return results but does not perform the operation. | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/patchentityresponse.md b/entity/docs/models/operations/patchentityresponse.md
new file mode 100755
index 000000000..8d19f1d75
--- /dev/null
+++ b/entity/docs/models/operations/patchentityresponse.md
@@ -0,0 +1,11 @@
+# PatchEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_item` | [Optional[shared.EntityItem]](../../models/shared/entityitem.md) | :heavy_minus_sign: | Entity was updated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/putschemarequest.md b/entity/docs/models/operations/putschemarequest.md
new file mode 100755
index 000000000..65ea185dd
--- /dev/null
+++ b/entity/docs/models/operations/putschemarequest.md
@@ -0,0 +1,10 @@
+# PutSchemaRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `entity_schema` | [Optional[shared.EntitySchema]](../../models/shared/entityschema.md) | :heavy_minus_sign: | N/A | |
+| `draft` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/putschemaresponse.md b/entity/docs/models/operations/putschemaresponse.md
new file mode 100755
index 000000000..1a7de73be
--- /dev/null
+++ b/entity/docs/models/operations/putschemaresponse.md
@@ -0,0 +1,11 @@
+# PutSchemaResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_schema_item` | [Optional[shared.EntitySchemaItem]](../../models/shared/entityschemaitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/searchentitiesresponse.md b/entity/docs/models/operations/searchentitiesresponse.md
new file mode 100755
index 000000000..99f85991b
--- /dev/null
+++ b/entity/docs/models/operations/searchentitiesresponse.md
@@ -0,0 +1,12 @@
+# SearchEntitiesResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_search_results` | [Optional[shared.EntitySearchResults]](../../models/shared/entitysearchresults.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `search_entities_200_text_csv_string` | *Optional[str]* | :heavy_minus_sign: | Success |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomiesclassificationssearch200applicationjson.md b/entity/docs/models/operations/taxonomiesclassificationssearch200applicationjson.md
new file mode 100755
index 000000000..f168c0c5e
--- /dev/null
+++ b/entity/docs/models/operations/taxonomiesclassificationssearch200applicationjson.md
@@ -0,0 +1,10 @@
+# TaxonomiesClassificationsSearch200ApplicationJSON
+
+Returns list of taxonomy classifications
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `results` | List[[shared.TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomiesclassificationssearchrequest.md b/entity/docs/models/operations/taxonomiesclassificationssearchrequest.md
new file mode 100755
index 000000000..72c3d46d5
--- /dev/null
+++ b/entity/docs/models/operations/taxonomiesclassificationssearchrequest.md
@@ -0,0 +1,9 @@
+# TaxonomiesClassificationsSearchRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `request_body` | [Optional[TaxonomiesClassificationsSearchRequestBody]](../../models/operations/taxonomiesclassificationssearchrequestbody.md) | :heavy_minus_sign: | N/A |
+| `taxonomy_slug` | *str* | :heavy_check_mark: | Taxonomy slug |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomiesclassificationssearchrequestbody.md b/entity/docs/models/operations/taxonomiesclassificationssearchrequestbody.md
new file mode 100755
index 000000000..25a355308
--- /dev/null
+++ b/entity/docs/models/operations/taxonomiesclassificationssearchrequestbody.md
@@ -0,0 +1,8 @@
+# TaxonomiesClassificationsSearchRequestBody
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------- | -------------------- | -------------------- | -------------------- |
+| `classification_ids` | List[*str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomiesclassificationssearchresponse.md b/entity/docs/models/operations/taxonomiesclassificationssearchresponse.md
new file mode 100755
index 000000000..90328113f
--- /dev/null
+++ b/entity/docs/models/operations/taxonomiesclassificationssearchresponse.md
@@ -0,0 +1,11 @@
+# TaxonomiesClassificationsSearchResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `taxonomies_classifications_search_200_application_json_object` | [Optional[TaxonomiesClassificationsSearch200ApplicationJSON]](../../models/operations/taxonomiesclassificationssearch200applicationjson.md) | :heavy_minus_sign: | Returns list of taxonomy classifications |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomyautocomplete200applicationjson.md b/entity/docs/models/operations/taxonomyautocomplete200applicationjson.md
new file mode 100755
index 000000000..6d3f7a5a4
--- /dev/null
+++ b/entity/docs/models/operations/taxonomyautocomplete200applicationjson.md
@@ -0,0 +1,10 @@
+# TaxonomyAutocomplete200ApplicationJSON
+
+Taxonomy classifications
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `results` | List[[shared.TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomyautocompleterequest.md b/entity/docs/models/operations/taxonomyautocompleterequest.md
new file mode 100755
index 000000000..3c7a757e4
--- /dev/null
+++ b/entity/docs/models/operations/taxonomyautocompleterequest.md
@@ -0,0 +1,10 @@
+# TaxonomyAutocompleteRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `query` | *Optional[str]* | :heavy_minus_sign: | Input to autocomplete |
+| `size` | *Optional[float]* | :heavy_minus_sign: | Minimum number of results to return |
+| `taxonomy_slug` | *str* | :heavy_check_mark: | Taxonomy slug |
\ No newline at end of file
diff --git a/entity/docs/models/operations/taxonomyautocompleteresponse.md b/entity/docs/models/operations/taxonomyautocompleteresponse.md
new file mode 100755
index 000000000..fb8e9b28c
--- /dev/null
+++ b/entity/docs/models/operations/taxonomyautocompleteresponse.md
@@ -0,0 +1,11 @@
+# TaxonomyAutocompleteResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `taxonomy_autocomplete_200_application_json_object` | [Optional[TaxonomyAutocomplete200ApplicationJSON]](../../models/operations/taxonomyautocomplete200applicationjson.md) | :heavy_minus_sign: | Taxonomy classifications |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updateclassificationsfortaxonomy200applicationjson.md b/entity/docs/models/operations/updateclassificationsfortaxonomy200applicationjson.md
new file mode 100755
index 000000000..d1b75fcf8
--- /dev/null
+++ b/entity/docs/models/operations/updateclassificationsfortaxonomy200applicationjson.md
@@ -0,0 +1,12 @@
+# UpdateClassificationsForTaxonomy200ApplicationJSON
+
+Taxonomies classifications
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `created` | List[[shared.TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
+| `deleted` | [Optional[UpdateClassificationsForTaxonomy200ApplicationJSONDeleted]](../../models/operations/updateclassificationsfortaxonomy200applicationjsondeleted.md) | :heavy_minus_sign: | N/A |
+| `updated` | List[[shared.TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updateclassificationsfortaxonomy200applicationjsondeleted.md b/entity/docs/models/operations/updateclassificationsfortaxonomy200applicationjsondeleted.md
new file mode 100755
index 000000000..7f8d20922
--- /dev/null
+++ b/entity/docs/models/operations/updateclassificationsfortaxonomy200applicationjsondeleted.md
@@ -0,0 +1,7 @@
+# UpdateClassificationsForTaxonomy200ApplicationJSONDeleted
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updateclassificationsfortaxonomyrequest.md b/entity/docs/models/operations/updateclassificationsfortaxonomyrequest.md
new file mode 100755
index 000000000..900518fe5
--- /dev/null
+++ b/entity/docs/models/operations/updateclassificationsfortaxonomyrequest.md
@@ -0,0 +1,9 @@
+# UpdateClassificationsForTaxonomyRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `classifications_update` | [Optional[shared.ClassificationsUpdate]](../../models/shared/classificationsupdate.md) | :heavy_minus_sign: | N/A |
+| `taxonomy_slug` | *str* | :heavy_check_mark: | Taxonomy slug |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updateclassificationsfortaxonomyresponse.md b/entity/docs/models/operations/updateclassificationsfortaxonomyresponse.md
new file mode 100755
index 000000000..7bde6558d
--- /dev/null
+++ b/entity/docs/models/operations/updateclassificationsfortaxonomyresponse.md
@@ -0,0 +1,11 @@
+# UpdateClassificationsForTaxonomyResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
+| `update_classifications_for_taxonomy_200_application_json_object` | [Optional[UpdateClassificationsForTaxonomy200ApplicationJSON]](../../models/operations/updateclassificationsfortaxonomy200applicationjson.md) | :heavy_minus_sign: | Taxonomies classifications |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updateentityrequest.md b/entity/docs/models/operations/updateentityrequest.md
new file mode 100755
index 000000000..3ecf72e57
--- /dev/null
+++ b/entity/docs/models/operations/updateentityrequest.md
@@ -0,0 +1,12 @@
+# UpdateEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `entity` | [Optional[shared.Entity]](../../models/shared/entity.md) | :heavy_minus_sign: | N/A | |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updateentityresponse.md b/entity/docs/models/operations/updateentityresponse.md
new file mode 100755
index 000000000..208ff22d9
--- /dev/null
+++ b/entity/docs/models/operations/updateentityresponse.md
@@ -0,0 +1,11 @@
+# UpdateEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_item` | [Optional[shared.EntityItem]](../../models/shared/entityitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updaterelationrequest.md b/entity/docs/models/operations/updaterelationrequest.md
new file mode 100755
index 000000000..f7302c10e
--- /dev/null
+++ b/entity/docs/models/operations/updaterelationrequest.md
@@ -0,0 +1,14 @@
+# UpdateRelationRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request_body` | [Optional[UpdateRelationRequestBody]](../../models/operations/updaterelationrequestbody.md) | :heavy_minus_sign: | N/A | |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `attribute` | *str* | :heavy_check_mark: | The attribute that express meaning | |
+| `entity_id` | *str* | :heavy_check_mark: | The attribute that express meaning | |
+| `id` | *str* | :heavy_check_mark: | Entity id | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updaterelationrequestbody.md b/entity/docs/models/operations/updaterelationrequestbody.md
new file mode 100755
index 000000000..b25bcf3cf
--- /dev/null
+++ b/entity/docs/models/operations/updaterelationrequestbody.md
@@ -0,0 +1,8 @@
+# UpdateRelationRequestBody
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updaterelationresponse.md b/entity/docs/models/operations/updaterelationresponse.md
new file mode 100755
index 000000000..5d2853163
--- /dev/null
+++ b/entity/docs/models/operations/updaterelationresponse.md
@@ -0,0 +1,11 @@
+# UpdateRelationResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `relation_item` | [Optional[shared.RelationItem]](../../models/shared/relationitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updatesavedviewrequest.md b/entity/docs/models/operations/updatesavedviewrequest.md
new file mode 100755
index 000000000..6ffa26a00
--- /dev/null
+++ b/entity/docs/models/operations/updatesavedviewrequest.md
@@ -0,0 +1,9 @@
+# UpdateSavedViewRequest
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `saved_view` | [Optional[shared.SavedView]](../../models/shared/savedview.md) | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | View id |
\ No newline at end of file
diff --git a/entity/docs/models/operations/updatesavedviewresponse.md b/entity/docs/models/operations/updatesavedviewresponse.md
new file mode 100755
index 000000000..583681685
--- /dev/null
+++ b/entity/docs/models/operations/updatesavedviewresponse.md
@@ -0,0 +1,11 @@
+# UpdateSavedViewResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `saved_view_item` | [Optional[shared.SavedViewItem]](../../models/shared/savedviewitem.md) | :heavy_minus_sign: | Success |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/operations/upsertentityrequest.md b/entity/docs/models/operations/upsertentityrequest.md
new file mode 100755
index 000000000..a961d8418
--- /dev/null
+++ b/entity/docs/models/operations/upsertentityrequest.md
@@ -0,0 +1,12 @@
+# UpsertEntityRequest
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `request_body` | [Optional[UpsertEntityRequestBody]](../../models/operations/upsertentityrequestbody.md) | :heavy_minus_sign: | N/A | |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | Activity to include in event feed | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `async_` | *Optional[bool]* | :heavy_minus_sign: | Don't wait for updated entity to become available in Search API. Useful for large migrations | |
+| `dry_run` | *Optional[bool]* | :heavy_minus_sign: | Dry Run mode = return results but does not perform the operation. | |
+| `slug` | *str* | :heavy_check_mark: | Entity Type | contact |
\ No newline at end of file
diff --git a/entity/docs/models/operations/upsertentityrequestbody.md b/entity/docs/models/operations/upsertentityrequestbody.md
new file mode 100755
index 000000000..552791f3e
--- /dev/null
+++ b/entity/docs/models/operations/upsertentityrequestbody.md
@@ -0,0 +1,9 @@
+# UpsertEntityRequestBody
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `entity` | [shared.Entity](../../models/shared/entity.md) | :heavy_check_mark: | N/A | |
+| `unique_key` | List[*str*] | :heavy_check_mark: | N/A | _id |
\ No newline at end of file
diff --git a/entity/docs/models/operations/upsertentityresponse.md b/entity/docs/models/operations/upsertentityresponse.md
new file mode 100755
index 000000000..5564f69f6
--- /dev/null
+++ b/entity/docs/models/operations/upsertentityresponse.md
@@ -0,0 +1,11 @@
+# UpsertEntityResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation |
+| `entity_item` | [Optional[shared.EntityItem]](../../models/shared/entityitem.md) | :heavy_minus_sign: | Entity was updated |
+| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation |
+| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing |
\ No newline at end of file
diff --git a/entity/docs/models/shared/activity.md b/entity/docs/models/shared/activity.md
new file mode 100755
index 000000000..ac2a014df
--- /dev/null
+++ b/entity/docs/models/shared/activity.md
@@ -0,0 +1,11 @@
+# Activity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `message` | *str* | :heavy_check_mark: | Message for activity. Supports handlebars syntax. | {{caller}} did something with {{entity payload.entity.id}}. |
+| `payload` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `title` | *str* | :heavy_check_mark: | Title for activity. Supports handlebars syntax. | My custom activity |
+| `type` | *str* | :heavy_check_mark: | N/A | MyCustomActivity |
\ No newline at end of file
diff --git a/entity/docs/models/shared/activitycallercontext.md b/entity/docs/models/shared/activitycallercontext.md
new file mode 100755
index 000000000..3aa216ba6
--- /dev/null
+++ b/entity/docs/models/shared/activitycallercontext.md
@@ -0,0 +1,9 @@
+# ActivityCallerContext
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `epilot_auth` | [Optional[ActivityCallerContextEpilotAuth]](../../models/shared/activitycallercontextepilotauth.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/activitycallercontextepilotauth.md b/entity/docs/models/shared/activitycallercontextepilotauth.md
new file mode 100755
index 000000000..a5cc2fcf3
--- /dev/null
+++ b/entity/docs/models/shared/activitycallercontextepilotauth.md
@@ -0,0 +1,8 @@
+# ActivityCallerContextEpilotAuth
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `token` | [Optional[ActivityCallerContextEpilotAuthToken]](../../models/shared/activitycallercontextepilotauthtoken.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/activitycallercontextepilotauthtoken.md b/entity/docs/models/shared/activitycallercontextepilotauthtoken.md
new file mode 100755
index 000000000..11dd7d5a9
--- /dev/null
+++ b/entity/docs/models/shared/activitycallercontextepilotauthtoken.md
@@ -0,0 +1,11 @@
+# ActivityCallerContextEpilotAuthToken
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `cognito_username` | *Optional[str]* | :heavy_minus_sign: | N/A | example@epilot.cloud |
+| `custom_ivy_user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 10006129 |
+| `email` | *Optional[str]* | :heavy_minus_sign: | N/A | example@epilot.cloud |
+| `sub` | *Optional[str]* | :heavy_minus_sign: | N/A | 476e9b48-42f4-4234-a2b0-4668b34626ce |
\ No newline at end of file
diff --git a/entity/docs/models/shared/activityitem.md b/entity/docs/models/shared/activityitem.md
new file mode 100755
index 000000000..8af878cd7
--- /dev/null
+++ b/entity/docs/models/shared/activityitem.md
@@ -0,0 +1,16 @@
+# ActivityItem
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | See https://github.com/ulid/spec | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `caller` | [Optional[ActivityCallerContext]](../../models/shared/activitycallercontext.md) | :heavy_minus_sign: | N/A | |
+| `message` | *str* | :heavy_check_mark: | Message for activity. Supports handlebars syntax. | {{caller}} did something with {{entity payload.entity.id}}. |
+| `operations` | List[[EntityOperation](../../models/shared/entityoperation.md)] | :heavy_minus_sign: | N/A | |
+| `operations_total` | *Optional[int]* | :heavy_minus_sign: | Count of total operations attached to this activity | 1 |
+| `payload` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `timestamp` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `title` | *str* | :heavy_check_mark: | Title for activity. Supports handlebars syntax. | My custom activity |
+| `type` | *str* | :heavy_check_mark: | N/A | MyCustomActivity |
\ No newline at end of file
diff --git a/entity/docs/models/shared/addressrelationattribute.md b/entity/docs/models/shared/addressrelationattribute.md
new file mode 100755
index 000000000..b658b40b4
--- /dev/null
+++ b/entity/docs/models/shared/addressrelationattribute.md
@@ -0,0 +1,36 @@
+# AddressRelationAttribute
+
+Reference to an address attribute of another entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[AddressRelationAttributeConstraints]](../../models/shared/addressrelationattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `has_primary` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[AddressRelationAttributeInfoHelpers]](../../models/shared/addressrelationattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[AddressRelationAttributeType]](../../models/shared/addressrelationattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/addressrelationattributeconstraints.md b/entity/docs/models/shared/addressrelationattributeconstraints.md
new file mode 100755
index 000000000..60a563a2b
--- /dev/null
+++ b/entity/docs/models/shared/addressrelationattributeconstraints.md
@@ -0,0 +1,11 @@
+# AddressRelationAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/addressrelationattributeinfohelpers.md b/entity/docs/models/shared/addressrelationattributeinfohelpers.md
new file mode 100755
index 000000000..64f574691
--- /dev/null
+++ b/entity/docs/models/shared/addressrelationattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# AddressRelationAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/addressrelationattributetype.md b/entity/docs/models/shared/addressrelationattributetype.md
new file mode 100755
index 000000000..591ef24a0
--- /dev/null
+++ b/entity/docs/models/shared/addressrelationattributetype.md
@@ -0,0 +1,8 @@
+# AddressRelationAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------------------ | ------------------ |
+| `RELATION_ADDRESS` | relation_address |
\ No newline at end of file
diff --git a/entity/docs/models/shared/attribute.md b/entity/docs/models/shared/attribute.md
new file mode 100755
index 000000000..4a9b2f250
--- /dev/null
+++ b/entity/docs/models/shared/attribute.md
@@ -0,0 +1,173 @@
+# Attribute
+
+
+## Supported Types
+
+### TextAttribute
+
+```python
+attribute: shared.TextAttribute = /* values here */
+```
+
+### LinkAttribute
+
+```python
+attribute: shared.LinkAttribute = /* values here */
+```
+
+### DateAttribute
+
+```python
+attribute: shared.DateAttribute = /* values here */
+```
+
+### CountryAttribute
+
+```python
+attribute: shared.CountryAttribute = /* values here */
+```
+
+### BooleanAttribute
+
+```python
+attribute: shared.BooleanAttribute = /* values here */
+```
+
+### SelectAttribute
+
+```python
+attribute: shared.SelectAttribute = /* values here */
+```
+
+### MultiSelectAttribute
+
+```python
+attribute: shared.MultiSelectAttribute = /* values here */
+```
+
+### StatusAttribute
+
+```python
+attribute: shared.StatusAttribute = /* values here */
+```
+
+### SequenceAttribute
+
+```python
+attribute: shared.SequenceAttribute = /* values here */
+```
+
+### RelationAttribute
+
+```python
+attribute: shared.RelationAttribute = /* values here */
+```
+
+### UserRelationAttribute
+
+```python
+attribute: shared.UserRelationAttribute = /* values here */
+```
+
+### AddressRelationAttribute
+
+```python
+attribute: shared.AddressRelationAttribute = /* values here */
+```
+
+### PaymentMethodRelationAttribute
+
+```python
+attribute: shared.PaymentMethodRelationAttribute = /* values here */
+```
+
+### CurrencyAttribute
+
+```python
+attribute: shared.CurrencyAttribute = /* values here */
+```
+
+### RepeatableAttribute
+
+```python
+attribute: shared.RepeatableAttribute = /* values here */
+```
+
+### TagsAttribute
+
+```python
+attribute: shared.TagsAttribute = /* values here */
+```
+
+### NumberAttribute
+
+```python
+attribute: shared.NumberAttribute = /* values here */
+```
+
+### ConsentAttribute
+
+```python
+attribute: shared.ConsentAttribute = /* values here */
+```
+
+### InternalAttribute
+
+```python
+attribute: shared.InternalAttribute = /* values here */
+```
+
+### OrderedListAttribute
+
+```python
+attribute: shared.OrderedListAttribute = /* values here */
+```
+
+### FileAttribute
+
+```python
+attribute: shared.FileAttribute = /* values here */
+```
+
+### ComputedAttribute
+
+```python
+attribute: shared.ComputedAttribute = /* values here */
+```
+
+### PartnerStatusAttribute
+
+```python
+attribute: shared.PartnerStatusAttribute = /* values here */
+```
+
+### InvitationEmailAttribute
+
+```python
+attribute: shared.InvitationEmailAttribute = /* values here */
+```
+
+### AutomationAttribute
+
+```python
+attribute: shared.AutomationAttribute = /* values here */
+```
+
+### InternalUserAttribute
+
+```python
+attribute: shared.InternalUserAttribute = /* values here */
+```
+
+### PurposeAttribute
+
+```python
+attribute: shared.PurposeAttribute = /* values here */
+```
+
+### PartnerOrganisationAttribute
+
+```python
+attribute: shared.PartnerOrganisationAttribute = /* values here */
+```
+
diff --git a/entity/docs/models/shared/automationattribute.md b/entity/docs/models/shared/automationattribute.md
new file mode 100755
index 000000000..e7a7b51db
--- /dev/null
+++ b/entity/docs/models/shared/automationattribute.md
@@ -0,0 +1,35 @@
+# AutomationAttribute
+
+Automation entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[AutomationAttributeConstraints]](../../models/shared/automationattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[AutomationAttributeInfoHelpers]](../../models/shared/automationattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[AutomationAttributeType]](../../models/shared/automationattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/automationattributeconstraints.md b/entity/docs/models/shared/automationattributeconstraints.md
new file mode 100755
index 000000000..f5497f471
--- /dev/null
+++ b/entity/docs/models/shared/automationattributeconstraints.md
@@ -0,0 +1,11 @@
+# AutomationAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/automationattributeinfohelpers.md b/entity/docs/models/shared/automationattributeinfohelpers.md
new file mode 100755
index 000000000..5dcfbda59
--- /dev/null
+++ b/entity/docs/models/shared/automationattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# AutomationAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/automationattributetype.md b/entity/docs/models/shared/automationattributetype.md
new file mode 100755
index 000000000..f32481040
--- /dev/null
+++ b/entity/docs/models/shared/automationattributetype.md
@@ -0,0 +1,8 @@
+# AutomationAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------------ | ------------ |
+| `AUTOMATION` | automation |
\ No newline at end of file
diff --git a/entity/docs/models/shared/booleanattribute.md b/entity/docs/models/shared/booleanattribute.md
new file mode 100755
index 000000000..4e5badcf8
--- /dev/null
+++ b/entity/docs/models/shared/booleanattribute.md
@@ -0,0 +1,35 @@
+# BooleanAttribute
+
+Yes / No Toggle
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[BooleanAttributeConstraints]](../../models/shared/booleanattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[BooleanAttributeInfoHelpers]](../../models/shared/booleanattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[BooleanAttributeType]](../../models/shared/booleanattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/booleanattributeconstraints.md b/entity/docs/models/shared/booleanattributeconstraints.md
new file mode 100755
index 000000000..ed2afa229
--- /dev/null
+++ b/entity/docs/models/shared/booleanattributeconstraints.md
@@ -0,0 +1,11 @@
+# BooleanAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/booleanattributeinfohelpers.md b/entity/docs/models/shared/booleanattributeinfohelpers.md
new file mode 100755
index 000000000..718ce3570
--- /dev/null
+++ b/entity/docs/models/shared/booleanattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# BooleanAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/booleanattributetype.md b/entity/docs/models/shared/booleanattributetype.md
new file mode 100755
index 000000000..42e4baaee
--- /dev/null
+++ b/entity/docs/models/shared/booleanattributetype.md
@@ -0,0 +1,8 @@
+# BooleanAttributeType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `BOOLEAN` | boolean |
\ No newline at end of file
diff --git a/entity/docs/models/shared/classificationsupdate.md b/entity/docs/models/shared/classificationsupdate.md
new file mode 100755
index 000000000..1335f94ee
--- /dev/null
+++ b/entity/docs/models/shared/classificationsupdate.md
@@ -0,0 +1,10 @@
+# ClassificationsUpdate
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
+| `create` | List[[TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
+| `delete` | List[*str*] | :heavy_minus_sign: | N/A |
+| `update` | List[[TaxonomyClassification](../../models/shared/taxonomyclassification.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/computedattribute.md b/entity/docs/models/shared/computedattribute.md
new file mode 100755
index 000000000..cf6792c03
--- /dev/null
+++ b/entity/docs/models/shared/computedattribute.md
@@ -0,0 +1,35 @@
+# ComputedAttribute
+
+An attribute that is computed from the entity data. For more details on how to use them, check the docs [here](https://e-pilot.atlassian.net/wiki/spaces/EO/pages/5642977476/How+To+Computed+Schema+Attributes)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[ComputedAttributeConstraints]](../../models/shared/computedattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[ComputedAttributeInfoHelpers]](../../models/shared/computedattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[ComputedAttributeType]](../../models/shared/computedattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/computedattributeconstraints.md b/entity/docs/models/shared/computedattributeconstraints.md
new file mode 100755
index 000000000..ac8b5480b
--- /dev/null
+++ b/entity/docs/models/shared/computedattributeconstraints.md
@@ -0,0 +1,11 @@
+# ComputedAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/computedattributeinfohelpers.md b/entity/docs/models/shared/computedattributeinfohelpers.md
new file mode 100755
index 000000000..4e4fdeeb4
--- /dev/null
+++ b/entity/docs/models/shared/computedattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# ComputedAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/computedattributetype.md b/entity/docs/models/shared/computedattributetype.md
new file mode 100755
index 000000000..2155a2f01
--- /dev/null
+++ b/entity/docs/models/shared/computedattributetype.md
@@ -0,0 +1,8 @@
+# ComputedAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `COMPUTED` | computed |
\ No newline at end of file
diff --git a/entity/docs/models/shared/consentattribute.md b/entity/docs/models/shared/consentattribute.md
new file mode 100755
index 000000000..c6cf9ec71
--- /dev/null
+++ b/entity/docs/models/shared/consentattribute.md
@@ -0,0 +1,37 @@
+# ConsentAttribute
+
+Consent Management
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[ConsentAttributeConstraints]](../../models/shared/consentattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `identifiers` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `info_helpers` | [Optional[ConsentAttributeInfoHelpers]](../../models/shared/consentattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `topic` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [ConsentAttributeType](../../models/shared/consentattributetype.md) | :heavy_check_mark: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/consentattributeconstraints.md b/entity/docs/models/shared/consentattributeconstraints.md
new file mode 100755
index 000000000..9b7fcabd7
--- /dev/null
+++ b/entity/docs/models/shared/consentattributeconstraints.md
@@ -0,0 +1,11 @@
+# ConsentAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/consentattributeinfohelpers.md b/entity/docs/models/shared/consentattributeinfohelpers.md
new file mode 100755
index 000000000..b6c2ee157
--- /dev/null
+++ b/entity/docs/models/shared/consentattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# ConsentAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/consentattributetype.md b/entity/docs/models/shared/consentattributetype.md
new file mode 100755
index 000000000..705bf9776
--- /dev/null
+++ b/entity/docs/models/shared/consentattributetype.md
@@ -0,0 +1,8 @@
+# ConsentAttributeType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `CONSENT` | consent |
\ No newline at end of file
diff --git a/entity/docs/models/shared/countryattribute.md b/entity/docs/models/shared/countryattribute.md
new file mode 100755
index 000000000..99eb362c3
--- /dev/null
+++ b/entity/docs/models/shared/countryattribute.md
@@ -0,0 +1,35 @@
+# CountryAttribute
+
+Country picker
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[CountryAttributeConstraints]](../../models/shared/countryattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[CountryAttributeInfoHelpers]](../../models/shared/countryattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[CountryAttributeType]](../../models/shared/countryattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/countryattributeconstraints.md b/entity/docs/models/shared/countryattributeconstraints.md
new file mode 100755
index 000000000..a83f7c531
--- /dev/null
+++ b/entity/docs/models/shared/countryattributeconstraints.md
@@ -0,0 +1,11 @@
+# CountryAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/countryattributeinfohelpers.md b/entity/docs/models/shared/countryattributeinfohelpers.md
new file mode 100755
index 000000000..60ed61091
--- /dev/null
+++ b/entity/docs/models/shared/countryattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# CountryAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/countryattributetype.md b/entity/docs/models/shared/countryattributetype.md
new file mode 100755
index 000000000..d40e0ef82
--- /dev/null
+++ b/entity/docs/models/shared/countryattributetype.md
@@ -0,0 +1,8 @@
+# CountryAttributeType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `COUNTRY` | country |
\ No newline at end of file
diff --git a/entity/docs/models/shared/currencyattribute.md b/entity/docs/models/shared/currencyattribute.md
new file mode 100755
index 000000000..e92da118c
--- /dev/null
+++ b/entity/docs/models/shared/currencyattribute.md
@@ -0,0 +1,37 @@
+# CurrencyAttribute
+
+Currency input
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[CurrencyAttributeConstraints]](../../models/shared/currencyattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `currency` | List[[Union[CurrencyAttributeCurrency1]](../../models/shared/currencyattributecurrency.md)] | :heavy_check_mark: | An array of currency configurations with a country code (ISO-4217) | |
+| `currency_selector_only` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[CurrencyAttributeInfoHelpers]](../../models/shared/currencyattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [CurrencyAttributeType](../../models/shared/currencyattributetype.md) | :heavy_check_mark: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/currencyattributeconstraints.md b/entity/docs/models/shared/currencyattributeconstraints.md
new file mode 100755
index 000000000..c98f69494
--- /dev/null
+++ b/entity/docs/models/shared/currencyattributeconstraints.md
@@ -0,0 +1,11 @@
+# CurrencyAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/currencyattributecurrency.md b/entity/docs/models/shared/currencyattributecurrency.md
new file mode 100755
index 000000000..7ee2bc865
--- /dev/null
+++ b/entity/docs/models/shared/currencyattributecurrency.md
@@ -0,0 +1,11 @@
+# CurrencyAttributeCurrency
+
+
+## Supported Types
+
+### CurrencyAttributeCurrency1
+
+```python
+currencyAttributeCurrency: shared.CurrencyAttributeCurrency1 = /* values here */
+```
+
diff --git a/entity/docs/models/shared/currencyattributecurrency1.md b/entity/docs/models/shared/currencyattributecurrency1.md
new file mode 100755
index 000000000..8a470028f
--- /dev/null
+++ b/entity/docs/models/shared/currencyattributecurrency1.md
@@ -0,0 +1,13 @@
+# CurrencyAttributeCurrency1
+
+A currency configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `code` | *str* | :heavy_check_mark: | N/A |
+| `description` | *str* | :heavy_check_mark: | N/A |
+| `flag` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `symbol` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/currencyattributeinfohelpers.md b/entity/docs/models/shared/currencyattributeinfohelpers.md
new file mode 100755
index 000000000..de9c3d151
--- /dev/null
+++ b/entity/docs/models/shared/currencyattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# CurrencyAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/currencyattributetype.md b/entity/docs/models/shared/currencyattributetype.md
new file mode 100755
index 000000000..037e5d352
--- /dev/null
+++ b/entity/docs/models/shared/currencyattributetype.md
@@ -0,0 +1,8 @@
+# CurrencyAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `CURRENCY` | currency |
\ No newline at end of file
diff --git a/entity/docs/models/shared/dateattribute.md b/entity/docs/models/shared/dateattribute.md
new file mode 100755
index 000000000..641dccdbc
--- /dev/null
+++ b/entity/docs/models/shared/dateattribute.md
@@ -0,0 +1,35 @@
+# DateAttribute
+
+Date or Datetime picker
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[DateAttributeConstraints]](../../models/shared/dateattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[DateAttributeInfoHelpers]](../../models/shared/dateattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[DateAttributeType]](../../models/shared/dateattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/dateattributeconstraints.md b/entity/docs/models/shared/dateattributeconstraints.md
new file mode 100755
index 000000000..a0fcd4648
--- /dev/null
+++ b/entity/docs/models/shared/dateattributeconstraints.md
@@ -0,0 +1,11 @@
+# DateAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/dateattributeinfohelpers.md b/entity/docs/models/shared/dateattributeinfohelpers.md
new file mode 100755
index 000000000..e8ee4369d
--- /dev/null
+++ b/entity/docs/models/shared/dateattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# DateAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/dateattributetype.md b/entity/docs/models/shared/dateattributetype.md
new file mode 100755
index 000000000..f7765ea5c
--- /dev/null
+++ b/entity/docs/models/shared/dateattributetype.md
@@ -0,0 +1,9 @@
+# DateAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `DATE` | date |
+| `DATETIME` | datetime |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entity.md b/entity/docs/models/shared/entity.md
new file mode 100755
index 000000000..8795a763e
--- /dev/null
+++ b/entity/docs/models/shared/entity.md
@@ -0,0 +1,17 @@
+# Entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `acl` | [Optional[EntityACL]](../../models/shared/entityacl.md) | :heavy_minus_sign: | Access control list (ACL) for an entity. Defines sharing access to external orgs or users. | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `org` | *Optional[str]* | :heavy_minus_sign: | Organization Id the entity belongs to | |
+| `owners` | List[[EntityOwner](../../models/shared/entityowner.md)] | :heavy_minus_sign: | N/A | |
+| `schema` | *Optional[str]* | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `title` | *Optional[str]* | :heavy_minus_sign: | Title of entity | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityacl.md b/entity/docs/models/shared/entityacl.md
new file mode 100755
index 000000000..a01f06213
--- /dev/null
+++ b/entity/docs/models/shared/entityacl.md
@@ -0,0 +1,13 @@
+# EntityACL
+
+Access control list (ACL) for an entity. Defines sharing access to external orgs or users.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `delete` | List[*str*] | :heavy_minus_sign: | N/A | org:456 |
+| `edit` | List[*str*] | :heavy_minus_sign: | N/A | org:456 |
+| `view` | List[*str*] | :heavy_minus_sign: | N/A | org:456 |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityaction.md b/entity/docs/models/shared/entityaction.md
new file mode 100755
index 000000000..f4e8286a0
--- /dev/null
+++ b/entity/docs/models/shared/entityaction.md
@@ -0,0 +1,13 @@
+# EntityAction
+
+An entity action configured from the entity schema
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `action` | *str* | :heavy_check_mark: | A unique action name | preview_file |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | visibility |
+| `label` | *str* | :heavy_check_mark: | N/A | Preview File |
+| `permission` | *Optional[str]* | :heavy_minus_sign: | Permission required to show the action.
If not provided, the action will be shown to all users.
| entity:edit |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitycapability.md b/entity/docs/models/shared/entitycapability.md
new file mode 100755
index 000000000..d3384c85b
--- /dev/null
+++ b/entity/docs/models/shared/entitycapability.md
@@ -0,0 +1,17 @@
+# EntityCapability
+
+Capabilities the Entity has. Turn features on/off for entities.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `attributes` | List[[Union[TextAttribute, LinkAttribute, DateAttribute, CountryAttribute, BooleanAttribute, SelectAttribute, MultiSelectAttribute, StatusAttribute, SequenceAttribute, RelationAttribute, UserRelationAttribute, AddressRelationAttribute, PaymentMethodRelationAttribute, CurrencyAttribute, RepeatableAttribute, TagsAttribute, NumberAttribute, ConsentAttribute, InternalAttribute, OrderedListAttribute, FileAttribute, ComputedAttribute, PartnerStatusAttribute, InvitationEmailAttribute, AutomationAttribute, InternalUserAttribute, PurposeAttribute, PartnerOrganisationAttribute]](../../models/shared/attribute.md)] | :heavy_minus_sign: | N/A | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This capability should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `legacy` | *Optional[bool]* | :heavy_minus_sign: | Only show capability for legacy tenants (ivy) | |
+| `name` | *str* | :heavy_check_mark: | Unique name for the capability | customer_messaging |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This capability should only be active when the setting is enabled | MY_SETTING |
+| `title` | *Optional[str]* | :heavy_minus_sign: | Human readable title of the capability | Messaging |
+| `ui_hooks` | List[[EntityCapabilityUIHooks](../../models/shared/entitycapabilityuihooks.md)] | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitycapabilityuihooks.md b/entity/docs/models/shared/entitycapabilityuihooks.md
new file mode 100755
index 000000000..ac7cee710
--- /dev/null
+++ b/entity/docs/models/shared/entitycapabilityuihooks.md
@@ -0,0 +1,20 @@
+# EntityCapabilityUIHooks
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `component` | *Optional[str]* | :heavy_minus_sign: | the component to be dynamically loaded | PricingItems |
+| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether capability should be disabled | |
+| `group_expanded` | *Optional[bool]* | :heavy_minus_sign: | Sets the group expand/collapse default state | |
+| `header` | *Optional[bool]* | :heavy_minus_sign: | Specific to Activity pilot | |
+| `hook` | *str* | :heavy_check_mark: | name of the hook to use | EntityDetailsV2:Tab |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Preview icon name(As in Base elements) for the capability | email |
+| `import_` | *Optional[str]* | :heavy_minus_sign: | package to be imported | @epilot360/notes |
+| `order` | *Optional[int]* | :heavy_minus_sign: | render order (ascending) | 10 |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | N/A | _is_composite_price = "false" |
+| `required_permission` | [Optional[EntityCapabilityUIHooksRequiredPermission]](../../models/shared/entitycapabilityuihooksrequiredpermission.md) | :heavy_minus_sign: | Require a permission to display UI hook | |
+| `route` | *Optional[str]* | :heavy_minus_sign: | route for specified capability | notes |
+| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Notes |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitycapabilityuihooksrequiredpermission.md b/entity/docs/models/shared/entitycapabilityuihooksrequiredpermission.md
new file mode 100755
index 000000000..02ec78b3a
--- /dev/null
+++ b/entity/docs/models/shared/entitycapabilityuihooksrequiredpermission.md
@@ -0,0 +1,11 @@
+# EntityCapabilityUIHooksRequiredPermission
+
+Require a permission to display UI hook
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `action` | *str* | :heavy_check_mark: | N/A | note:view |
+| `resource` | *Optional[str]* | :heavy_minus_sign: | N/A | 123 |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaultcreate.md b/entity/docs/models/shared/entitydefaultcreate.md
new file mode 100755
index 000000000..faef9e226
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaultcreate.md
@@ -0,0 +1,9 @@
+# EntityDefaultCreate
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
+| `search_params` | Dict[str, *str*] | :heavy_minus_sign: | N/A |
+| `view_type` | [Optional[EntityDefaultCreateViewType]](../../models/shared/entitydefaultcreateviewtype.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaultcreateviewtype.md b/entity/docs/models/shared/entitydefaultcreateviewtype.md
new file mode 100755
index 000000000..387ef6ef2
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaultcreateviewtype.md
@@ -0,0 +1,8 @@
+# EntityDefaultCreateViewType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `DEFAULT` | default |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaultedit.md b/entity/docs/models/shared/entitydefaultedit.md
new file mode 100755
index 000000000..1029ccfef
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaultedit.md
@@ -0,0 +1,10 @@
+# EntityDefaultEdit
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `search_params` | Dict[str, *str*] | :heavy_minus_sign: | N/A | |
+| `summary_attributes` | List[*str*] | :heavy_minus_sign: | List of attribute names that we show in the summary header | email |
+| `view_type` | [Optional[EntityDefaultEditViewType]](../../models/shared/entitydefaulteditviewtype.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulteditviewtype.md b/entity/docs/models/shared/entitydefaulteditviewtype.md
new file mode 100755
index 000000000..300ea7dd7
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulteditviewtype.md
@@ -0,0 +1,8 @@
+# EntityDefaultEditViewType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `DEFAULT` | default |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttable.md b/entity/docs/models/shared/entitydefaulttable.md
new file mode 100755
index 000000000..a3ce3412d
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttable.md
@@ -0,0 +1,12 @@
+# EntityDefaultTable
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
+| `dropdown_items` | List[[Union[EntityDefaultTableDropdownItems1, EntityDefaultTableDropdownItems2]](../../models/shared/entitydefaulttabledropdownitems.md)] | :heavy_minus_sign: | N/A |
+| `enable_thumbnails` | *Optional[bool]* | :heavy_minus_sign: | Enable the thumbnail column |
+| `navbar_actions` | List[[EntityDefaultTableNavbarActions](../../models/shared/entitydefaulttablenavbaractions.md)] | :heavy_minus_sign: | N/A |
+| `row_actions` | List[[Union[str, EntityAction]](../../models/shared/entitydefaulttablerowactions.md)] | :heavy_minus_sign: | N/A |
+| `view_type` | [Optional[EntityDefaultTableViewType]](../../models/shared/entitydefaulttableviewtype.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttabledropdownitems.md b/entity/docs/models/shared/entitydefaulttabledropdownitems.md
new file mode 100755
index 000000000..094f75c0b
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttabledropdownitems.md
@@ -0,0 +1,17 @@
+# EntityDefaultTableDropdownItems
+
+
+## Supported Types
+
+### EntityDefaultTableDropdownItems1
+
+```python
+entityDefaultTableDropdownItems: shared.EntityDefaultTableDropdownItems1 = /* values here */
+```
+
+### EntityDefaultTableDropdownItems2
+
+```python
+entityDefaultTableDropdownItems: shared.EntityDefaultTableDropdownItems2 = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entitydefaulttabledropdownitems1.md b/entity/docs/models/shared/entitydefaulttabledropdownitems1.md
new file mode 100755
index 000000000..1627f2b02
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttabledropdownitems1.md
@@ -0,0 +1,11 @@
+# EntityDefaultTableDropdownItems1
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `entity` | *Optional[str]* | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This dropdown item should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `legacy` | *Optional[bool]* | :heavy_minus_sign: | Only show item for legacy tenants (ivy) | |
+| `type` | [Optional[EntityDefaultTableDropdownItems1Type]](../../models/shared/entitydefaulttabledropdownitems1type.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttabledropdownitems1type.md b/entity/docs/models/shared/entitydefaulttabledropdownitems1type.md
new file mode 100755
index 000000000..dd78cb538
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttabledropdownitems1type.md
@@ -0,0 +1,8 @@
+# EntityDefaultTableDropdownItems1Type
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `ENTITY` | entity |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttabledropdownitems2.md b/entity/docs/models/shared/entitydefaulttabledropdownitems2.md
new file mode 100755
index 000000000..0dab288f3
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttabledropdownitems2.md
@@ -0,0 +1,12 @@
+# EntityDefaultTableDropdownItems2
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This dropdown item should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `legacy` | *Optional[bool]* | :heavy_minus_sign: | Only show item for legacy tenants (ivy) | |
+| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Opportunities |
+| `type` | [Optional[EntityDefaultTableDropdownItems2Type]](../../models/shared/entitydefaulttabledropdownitems2type.md) | :heavy_minus_sign: | N/A | |
+| `uri` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttabledropdownitems2type.md b/entity/docs/models/shared/entitydefaulttabledropdownitems2type.md
new file mode 100755
index 000000000..3e3a26e10
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttabledropdownitems2type.md
@@ -0,0 +1,8 @@
+# EntityDefaultTableDropdownItems2Type
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `LINK` | link |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttablenavbaractions.md b/entity/docs/models/shared/entitydefaulttablenavbaractions.md
new file mode 100755
index 000000000..00acf7269
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttablenavbaractions.md
@@ -0,0 +1,9 @@
+# EntityDefaultTableNavbarActions
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `options` | List[[EntityDefaultTableNavbarActionsOptions](../../models/shared/entitydefaulttablenavbaractionsoptions.md)] | :heavy_minus_sign: | N/A |
+| `type` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttablenavbaractionsoptions.md b/entity/docs/models/shared/entitydefaulttablenavbaractionsoptions.md
new file mode 100755
index 000000000..31a355818
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttablenavbaractionsoptions.md
@@ -0,0 +1,9 @@
+# EntityDefaultTableNavbarActionsOptions
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `label` | *str* | :heavy_check_mark: | N/A |
+| `params` | [Optional[EntityDefaultTableNavbarActionsOptionsParams]](../../models/shared/entitydefaulttablenavbaractionsoptionsparams.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttablenavbaractionsoptionsparams.md b/entity/docs/models/shared/entitydefaulttablenavbaractionsoptionsparams.md
new file mode 100755
index 000000000..eb8baf06b
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttablenavbaractionsoptionsparams.md
@@ -0,0 +1,7 @@
+# EntityDefaultTableNavbarActionsOptionsParams
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitydefaulttablerowactions.md b/entity/docs/models/shared/entitydefaulttablerowactions.md
new file mode 100755
index 000000000..8e0a85ae0
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttablerowactions.md
@@ -0,0 +1,17 @@
+# EntityDefaultTableRowActions
+
+
+## Supported Types
+
+###
+
+```python
+entityDefaultTableRowActions: str = /* values here */
+```
+
+### EntityAction
+
+```python
+entityDefaultTableRowActions: shared.EntityAction = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entitydefaulttableviewtype.md b/entity/docs/models/shared/entitydefaulttableviewtype.md
new file mode 100755
index 000000000..e42ccf697
--- /dev/null
+++ b/entity/docs/models/shared/entitydefaulttableviewtype.md
@@ -0,0 +1,8 @@
+# EntityDefaultTableViewType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `DEFAULT` | default |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityimportparams.md b/entity/docs/models/shared/entityimportparams.md
new file mode 100755
index 000000000..c61968d20
--- /dev/null
+++ b/entity/docs/models/shared/entityimportparams.md
@@ -0,0 +1,11 @@
+# EntityImportParams
+
+The parameters for importing entities.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `s3_reference` | [EntityImportParamsS3Reference](../../models/shared/entityimportparamss3reference.md) | :heavy_check_mark: | The S3 bucket and key where the JSON file for import is located. | |
+| `schema` | *str* | :heavy_check_mark: | The schema of the entities being imported. This must match the schema of the entities on the platform. | contact |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityimportparamss3reference.md b/entity/docs/models/shared/entityimportparamss3reference.md
new file mode 100755
index 000000000..20d56e6ca
--- /dev/null
+++ b/entity/docs/models/shared/entityimportparamss3reference.md
@@ -0,0 +1,11 @@
+# EntityImportParamsS3Reference
+
+The S3 bucket and key where the JSON file for import is located.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `bucket` | *str* | :heavy_check_mark: | The name of the S3 bucket where the JSON file for import is stored. | my-bucket |
+| `key` | *str* | :heavy_check_mark: | The key or path to the JSON file within the S3 bucket. | imports/my-import.json |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityitem.md b/entity/docs/models/shared/entityitem.md
new file mode 100755
index 000000000..166bd7672
--- /dev/null
+++ b/entity/docs/models/shared/entityitem.md
@@ -0,0 +1,17 @@
+# EntityItem
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `acl` | [Optional[EntityACL]](../../models/shared/entityacl.md) | :heavy_minus_sign: | Access control list (ACL) for an entity. Defines sharing access to external orgs or users. | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `org` | *str* | :heavy_check_mark: | Organization Id the entity belongs to | |
+| `owners` | List[[EntityOwner](../../models/shared/entityowner.md)] | :heavy_minus_sign: | N/A | |
+| `schema` | *str* | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `title` | *Optional[str]* | :heavy_check_mark: | Title of entity | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityoperation.md b/entity/docs/models/shared/entityoperation.md
new file mode 100755
index 000000000..85602d89d
--- /dev/null
+++ b/entity/docs/models/shared/entityoperation.md
@@ -0,0 +1,14 @@
+# EntityOperation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
+| `activity_id` | *Optional[str]* | :heavy_minus_sign: | See https://github.com/ulid/spec | 01F130Q52Q6MWSNS8N2AVXV4JN |
+| `diff` | [Optional[EntityOperationDiff]](../../models/shared/entityoperationdiff.md) | :heavy_minus_sign: | N/A | |
+| `entity` | *str* | :heavy_check_mark: | N/A | |
+| `operation` | [EntityOperationOperation](../../models/shared/entityoperationoperation.md) | :heavy_check_mark: | N/A | |
+| `org` | *str* | :heavy_check_mark: | N/A | 123 |
+| `params` | [Optional[EntityOperationParams]](../../models/shared/entityoperationparams.md) | :heavy_minus_sign: | N/A | |
+| `payload` | [Optional[EntityOperationPayload]](../../models/shared/entityoperationpayload.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityoperationdiff.md b/entity/docs/models/shared/entityoperationdiff.md
new file mode 100755
index 000000000..74ef20389
--- /dev/null
+++ b/entity/docs/models/shared/entityoperationdiff.md
@@ -0,0 +1,10 @@
+# EntityOperationDiff
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `added` | [Optional[Entity]](../../models/shared/entity.md) | :heavy_minus_sign: | N/A |
+| `deleted` | [Optional[Entity]](../../models/shared/entity.md) | :heavy_minus_sign: | N/A |
+| `updated` | [Optional[Entity]](../../models/shared/entity.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityoperationoperation.md b/entity/docs/models/shared/entityoperationoperation.md
new file mode 100755
index 000000000..64e866fe6
--- /dev/null
+++ b/entity/docs/models/shared/entityoperationoperation.md
@@ -0,0 +1,10 @@
+# EntityOperationOperation
+
+
+## Values
+
+| Name | Value |
+| --------------- | --------------- |
+| `CREATE_ENTITY` | createEntity |
+| `UPDATE_ENTITY` | updateEntity |
+| `DELETE_ENTITY` | deleteEntity |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityoperationparams.md b/entity/docs/models/shared/entityoperationparams.md
new file mode 100755
index 000000000..f5ca2dacf
--- /dev/null
+++ b/entity/docs/models/shared/entityoperationparams.md
@@ -0,0 +1,9 @@
+# EntityOperationParams
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `slug` | *Optional[str]* | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityoperationpayload.md b/entity/docs/models/shared/entityoperationpayload.md
new file mode 100755
index 000000000..277d48767
--- /dev/null
+++ b/entity/docs/models/shared/entityoperationpayload.md
@@ -0,0 +1,17 @@
+# EntityOperationPayload
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `acl` | [Optional[EntityACL]](../../models/shared/entityacl.md) | :heavy_minus_sign: | Access control list (ACL) for an entity. Defines sharing access to external orgs or users. | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `org` | *Optional[str]* | :heavy_minus_sign: | Organization Id the entity belongs to | |
+| `owners` | List[[EntityOwner](../../models/shared/entityowner.md)] | :heavy_minus_sign: | N/A | |
+| `schema` | *Optional[str]* | :heavy_minus_sign: | URL-friendly identifier for the entity schema | contact |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `title` | *Optional[str]* | :heavy_minus_sign: | Title of entity | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityowner.md b/entity/docs/models/shared/entityowner.md
new file mode 100755
index 000000000..a4848e499
--- /dev/null
+++ b/entity/docs/models/shared/entityowner.md
@@ -0,0 +1,14 @@
+# EntityOwner
+
+The user / organization owning this entity.
+
+Note: Owner implicitly has access to the entity regardless of ACLs.
+
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `org_id` | *str* | :heavy_check_mark: | N/A | 123 |
+| `user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 123 |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschema.md b/entity/docs/models/shared/entityschema.md
new file mode 100755
index 000000000..88a62d22a
--- /dev/null
+++ b/entity/docs/models/shared/entityschema.md
@@ -0,0 +1,27 @@
+# EntitySchema
+
+The "type" of an Entity. Describes the shape. Includes Entity Attributes, Relations and Capabilities.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `attributes` | List[[Union[TextAttribute, LinkAttribute, DateAttribute, CountryAttribute, BooleanAttribute, SelectAttribute, MultiSelectAttribute, StatusAttribute, SequenceAttribute, RelationAttribute, UserRelationAttribute, AddressRelationAttribute, PaymentMethodRelationAttribute, CurrencyAttribute, RepeatableAttribute, TagsAttribute, NumberAttribute, ConsentAttribute, InternalAttribute, OrderedListAttribute, FileAttribute, ComputedAttribute, PartnerStatusAttribute, InvitationEmailAttribute, AutomationAttribute, InternalUserAttribute, PurposeAttribute, PartnerOrganisationAttribute]](../../models/shared/attribute.md)] | :heavy_check_mark: | An ordered list of attributes the entity contains | [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] |
+| `blueprint` | *Optional[str]* | :heavy_minus_sign: | Reference to blueprint | |
+| `capabilities` | List[[EntityCapability](../../models/shared/entitycapability.md)] | :heavy_check_mark: | N/A | |
+| `dialog_config` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `draft` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `enable_setting` | List[*str*] | :heavy_minus_sign: | This schema should only be active when one of the organization settings is enabled | 360_features |
+| `explicit_search_mappings` | Dict[str, [SearchMappings](../../models/shared/searchmappings.md)] | :heavy_minus_sign: | Advanced: explicit Elasticsearch index mapping definitions for entity data
| [object Object] |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This schema should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group_settings` | List[[EntitySchemaGroupSettings](../../models/shared/entityschemagroupsettings.md)] | :heavy_minus_sign: | A dictionary of Group Titles and associated settings if present. | [object Object],[object Object] |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | person |
+| `layout_settings` | [Optional[EntitySchemaLayoutSettings]](../../models/shared/entityschemalayoutsettings.md) | :heavy_minus_sign: | Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
- Managed Properties: are interpreted and transformed into layout styles
- Un-managed Properties: are appended as styles into the attribute mounting node
| |
+| `name` | *str* | :heavy_check_mark: | User-friendly identifier for the entity schema | Contact |
+| `plural` | *str* | :heavy_check_mark: | N/A | Contacts |
+| `published` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `slug` | *str* | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `title_template` | *Optional[str]* | :heavy_minus_sign: | Template for rendering the title field. Uses handlebars | {{first_name}} {{last_name}} |
+| `ui_config` | [Optional[EntitySchemaUIConfig]](../../models/shared/entityschemauiconfig.md) | :heavy_minus_sign: | N/A | |
+| `version` | *Optional[int]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemagroupsettings.md b/entity/docs/models/shared/entityschemagroupsettings.md
new file mode 100755
index 000000000..75ef6e3d2
--- /dev/null
+++ b/entity/docs/models/shared/entityschemagroupsettings.md
@@ -0,0 +1,16 @@
+# EntitySchemaGroupSettings
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `expanded` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This group should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `info_tooltip_title` | [Optional[EntitySchemaGroupSettingsInfoTooltipTitle]](../../models/shared/entityschemagroupsettingsinfotooltiptitle.md) | :heavy_minus_sign: | N/A | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Render order of the group | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | N/A | _is_composite_price = "false" |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This group should only be active when the setting is enabled | MY_SETTING |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemagroupsettingsinfotooltiptitle.md b/entity/docs/models/shared/entityschemagroupsettingsinfotooltiptitle.md
new file mode 100755
index 000000000..a1ed2ebd0
--- /dev/null
+++ b/entity/docs/models/shared/entityschemagroupsettingsinfotooltiptitle.md
@@ -0,0 +1,9 @@
+# EntitySchemaGroupSettingsInfoTooltipTitle
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `default` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `key` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitem.md b/entity/docs/models/shared/entityschemaitem.md
new file mode 100755
index 000000000..15a84fa99
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitem.md
@@ -0,0 +1,32 @@
+# EntitySchemaItem
+
+The "type" of an Entity. Describes the shape. Includes Entity Attributes, Relations and Capabilities.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `attributes` | List[[Union[TextAttribute, LinkAttribute, DateAttribute, CountryAttribute, BooleanAttribute, SelectAttribute, MultiSelectAttribute, StatusAttribute, SequenceAttribute, RelationAttribute, UserRelationAttribute, AddressRelationAttribute, PaymentMethodRelationAttribute, CurrencyAttribute, RepeatableAttribute, TagsAttribute, NumberAttribute, ConsentAttribute, InternalAttribute, OrderedListAttribute, FileAttribute, ComputedAttribute, PartnerStatusAttribute, InvitationEmailAttribute, AutomationAttribute, InternalUserAttribute, PurposeAttribute, PartnerOrganisationAttribute]](../../models/shared/attribute.md)] | :heavy_check_mark: | An ordered list of attributes the entity contains | [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] |
+| `blueprint` | *Optional[str]* | :heavy_minus_sign: | Reference to blueprint | |
+| `capabilities` | List[[EntityCapability](../../models/shared/entitycapability.md)] | :heavy_check_mark: | N/A | |
+| `comment` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `created_at` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `dialog_config` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | |
+| `draft` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `enable_setting` | List[*str*] | :heavy_minus_sign: | This schema should only be active when one of the organization settings is enabled | 360_features |
+| `explicit_search_mappings` | Dict[str, [SearchMappings](../../models/shared/searchmappings.md)] | :heavy_minus_sign: | Advanced: explicit Elasticsearch index mapping definitions for entity data
| [object Object] |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This schema should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group_settings` | List[[EntitySchemaItemGroupSettings](../../models/shared/entityschemaitemgroupsettings.md)] | :heavy_minus_sign: | A dictionary of Group Titles and associated settings if present. | [object Object],[object Object] |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | person |
+| `id` | *Optional[str]* | :heavy_minus_sign: | Generated uuid for schema | |
+| `layout_settings` | [Optional[EntitySchemaItemLayoutSettings]](../../models/shared/entityschemaitemlayoutsettings.md) | :heavy_minus_sign: | Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
- Managed Properties: are interpreted and transformed into layout styles
- Un-managed Properties: are appended as styles into the attribute mounting node
| |
+| `name` | *str* | :heavy_check_mark: | User-friendly identifier for the entity schema | Contact |
+| `plural` | *str* | :heavy_check_mark: | N/A | Contacts |
+| `published` | *Optional[bool]* | :heavy_minus_sign: | N/A | false |
+| `slug` | *str* | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `source` | [Optional[EntitySchemaItemSource]](../../models/shared/entityschemaitemsource.md) | :heavy_minus_sign: | N/A | |
+| `title_template` | *Optional[str]* | :heavy_minus_sign: | Template for rendering the title field. Uses handlebars | {{first_name}} {{last_name}} |
+| `ui_config` | [Optional[EntitySchemaItemUIConfig]](../../models/shared/entityschemaitemuiconfig.md) | :heavy_minus_sign: | N/A | |
+| `updated_at` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `version` | *Optional[int]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemgroupsettings.md b/entity/docs/models/shared/entityschemaitemgroupsettings.md
new file mode 100755
index 000000000..59974ae7f
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemgroupsettings.md
@@ -0,0 +1,16 @@
+# EntitySchemaItemGroupSettings
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `expanded` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This group should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `info_tooltip_title` | [Optional[EntitySchemaItemGroupSettingsInfoTooltipTitle]](../../models/shared/entityschemaitemgroupsettingsinfotooltiptitle.md) | :heavy_minus_sign: | N/A | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Render order of the group | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | N/A | _is_composite_price = "false" |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This group should only be active when the setting is enabled | MY_SETTING |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemgroupsettingsinfotooltiptitle.md b/entity/docs/models/shared/entityschemaitemgroupsettingsinfotooltiptitle.md
new file mode 100755
index 000000000..0ed2843a0
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemgroupsettingsinfotooltiptitle.md
@@ -0,0 +1,9 @@
+# EntitySchemaItemGroupSettingsInfoTooltipTitle
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `default` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `key` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemlayoutsettings.md b/entity/docs/models/shared/entityschemaitemlayoutsettings.md
new file mode 100755
index 000000000..43778e08e
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemlayoutsettings.md
@@ -0,0 +1,15 @@
+# EntitySchemaItemLayoutSettings
+
+Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
+- Managed Properties: are interpreted and transformed into layout styles
+- Un-managed Properties: are appended as styles into the attribute mounting node
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `grid_gap` | *Optional[str]* | :heavy_minus_sign: | Defines the grid gap for the mounting node of the attribute. |
+| `grid_template_columns` | *Optional[str]* | :heavy_minus_sign: | Defines the grid column template for the mounting node of the attribute. |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemsource.md b/entity/docs/models/shared/entityschemaitemsource.md
new file mode 100755
index 000000000..a217645af
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemsource.md
@@ -0,0 +1,9 @@
+# EntitySchemaItemSource
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `type` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemuiconfig.md b/entity/docs/models/shared/entityschemaitemuiconfig.md
new file mode 100755
index 000000000..94301cef2
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfig.md
@@ -0,0 +1,13 @@
+# EntitySchemaItemUIConfig
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
+| `create_view` | [Optional[Union[EntityDefaultCreate, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemaitemuiconfigcreateview.md) | :heavy_minus_sign: | N/A |
+| `edit_view` | [Optional[Union[EntityDefaultEdit, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemaitemuiconfigeditview.md) | :heavy_minus_sign: | N/A |
+| `list_item` | [Optional[EntitySchemaItemUIConfigListItem]](../../models/shared/entityschemaitemuiconfiglistitem.md) | :heavy_minus_sign: | N/A |
+| `sharing` | [Optional[EntitySchemaItemUIConfigSharing]](../../models/shared/entityschemaitemuiconfigsharing.md) | :heavy_minus_sign: | N/A |
+| `single_view` | [Optional[Union[EntityDefaultEdit, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemaitemuiconfigsingleview.md) | :heavy_minus_sign: | N/A |
+| `table_view` | [Optional[Union[EntityDefaultTable, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemaitemuiconfigtableview.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemuiconfigcreateview.md b/entity/docs/models/shared/entityschemaitemuiconfigcreateview.md
new file mode 100755
index 000000000..734499189
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfigcreateview.md
@@ -0,0 +1,23 @@
+# EntitySchemaItemUIConfigCreateView
+
+
+## Supported Types
+
+### EntityDefaultCreate
+
+```python
+entitySchemaItemUIConfigCreateView: shared.EntityDefaultCreate = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaItemUIConfigCreateView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaItemUIConfigCreateView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemaitemuiconfigeditview.md b/entity/docs/models/shared/entityschemaitemuiconfigeditview.md
new file mode 100755
index 000000000..32c130696
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfigeditview.md
@@ -0,0 +1,23 @@
+# EntitySchemaItemUIConfigEditView
+
+
+## Supported Types
+
+### EntityDefaultEdit
+
+```python
+entitySchemaItemUIConfigEditView: shared.EntityDefaultEdit = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaItemUIConfigEditView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaItemUIConfigEditView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemaitemuiconfiglistitem.md b/entity/docs/models/shared/entityschemaitemuiconfiglistitem.md
new file mode 100755
index 000000000..1d309b11c
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfiglistitem.md
@@ -0,0 +1,9 @@
+# EntitySchemaItemUIConfigListItem
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `quick_actions` | List[[EntityAction](../../models/shared/entityaction.md)] | :heavy_minus_sign: | N/A |
+| `summary_attributes` | List[[Union[SummaryAttribute, str]](../../models/shared/entityschemaitemuiconfiglistitemsummaryattributes.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemuiconfiglistitemsummaryattributes.md b/entity/docs/models/shared/entityschemaitemuiconfiglistitemsummaryattributes.md
new file mode 100755
index 000000000..bc6ec6f32
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfiglistitemsummaryattributes.md
@@ -0,0 +1,17 @@
+# EntitySchemaItemUIConfigListItemSummaryAttributes
+
+
+## Supported Types
+
+### SummaryAttribute
+
+```python
+entitySchemaItemUIConfigListItemSummaryAttributes: shared.SummaryAttribute = /* values here */
+```
+
+###
+
+```python
+entitySchemaItemUIConfigListItemSummaryAttributes: str = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemaitemuiconfigsharing.md b/entity/docs/models/shared/entityschemaitemuiconfigsharing.md
new file mode 100755
index 000000000..7ef69502f
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfigsharing.md
@@ -0,0 +1,8 @@
+# EntitySchemaItemUIConfigSharing
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
+| `show_sharing_button` | *Optional[bool]* | :heavy_minus_sign: | Show the sharing button in entity detail view | true |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemaitemuiconfigsingleview.md b/entity/docs/models/shared/entityschemaitemuiconfigsingleview.md
new file mode 100755
index 000000000..42746d287
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfigsingleview.md
@@ -0,0 +1,23 @@
+# EntitySchemaItemUIConfigSingleView
+
+
+## Supported Types
+
+### EntityDefaultEdit
+
+```python
+entitySchemaItemUIConfigSingleView: shared.EntityDefaultEdit = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaItemUIConfigSingleView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaItemUIConfigSingleView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemaitemuiconfigtableview.md b/entity/docs/models/shared/entityschemaitemuiconfigtableview.md
new file mode 100755
index 000000000..9e4895685
--- /dev/null
+++ b/entity/docs/models/shared/entityschemaitemuiconfigtableview.md
@@ -0,0 +1,23 @@
+# EntitySchemaItemUIConfigTableView
+
+
+## Supported Types
+
+### EntityDefaultTable
+
+```python
+entitySchemaItemUIConfigTableView: shared.EntityDefaultTable = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaItemUIConfigTableView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaItemUIConfigTableView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemalayoutsettings.md b/entity/docs/models/shared/entityschemalayoutsettings.md
new file mode 100755
index 000000000..44eb5a085
--- /dev/null
+++ b/entity/docs/models/shared/entityschemalayoutsettings.md
@@ -0,0 +1,15 @@
+# EntitySchemaLayoutSettings
+
+Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
+- Managed Properties: are interpreted and transformed into layout styles
+- Un-managed Properties: are appended as styles into the attribute mounting node
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `grid_gap` | *Optional[str]* | :heavy_minus_sign: | Defines the grid gap for the mounting node of the attribute. |
+| `grid_template_columns` | *Optional[str]* | :heavy_minus_sign: | Defines the grid column template for the mounting node of the attribute. |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemauiconfig.md b/entity/docs/models/shared/entityschemauiconfig.md
new file mode 100755
index 000000000..246332f95
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfig.md
@@ -0,0 +1,13 @@
+# EntitySchemaUIConfig
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
+| `create_view` | [Optional[Union[EntityDefaultCreate, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemauiconfigcreateview.md) | :heavy_minus_sign: | N/A |
+| `edit_view` | [Optional[Union[EntityDefaultEdit, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemauiconfigeditview.md) | :heavy_minus_sign: | N/A |
+| `list_item` | [Optional[EntitySchemaUIConfigListItem]](../../models/shared/entityschemauiconfiglistitem.md) | :heavy_minus_sign: | N/A |
+| `sharing` | [Optional[EntitySchemaUIConfigSharing]](../../models/shared/entityschemauiconfigsharing.md) | :heavy_minus_sign: | N/A |
+| `single_view` | [Optional[Union[EntityDefaultEdit, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemauiconfigsingleview.md) | :heavy_minus_sign: | N/A |
+| `table_view` | [Optional[Union[EntityDefaultTable, RedirectEntityView, EntityViewDisabled]]](../../models/shared/entityschemauiconfigtableview.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemauiconfigcreateview.md b/entity/docs/models/shared/entityschemauiconfigcreateview.md
new file mode 100755
index 000000000..323b58096
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfigcreateview.md
@@ -0,0 +1,23 @@
+# EntitySchemaUIConfigCreateView
+
+
+## Supported Types
+
+### EntityDefaultCreate
+
+```python
+entitySchemaUIConfigCreateView: shared.EntityDefaultCreate = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaUIConfigCreateView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaUIConfigCreateView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemauiconfigeditview.md b/entity/docs/models/shared/entityschemauiconfigeditview.md
new file mode 100755
index 000000000..44af4c892
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfigeditview.md
@@ -0,0 +1,23 @@
+# EntitySchemaUIConfigEditView
+
+
+## Supported Types
+
+### EntityDefaultEdit
+
+```python
+entitySchemaUIConfigEditView: shared.EntityDefaultEdit = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaUIConfigEditView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaUIConfigEditView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemauiconfiglistitem.md b/entity/docs/models/shared/entityschemauiconfiglistitem.md
new file mode 100755
index 000000000..b0f90aef6
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfiglistitem.md
@@ -0,0 +1,9 @@
+# EntitySchemaUIConfigListItem
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `quick_actions` | List[[EntityAction](../../models/shared/entityaction.md)] | :heavy_minus_sign: | N/A |
+| `summary_attributes` | List[[Union[SummaryAttribute, str]](../../models/shared/entityschemauiconfiglistitemsummaryattributes.md)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemauiconfiglistitemsummaryattributes.md b/entity/docs/models/shared/entityschemauiconfiglistitemsummaryattributes.md
new file mode 100755
index 000000000..ed0f9a509
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfiglistitemsummaryattributes.md
@@ -0,0 +1,17 @@
+# EntitySchemaUIConfigListItemSummaryAttributes
+
+
+## Supported Types
+
+### SummaryAttribute
+
+```python
+entitySchemaUIConfigListItemSummaryAttributes: shared.SummaryAttribute = /* values here */
+```
+
+###
+
+```python
+entitySchemaUIConfigListItemSummaryAttributes: str = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemauiconfigsharing.md b/entity/docs/models/shared/entityschemauiconfigsharing.md
new file mode 100755
index 000000000..89afd2b7f
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfigsharing.md
@@ -0,0 +1,8 @@
+# EntitySchemaUIConfigSharing
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
+| `show_sharing_button` | *Optional[bool]* | :heavy_minus_sign: | Show the sharing button in entity detail view | true |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityschemauiconfigsingleview.md b/entity/docs/models/shared/entityschemauiconfigsingleview.md
new file mode 100755
index 000000000..58e0d9c60
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfigsingleview.md
@@ -0,0 +1,23 @@
+# EntitySchemaUIConfigSingleView
+
+
+## Supported Types
+
+### EntityDefaultEdit
+
+```python
+entitySchemaUIConfigSingleView: shared.EntityDefaultEdit = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaUIConfigSingleView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaUIConfigSingleView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entityschemauiconfigtableview.md b/entity/docs/models/shared/entityschemauiconfigtableview.md
new file mode 100755
index 000000000..30d2ea629
--- /dev/null
+++ b/entity/docs/models/shared/entityschemauiconfigtableview.md
@@ -0,0 +1,23 @@
+# EntitySchemaUIConfigTableView
+
+
+## Supported Types
+
+### EntityDefaultTable
+
+```python
+entitySchemaUIConfigTableView: shared.EntityDefaultTable = /* values here */
+```
+
+### RedirectEntityView
+
+```python
+entitySchemaUIConfigTableView: shared.RedirectEntityView = /* values here */
+```
+
+### EntityViewDisabled
+
+```python
+entitySchemaUIConfigTableView: shared.EntityViewDisabled = /* values here */
+```
+
diff --git a/entity/docs/models/shared/entitysearchparams.md b/entity/docs/models/shared/entitysearchparams.md
new file mode 100755
index 000000000..a9f12a2cb
--- /dev/null
+++ b/entity/docs/models/shared/entitysearchparams.md
@@ -0,0 +1,15 @@
+# EntitySearchParams
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `aggs` | [Optional[EntitySearchParamsAggs]](../../models/shared/entitysearchparamsaggs.md) | :heavy_minus_sign: | Aggregation supported by ElasticSearch allows summarizing data as metrics, statistics, or other analytics. | |
+| `fields` | List[*str*] | :heavy_minus_sign: | List of entity fields to include in search results | _id,_title,first_name |
+| `from_` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `hydrate` | *Optional[bool]* | :heavy_minus_sign: | When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place. | |
+| `include_scores` | *Optional[bool]* | :heavy_minus_sign: | Adds a `_score` number field to results that can be used to rank by match score | |
+| `q` | *str* | :heavy_check_mark: | Lucene queries supported with ElasticSearch | _schema:contact AND status:active |
+| `size` | *Optional[int]* | :heavy_minus_sign: | Max search size is 1000 with higher values defaulting to 1000 | |
+| `sort` | *Optional[str]* | :heavy_minus_sign: | N/A | _created_at:desc |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitysearchparamsaggs.md b/entity/docs/models/shared/entitysearchparamsaggs.md
new file mode 100755
index 000000000..a8169ca29
--- /dev/null
+++ b/entity/docs/models/shared/entitysearchparamsaggs.md
@@ -0,0 +1,9 @@
+# EntitySearchParamsAggs
+
+Aggregation supported by ElasticSearch allows summarizing data as metrics, statistics, or other analytics.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitysearchresults.md b/entity/docs/models/shared/entitysearchresults.md
new file mode 100755
index 000000000..8024a7bc0
--- /dev/null
+++ b/entity/docs/models/shared/entitysearchresults.md
@@ -0,0 +1,10 @@
+# EntitySearchResults
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `aggregations` | [Optional[EntitySearchResultsAggregations]](../../models/shared/entitysearchresultsaggregations.md) | :heavy_minus_sign: | N/A | |
+| `hits` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 |
+| `results` | List[[EntityItem](../../models/shared/entityitem.md)] | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entitysearchresultsaggregations.md b/entity/docs/models/shared/entitysearchresultsaggregations.md
new file mode 100755
index 000000000..bd756a579
--- /dev/null
+++ b/entity/docs/models/shared/entitysearchresultsaggregations.md
@@ -0,0 +1,7 @@
+# EntitySearchResultsAggregations
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityviewdisabled.md b/entity/docs/models/shared/entityviewdisabled.md
new file mode 100755
index 000000000..bce87a9f8
--- /dev/null
+++ b/entity/docs/models/shared/entityviewdisabled.md
@@ -0,0 +1,8 @@
+# EntityViewDisabled
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
+| `view_type` | [Optional[EntityViewDisabledViewType]](../../models/shared/entityviewdisabledviewtype.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/entityviewdisabledviewtype.md b/entity/docs/models/shared/entityviewdisabledviewtype.md
new file mode 100755
index 000000000..332085008
--- /dev/null
+++ b/entity/docs/models/shared/entityviewdisabledviewtype.md
@@ -0,0 +1,8 @@
+# EntityViewDisabledViewType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `DISABLED` | disabled |
\ No newline at end of file
diff --git a/entity/docs/models/shared/fileattribute.md b/entity/docs/models/shared/fileattribute.md
new file mode 100755
index 000000000..fb83c0a97
--- /dev/null
+++ b/entity/docs/models/shared/fileattribute.md
@@ -0,0 +1,40 @@
+# FileAttribute
+
+File or Image Attachment
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `allowed_extensions` | List[*str*] | :heavy_minus_sign: | List of file extensions (without the dot suffix) | csv |
+| `constraints` | [Optional[FileAttributeConstraints]](../../models/shared/fileattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_access_control` | [Optional[FileAttributeDefaultAccessControl]](../../models/shared/fileattributedefaultaccesscontrol.md) | :heavy_minus_sign: | N/A | |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `display_images_landscaped` | *Optional[bool]* | :heavy_minus_sign: | Controls how the images are presented to the user during upload on the Entity Details view. | |
+| `enable_description` | *Optional[bool]* | :heavy_minus_sign: | When set to true, an i18n description will be used alongside the attribute label.
This description should be set through the platform locales in the form: `file.{attribute_name}.description_text`.
| |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[FileAttributeInfoHelpers]](../../models/shared/fileattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `multiple` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [FileAttributeType](../../models/shared/fileattributetype.md) | :heavy_check_mark: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/fileattributeconstraints.md b/entity/docs/models/shared/fileattributeconstraints.md
new file mode 100755
index 000000000..85ae5cf02
--- /dev/null
+++ b/entity/docs/models/shared/fileattributeconstraints.md
@@ -0,0 +1,11 @@
+# FileAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/fileattributedefaultaccesscontrol.md b/entity/docs/models/shared/fileattributedefaultaccesscontrol.md
new file mode 100755
index 000000000..135eb731b
--- /dev/null
+++ b/entity/docs/models/shared/fileattributedefaultaccesscontrol.md
@@ -0,0 +1,9 @@
+# FileAttributeDefaultAccessControl
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `PUBLIC_READ` | public-read |
+| `PRIVATE` | private |
\ No newline at end of file
diff --git a/entity/docs/models/shared/fileattributeinfohelpers.md b/entity/docs/models/shared/fileattributeinfohelpers.md
new file mode 100755
index 000000000..c30e599a0
--- /dev/null
+++ b/entity/docs/models/shared/fileattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# FileAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/fileattributetype.md b/entity/docs/models/shared/fileattributetype.md
new file mode 100755
index 000000000..59df0b90d
--- /dev/null
+++ b/entity/docs/models/shared/fileattributetype.md
@@ -0,0 +1,9 @@
+# FileAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------- | ------- |
+| `IMAGE` | image |
+| `FILE` | file |
\ No newline at end of file
diff --git a/entity/docs/models/shared/getrelatedentitiescount.md b/entity/docs/models/shared/getrelatedentitiescount.md
new file mode 100755
index 000000000..8aa138add
--- /dev/null
+++ b/entity/docs/models/shared/getrelatedentitiescount.md
@@ -0,0 +1,8 @@
+# GetRelatedEntitiesCount
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `hits` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 |
\ No newline at end of file
diff --git a/entity/docs/models/shared/getrelationsresp.md b/entity/docs/models/shared/getrelationsresp.md
new file mode 100755
index 000000000..837a898bb
--- /dev/null
+++ b/entity/docs/models/shared/getrelationsresp.md
@@ -0,0 +1,17 @@
+# GetRelationsResp
+
+
+## Supported Types
+
+### RelationItem
+
+```python
+getRelationsResp: shared.RelationItem = /* values here */
+```
+
+### RelationEntity
+
+```python
+getRelationsResp: shared.RelationEntity = /* values here */
+```
+
diff --git a/entity/docs/models/shared/getrelationsrespwithpagination.md b/entity/docs/models/shared/getrelationsrespwithpagination.md
new file mode 100755
index 000000000..388754516
--- /dev/null
+++ b/entity/docs/models/shared/getrelationsrespwithpagination.md
@@ -0,0 +1,9 @@
+# GetRelationsRespWithPagination
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `hits` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 |
+| `relations` | List[[Union[RelationItem, RelationEntity]](../../models/shared/getrelationsresp.md)] | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internalattribute.md b/entity/docs/models/shared/internalattribute.md
new file mode 100755
index 000000000..42d1d7a1c
--- /dev/null
+++ b/entity/docs/models/shared/internalattribute.md
@@ -0,0 +1,35 @@
+# InternalAttribute
+
+No UI representation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[InternalAttributeConstraints]](../../models/shared/internalattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[InternalAttributeInfoHelpers]](../../models/shared/internalattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[InternalAttributeType]](../../models/shared/internalattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internalattributeconstraints.md b/entity/docs/models/shared/internalattributeconstraints.md
new file mode 100755
index 000000000..365f823b4
--- /dev/null
+++ b/entity/docs/models/shared/internalattributeconstraints.md
@@ -0,0 +1,11 @@
+# InternalAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internalattributeinfohelpers.md b/entity/docs/models/shared/internalattributeinfohelpers.md
new file mode 100755
index 000000000..0c48f90d5
--- /dev/null
+++ b/entity/docs/models/shared/internalattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# InternalAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internalattributetype.md b/entity/docs/models/shared/internalattributetype.md
new file mode 100755
index 000000000..ce3397a2e
--- /dev/null
+++ b/entity/docs/models/shared/internalattributetype.md
@@ -0,0 +1,8 @@
+# InternalAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `INTERNAL` | internal |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internaluserattribute.md b/entity/docs/models/shared/internaluserattribute.md
new file mode 100755
index 000000000..4594b43d9
--- /dev/null
+++ b/entity/docs/models/shared/internaluserattribute.md
@@ -0,0 +1,35 @@
+# InternalUserAttribute
+
+Epilot internal user info
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[InternalUserAttributeConstraints]](../../models/shared/internaluserattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[InternalUserAttributeInfoHelpers]](../../models/shared/internaluserattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[InternalUserAttributeType]](../../models/shared/internaluserattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internaluserattributeconstraints.md b/entity/docs/models/shared/internaluserattributeconstraints.md
new file mode 100755
index 000000000..c9a52dfcc
--- /dev/null
+++ b/entity/docs/models/shared/internaluserattributeconstraints.md
@@ -0,0 +1,11 @@
+# InternalUserAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internaluserattributeinfohelpers.md b/entity/docs/models/shared/internaluserattributeinfohelpers.md
new file mode 100755
index 000000000..ae2de7df5
--- /dev/null
+++ b/entity/docs/models/shared/internaluserattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# InternalUserAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/internaluserattributetype.md b/entity/docs/models/shared/internaluserattributetype.md
new file mode 100755
index 000000000..f6f08a50c
--- /dev/null
+++ b/entity/docs/models/shared/internaluserattributetype.md
@@ -0,0 +1,8 @@
+# InternalUserAttributeType
+
+
+## Values
+
+| Name | Value |
+| --------------- | --------------- |
+| `INTERNAL_USER` | internal_user |
\ No newline at end of file
diff --git a/entity/docs/models/shared/invitationemailattribute.md b/entity/docs/models/shared/invitationemailattribute.md
new file mode 100755
index 000000000..f835a26a2
--- /dev/null
+++ b/entity/docs/models/shared/invitationemailattribute.md
@@ -0,0 +1,35 @@
+# InvitationEmailAttribute
+
+Email address for send invitation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[InvitationEmailAttributeConstraints]](../../models/shared/invitationemailattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[InvitationEmailAttributeInfoHelpers]](../../models/shared/invitationemailattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[InvitationEmailAttributeType]](../../models/shared/invitationemailattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/invitationemailattributeconstraints.md b/entity/docs/models/shared/invitationemailattributeconstraints.md
new file mode 100755
index 000000000..ce38d18b1
--- /dev/null
+++ b/entity/docs/models/shared/invitationemailattributeconstraints.md
@@ -0,0 +1,11 @@
+# InvitationEmailAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/invitationemailattributeinfohelpers.md b/entity/docs/models/shared/invitationemailattributeinfohelpers.md
new file mode 100755
index 000000000..0025670ad
--- /dev/null
+++ b/entity/docs/models/shared/invitationemailattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# InvitationEmailAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/invitationemailattributetype.md b/entity/docs/models/shared/invitationemailattributetype.md
new file mode 100755
index 000000000..ddd4ae2c4
--- /dev/null
+++ b/entity/docs/models/shared/invitationemailattributetype.md
@@ -0,0 +1,8 @@
+# InvitationEmailAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------------------ | ------------------ |
+| `INVITATION_EMAIL` | invitation_email |
\ No newline at end of file
diff --git a/entity/docs/models/shared/linkattribute.md b/entity/docs/models/shared/linkattribute.md
new file mode 100755
index 000000000..76da3c59f
--- /dev/null
+++ b/entity/docs/models/shared/linkattribute.md
@@ -0,0 +1,35 @@
+# LinkAttribute
+
+Link with title and href
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[LinkAttributeConstraints]](../../models/shared/linkattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[LinkAttributeInfoHelpers]](../../models/shared/linkattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[LinkAttributeType]](../../models/shared/linkattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/linkattributeconstraints.md b/entity/docs/models/shared/linkattributeconstraints.md
new file mode 100755
index 000000000..189c29348
--- /dev/null
+++ b/entity/docs/models/shared/linkattributeconstraints.md
@@ -0,0 +1,11 @@
+# LinkAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/linkattributeinfohelpers.md b/entity/docs/models/shared/linkattributeinfohelpers.md
new file mode 100755
index 000000000..419161104
--- /dev/null
+++ b/entity/docs/models/shared/linkattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# LinkAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/linkattributetype.md b/entity/docs/models/shared/linkattributetype.md
new file mode 100755
index 000000000..5da92ba14
--- /dev/null
+++ b/entity/docs/models/shared/linkattributetype.md
@@ -0,0 +1,8 @@
+# LinkAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `LINK` | link |
\ No newline at end of file
diff --git a/entity/docs/models/shared/multiselectattribute.md b/entity/docs/models/shared/multiselectattribute.md
new file mode 100755
index 000000000..59c17f564
--- /dev/null
+++ b/entity/docs/models/shared/multiselectattribute.md
@@ -0,0 +1,39 @@
+# MultiSelectAttribute
+
+Multi Choice Selection
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `allow_any` | *Optional[bool]* | :heavy_minus_sign: | Allow arbitrary input values in addition to provided options | |
+| `allow_extra_options` | *Optional[bool]* | :heavy_minus_sign: | controls if the 360 ui will allow the user to enter a value which is not defined by the options | |
+| `constraints` | [Optional[MultiSelectAttributeConstraints]](../../models/shared/multiselectattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `disable_case_sensitive` | *Optional[bool]* | :heavy_minus_sign: | controls if the matching of values against the options is case sensitive or not | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[MultiSelectAttributeInfoHelpers]](../../models/shared/multiselectattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `options` | List[[Union[str, MultiSelectAttributeOptions2]](../../models/shared/multiselectattributeoptions.md)] | :heavy_minus_sign: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[MultiSelectAttributeType]](../../models/shared/multiselectattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/multiselectattributeconstraints.md b/entity/docs/models/shared/multiselectattributeconstraints.md
new file mode 100755
index 000000000..e84f6ea22
--- /dev/null
+++ b/entity/docs/models/shared/multiselectattributeconstraints.md
@@ -0,0 +1,11 @@
+# MultiSelectAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/multiselectattributeinfohelpers.md b/entity/docs/models/shared/multiselectattributeinfohelpers.md
new file mode 100755
index 000000000..d52b88263
--- /dev/null
+++ b/entity/docs/models/shared/multiselectattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# MultiSelectAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/multiselectattributeoptions.md b/entity/docs/models/shared/multiselectattributeoptions.md
new file mode 100755
index 000000000..3e9b78497
--- /dev/null
+++ b/entity/docs/models/shared/multiselectattributeoptions.md
@@ -0,0 +1,17 @@
+# MultiSelectAttributeOptions
+
+
+## Supported Types
+
+###
+
+```python
+multiSelectAttributeOptions: str = /* values here */
+```
+
+### MultiSelectAttributeOptions2
+
+```python
+multiSelectAttributeOptions: shared.MultiSelectAttributeOptions2 = /* values here */
+```
+
diff --git a/entity/docs/models/shared/multiselectattributeoptions2.md b/entity/docs/models/shared/multiselectattributeoptions2.md
new file mode 100755
index 000000000..48fc585d5
--- /dev/null
+++ b/entity/docs/models/shared/multiselectattributeoptions2.md
@@ -0,0 +1,9 @@
+# MultiSelectAttributeOptions2
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `title` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `value` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/multiselectattributetype.md b/entity/docs/models/shared/multiselectattributetype.md
new file mode 100755
index 000000000..e3bc2b901
--- /dev/null
+++ b/entity/docs/models/shared/multiselectattributetype.md
@@ -0,0 +1,9 @@
+# MultiSelectAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------------- | ------------- |
+| `MULTISELECT` | multiselect |
+| `CHECKBOX` | checkbox |
\ No newline at end of file
diff --git a/entity/docs/models/shared/numberattribute.md b/entity/docs/models/shared/numberattribute.md
new file mode 100755
index 000000000..e832be565
--- /dev/null
+++ b/entity/docs/models/shared/numberattribute.md
@@ -0,0 +1,36 @@
+# NumberAttribute
+
+Numeric input
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[NumberAttributeConstraints]](../../models/shared/numberattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `format` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[NumberAttributeInfoHelpers]](../../models/shared/numberattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[NumberAttributeType]](../../models/shared/numberattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/numberattributeconstraints.md b/entity/docs/models/shared/numberattributeconstraints.md
new file mode 100755
index 000000000..1bffe1823
--- /dev/null
+++ b/entity/docs/models/shared/numberattributeconstraints.md
@@ -0,0 +1,11 @@
+# NumberAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/numberattributeinfohelpers.md b/entity/docs/models/shared/numberattributeinfohelpers.md
new file mode 100755
index 000000000..2a696125d
--- /dev/null
+++ b/entity/docs/models/shared/numberattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# NumberAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/numberattributetype.md b/entity/docs/models/shared/numberattributetype.md
new file mode 100755
index 000000000..a355b2afb
--- /dev/null
+++ b/entity/docs/models/shared/numberattributetype.md
@@ -0,0 +1,8 @@
+# NumberAttributeType
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `NUMBER` | number |
\ No newline at end of file
diff --git a/entity/docs/models/shared/orderedlistattribute.md b/entity/docs/models/shared/orderedlistattribute.md
new file mode 100755
index 000000000..2169cf077
--- /dev/null
+++ b/entity/docs/models/shared/orderedlistattribute.md
@@ -0,0 +1,35 @@
+# OrderedListAttribute
+
+Type of attribute to render N number of ordered fields
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[OrderedListAttributeConstraints]](../../models/shared/orderedlistattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[OrderedListAttributeInfoHelpers]](../../models/shared/orderedlistattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[OrderedListAttributeType]](../../models/shared/orderedlistattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/orderedlistattributeconstraints.md b/entity/docs/models/shared/orderedlistattributeconstraints.md
new file mode 100755
index 000000000..853d23d25
--- /dev/null
+++ b/entity/docs/models/shared/orderedlistattributeconstraints.md
@@ -0,0 +1,11 @@
+# OrderedListAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/orderedlistattributeinfohelpers.md b/entity/docs/models/shared/orderedlistattributeinfohelpers.md
new file mode 100755
index 000000000..8007ab547
--- /dev/null
+++ b/entity/docs/models/shared/orderedlistattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# OrderedListAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/orderedlistattributetype.md b/entity/docs/models/shared/orderedlistattributetype.md
new file mode 100755
index 000000000..7954fba64
--- /dev/null
+++ b/entity/docs/models/shared/orderedlistattributetype.md
@@ -0,0 +1,8 @@
+# OrderedListAttributeType
+
+
+## Values
+
+| Name | Value |
+| -------------- | -------------- |
+| `ORDERED_LIST` | ordered_list |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerorganisationattribute.md b/entity/docs/models/shared/partnerorganisationattribute.md
new file mode 100755
index 000000000..de15cbcf0
--- /dev/null
+++ b/entity/docs/models/shared/partnerorganisationattribute.md
@@ -0,0 +1,35 @@
+# PartnerOrganisationAttribute
+
+Shared Partner Organisations
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[PartnerOrganisationAttributeConstraints]](../../models/shared/partnerorganisationattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[PartnerOrganisationAttributeInfoHelpers]](../../models/shared/partnerorganisationattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[PartnerOrganisationAttributeType]](../../models/shared/partnerorganisationattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerorganisationattributeconstraints.md b/entity/docs/models/shared/partnerorganisationattributeconstraints.md
new file mode 100755
index 000000000..c3894bf20
--- /dev/null
+++ b/entity/docs/models/shared/partnerorganisationattributeconstraints.md
@@ -0,0 +1,11 @@
+# PartnerOrganisationAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerorganisationattributeinfohelpers.md b/entity/docs/models/shared/partnerorganisationattributeinfohelpers.md
new file mode 100755
index 000000000..38edcd01d
--- /dev/null
+++ b/entity/docs/models/shared/partnerorganisationattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# PartnerOrganisationAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerorganisationattributetype.md b/entity/docs/models/shared/partnerorganisationattributetype.md
new file mode 100755
index 000000000..2ed31a1e1
--- /dev/null
+++ b/entity/docs/models/shared/partnerorganisationattributetype.md
@@ -0,0 +1,8 @@
+# PartnerOrganisationAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------------------- | ---------------------- |
+| `PARTNER_ORGANISATION` | partner_organisation |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerstatusattribute.md b/entity/docs/models/shared/partnerstatusattribute.md
new file mode 100755
index 000000000..04bd26dff
--- /dev/null
+++ b/entity/docs/models/shared/partnerstatusattribute.md
@@ -0,0 +1,35 @@
+# PartnerStatusAttribute
+
+Partner Status
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[PartnerStatusAttributeConstraints]](../../models/shared/partnerstatusattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[PartnerStatusAttributeInfoHelpers]](../../models/shared/partnerstatusattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[PartnerStatusAttributeType]](../../models/shared/partnerstatusattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerstatusattributeconstraints.md b/entity/docs/models/shared/partnerstatusattributeconstraints.md
new file mode 100755
index 000000000..ac28254a5
--- /dev/null
+++ b/entity/docs/models/shared/partnerstatusattributeconstraints.md
@@ -0,0 +1,11 @@
+# PartnerStatusAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerstatusattributeinfohelpers.md b/entity/docs/models/shared/partnerstatusattributeinfohelpers.md
new file mode 100755
index 000000000..be687b4f0
--- /dev/null
+++ b/entity/docs/models/shared/partnerstatusattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# PartnerStatusAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/partnerstatusattributetype.md b/entity/docs/models/shared/partnerstatusattributetype.md
new file mode 100755
index 000000000..f9be21824
--- /dev/null
+++ b/entity/docs/models/shared/partnerstatusattributetype.md
@@ -0,0 +1,8 @@
+# PartnerStatusAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------------- | ---------------- |
+| `PARTNER_STATUS` | partner_status |
\ No newline at end of file
diff --git a/entity/docs/models/shared/paymentmethodrelationattribute.md b/entity/docs/models/shared/paymentmethodrelationattribute.md
new file mode 100755
index 000000000..bbedfe0f9
--- /dev/null
+++ b/entity/docs/models/shared/paymentmethodrelationattribute.md
@@ -0,0 +1,36 @@
+# PaymentMethodRelationAttribute
+
+Reference to a payment method attribute of another entity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[PaymentMethodRelationAttributeConstraints]](../../models/shared/paymentmethodrelationattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `has_primary` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[PaymentMethodRelationAttributeInfoHelpers]](../../models/shared/paymentmethodrelationattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[PaymentMethodRelationAttributeType]](../../models/shared/paymentmethodrelationattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/paymentmethodrelationattributeconstraints.md b/entity/docs/models/shared/paymentmethodrelationattributeconstraints.md
new file mode 100755
index 000000000..07b884cb9
--- /dev/null
+++ b/entity/docs/models/shared/paymentmethodrelationattributeconstraints.md
@@ -0,0 +1,11 @@
+# PaymentMethodRelationAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/paymentmethodrelationattributeinfohelpers.md b/entity/docs/models/shared/paymentmethodrelationattributeinfohelpers.md
new file mode 100755
index 000000000..1e28c23c7
--- /dev/null
+++ b/entity/docs/models/shared/paymentmethodrelationattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# PaymentMethodRelationAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/paymentmethodrelationattributetype.md b/entity/docs/models/shared/paymentmethodrelationattributetype.md
new file mode 100755
index 000000000..3a5cdf1c9
--- /dev/null
+++ b/entity/docs/models/shared/paymentmethodrelationattributetype.md
@@ -0,0 +1,8 @@
+# PaymentMethodRelationAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------------------------- | ------------------------- |
+| `RELATION_PAYMENT_METHOD` | relation_payment_method |
\ No newline at end of file
diff --git a/entity/docs/models/shared/purposeattribute.md b/entity/docs/models/shared/purposeattribute.md
new file mode 100755
index 000000000..4ca06b017
--- /dev/null
+++ b/entity/docs/models/shared/purposeattribute.md
@@ -0,0 +1,39 @@
+# PurposeAttribute
+
+Entity Taxonomy
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[PurposeAttributeConstraints]](../../models/shared/purposeattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `info_helpers` | [Optional[PurposeAttributeInfoHelpers]](../../models/shared/purposeattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | Wallbox PV |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `parents` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[PurposeAttributeType]](../../models/shared/purposeattributetype.md) | :heavy_minus_sign: | N/A | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/purposeattributeconstraints.md b/entity/docs/models/shared/purposeattributeconstraints.md
new file mode 100755
index 000000000..33b4d8587
--- /dev/null
+++ b/entity/docs/models/shared/purposeattributeconstraints.md
@@ -0,0 +1,11 @@
+# PurposeAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/purposeattributeinfohelpers.md b/entity/docs/models/shared/purposeattributeinfohelpers.md
new file mode 100755
index 000000000..c721110fa
--- /dev/null
+++ b/entity/docs/models/shared/purposeattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# PurposeAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/purposeattributetype.md b/entity/docs/models/shared/purposeattributetype.md
new file mode 100755
index 000000000..a46263d3b
--- /dev/null
+++ b/entity/docs/models/shared/purposeattributetype.md
@@ -0,0 +1,8 @@
+# PurposeAttributeType
+
+
+## Values
+
+| Name | Value |
+| --------- | --------- |
+| `PURPOSE` | purpose |
\ No newline at end of file
diff --git a/entity/docs/models/shared/redirectentityview.md b/entity/docs/models/shared/redirectentityview.md
new file mode 100755
index 000000000..7146cfa18
--- /dev/null
+++ b/entity/docs/models/shared/redirectentityview.md
@@ -0,0 +1,9 @@
+# RedirectEntityView
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
+| `route` | *Optional[str]* | :heavy_minus_sign: | N/A | /app/pricing-hub/product/:entityId |
+| `view_type` | [Optional[RedirectEntityViewViewType]](../../models/shared/redirectentityviewviewtype.md) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/redirectentityviewviewtype.md b/entity/docs/models/shared/redirectentityviewviewtype.md
new file mode 100755
index 000000000..f1f49db52
--- /dev/null
+++ b/entity/docs/models/shared/redirectentityviewviewtype.md
@@ -0,0 +1,8 @@
+# RedirectEntityViewViewType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `REDIRECT` | redirect |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattribute.md b/entity/docs/models/shared/relationattribute.md
new file mode 100755
index 000000000..e261c8577
--- /dev/null
+++ b/entity/docs/models/shared/relationattribute.md
@@ -0,0 +1,49 @@
+# RelationAttribute
+
+Entity Relationship
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `actions` | List[[RelationAttributeActions](../../models/shared/relationattributeactions.md)] | :heavy_minus_sign: | N/A | [object Object] |
+| `add_button_label` | *Optional[str]* | :heavy_minus_sign: | Optional label for the add button. The translated value for add_button_lable is used, if found else the string is used as is. | |
+| `allowed_schemas` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[RelationAttributeConstraints]](../../models/shared/relationattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `details_view_mode_enabled` | *Optional[bool]* | :heavy_minus_sign: | Enables the preview, edition, and creation of relation items on a Master-Details view mode. | |
+| `drawer_size` | [Optional[RelationAttributeDrawerSize]](../../models/shared/relationattributedrawersize.md) | :heavy_minus_sign: | N/A | |
+| `edit_mode` | [Optional[RelationAttributeEditMode]](../../models/shared/relationattributeeditmode.md) | :heavy_minus_sign: | N/A | |
+| `enable_relation_picker` | *Optional[bool]* | :heavy_minus_sign: | When enable_relation_picker is set to true the user will be able to pick existing relations as values. Otherwise, the user will need to create new relation to link. | |
+| `enable_relation_tags` | *Optional[bool]* | :heavy_minus_sign: | When enable_relation_tags is set to true the user will be able to set tags(labels) in each relation item. | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `has_primary` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `info_helpers` | [Optional[RelationAttributeInfoHelpers]](../../models/shared/relationattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `relation_affinity_mode` | [Optional[RelationAttributeRelationAffinityMode]](../../models/shared/relationattributerelationaffinitymode.md) | :heavy_minus_sign: | Weak relation attributes are kept when duplicating an entity. Strong relation attributes are discarded when duplicating an entity. | |
+| `relation_type` | [Optional[RelationAttributeRelationType]](../../models/shared/relationattributerelationtype.md) | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `reverse_attributes` | Dict[str, *str*] | :heavy_minus_sign: | Map of schema slug to target relation attribute | [object Object] |
+| `search_placeholder` | *Optional[str]* | :heavy_minus_sign: | Optional placeholder text for the relation search input. The translated value for search_placeholder is used, if found else the string is used as is. | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `summary_fields` | List[[Union[str, SummaryField]](../../models/shared/relationattributesummaryfields.md)] | :heavy_minus_sign: | N/A | |
+| `type` | [Optional[RelationAttributeType]](../../models/shared/relationattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributeactions.md b/entity/docs/models/shared/relationattributeactions.md
new file mode 100755
index 000000000..fc736f732
--- /dev/null
+++ b/entity/docs/models/shared/relationattributeactions.md
@@ -0,0 +1,13 @@
+# RelationAttributeActions
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `action_type` | [Optional[RelationAttributeActionsActionType]](../../models/shared/relationattributeactionsactiontype.md) | :heavy_minus_sign: | The action type. Currently supported actions:
\| action \| description \|
\|--------\|-------------\|
\| add_existing \| Enables the user to pick an existing entity to link as relation \|
\| create_new \| Enables the user to create a new entity using the first/main `allowed_schemas` schema
\| create_from_existing \| Enables the user to pick an existing entity to clone from, while creating a blank new entity to link as relation \|
|
+| `default` | *Optional[bool]* | :heavy_minus_sign: | Sets the action as the default action, visible as the main action button. |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | Name of the feature flag that enables this action |
+| `label` | *Optional[str]* | :heavy_minus_sign: | The action label or action translation key (i18n) |
+| `new_entity_item` | [Optional[RelationAttributeActionsNewEntityItem]](../../models/shared/relationattributeactionsnewentityitem.md) | :heavy_minus_sign: | N/A |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | Name of the setting flag that enables this action |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributeactionsactiontype.md b/entity/docs/models/shared/relationattributeactionsactiontype.md
new file mode 100755
index 000000000..9f08335d9
--- /dev/null
+++ b/entity/docs/models/shared/relationattributeactionsactiontype.md
@@ -0,0 +1,19 @@
+# RelationAttributeActionsActionType
+
+The action type. Currently supported actions:
+
+| action | description |
+|--------|-------------|
+| add_existing | Enables the user to pick an existing entity to link as relation |
+| create_new | Enables the user to create a new entity using the first/main `allowed_schemas` schema
+| create_from_existing | Enables the user to pick an existing entity to clone from, while creating a blank new entity to link as relation |
+
+
+
+## Values
+
+| Name | Value |
+| ---------------------- | ---------------------- |
+| `ADD_EXISTING` | add_existing |
+| `CREATE_NEW` | create_new |
+| `CREATE_FROM_EXISTING` | create_from_existing |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributeactionsnewentityitem.md b/entity/docs/models/shared/relationattributeactionsnewentityitem.md
new file mode 100755
index 000000000..946446b35
--- /dev/null
+++ b/entity/docs/models/shared/relationattributeactionsnewentityitem.md
@@ -0,0 +1,17 @@
+# RelationAttributeActionsNewEntityItem
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `acl` | [Optional[EntityACL]](../../models/shared/entityacl.md) | :heavy_minus_sign: | Access control list (ACL) for an entity. Defines sharing access to external orgs or users. | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `org` | *str* | :heavy_check_mark: | Organization Id the entity belongs to | |
+| `owners` | List[[EntityOwner](../../models/shared/entityowner.md)] | :heavy_minus_sign: | N/A | |
+| `schema` | *str* | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `title` | *Optional[str]* | :heavy_check_mark: | Title of entity | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributeconstraints.md b/entity/docs/models/shared/relationattributeconstraints.md
new file mode 100755
index 000000000..76fa43cd8
--- /dev/null
+++ b/entity/docs/models/shared/relationattributeconstraints.md
@@ -0,0 +1,11 @@
+# RelationAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributedrawersize.md b/entity/docs/models/shared/relationattributedrawersize.md
new file mode 100755
index 000000000..5a1acde1f
--- /dev/null
+++ b/entity/docs/models/shared/relationattributedrawersize.md
@@ -0,0 +1,10 @@
+# RelationAttributeDrawerSize
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `SMALL` | small |
+| `MEDIUM` | medium |
+| `LARGE` | large |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributeeditmode.md b/entity/docs/models/shared/relationattributeeditmode.md
new file mode 100755
index 000000000..cc0a9a767
--- /dev/null
+++ b/entity/docs/models/shared/relationattributeeditmode.md
@@ -0,0 +1,8 @@
+# RelationAttributeEditMode
+
+
+## Values
+
+| Name | Value |
+| ----------- | ----------- |
+| `LIST_VIEW` | list-view |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributeinfohelpers.md b/entity/docs/models/shared/relationattributeinfohelpers.md
new file mode 100755
index 000000000..480e9b4f5
--- /dev/null
+++ b/entity/docs/models/shared/relationattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# RelationAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributerelationaffinitymode.md b/entity/docs/models/shared/relationattributerelationaffinitymode.md
new file mode 100755
index 000000000..48f87b7f4
--- /dev/null
+++ b/entity/docs/models/shared/relationattributerelationaffinitymode.md
@@ -0,0 +1,11 @@
+# RelationAttributeRelationAffinityMode
+
+Weak relation attributes are kept when duplicating an entity. Strong relation attributes are discarded when duplicating an entity.
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `WEAK` | weak |
+| `STRONG` | strong |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributerelationtype.md b/entity/docs/models/shared/relationattributerelationtype.md
new file mode 100755
index 000000000..59aade06d
--- /dev/null
+++ b/entity/docs/models/shared/relationattributerelationtype.md
@@ -0,0 +1,9 @@
+# RelationAttributeRelationType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `HAS_MANY` | has_many |
+| `HAS_ONE` | has_one |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationattributesummaryfields.md b/entity/docs/models/shared/relationattributesummaryfields.md
new file mode 100755
index 000000000..664d8056d
--- /dev/null
+++ b/entity/docs/models/shared/relationattributesummaryfields.md
@@ -0,0 +1,17 @@
+# RelationAttributeSummaryFields
+
+
+## Supported Types
+
+###
+
+```python
+relationAttributeSummaryFields: str = /* values here */
+```
+
+### SummaryField
+
+```python
+relationAttributeSummaryFields: shared.SummaryField = /* values here */
+```
+
diff --git a/entity/docs/models/shared/relationattributetype.md b/entity/docs/models/shared/relationattributetype.md
new file mode 100755
index 000000000..233bc4c95
--- /dev/null
+++ b/entity/docs/models/shared/relationattributetype.md
@@ -0,0 +1,8 @@
+# RelationAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `RELATION` | relation |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationentity.md b/entity/docs/models/shared/relationentity.md
new file mode 100755
index 000000000..f03f5e8e5
--- /dev/null
+++ b/entity/docs/models/shared/relationentity.md
@@ -0,0 +1,18 @@
+# RelationEntity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `dollar_relation` | [Optional[RelationItem]](../../models/shared/relationitem.md) | :heavy_minus_sign: | N/A | |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A | [object Object] |
+| `acl` | [Optional[EntityACL]](../../models/shared/entityacl.md) | :heavy_minus_sign: | Access control list (ACL) for an entity. Defines sharing access to external orgs or users. | |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `org` | *str* | :heavy_check_mark: | Organization Id the entity belongs to | |
+| `owners` | List[[EntityOwner](../../models/shared/entityowner.md)] | :heavy_minus_sign: | N/A | |
+| `schema` | *str* | :heavy_check_mark: | URL-friendly identifier for the entity schema | contact |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `title` | *Optional[str]* | :heavy_check_mark: | Title of entity | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/relationitem.md b/entity/docs/models/shared/relationitem.md
new file mode 100755
index 000000000..0c1c4cf99
--- /dev/null
+++ b/entity/docs/models/shared/relationitem.md
@@ -0,0 +1,11 @@
+# RelationItem
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| `tags` | List[*str*] | :heavy_minus_sign: | N/A |
+| `attribute` | *str* | :heavy_check_mark: | N/A |
+| `entity_id` | *str* | :heavy_check_mark: | N/A |
+| `reverse` | *Optional[bool]* | :heavy_minus_sign: | Whether this is a reverse relation |
\ No newline at end of file
diff --git a/entity/docs/models/shared/repeatableattribute.md b/entity/docs/models/shared/repeatableattribute.md
new file mode 100755
index 000000000..89c978d6e
--- /dev/null
+++ b/entity/docs/models/shared/repeatableattribute.md
@@ -0,0 +1,39 @@
+# RepeatableAttribute
+
+Repeatable (add N number of fields)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[RepeatableAttributeConstraints]](../../models/shared/repeatableattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `enable_relation_picker` | *Optional[bool]* | :heavy_minus_sign: | when enable_relation_picker is set to true the user will be able to pick existing relations as values. Otherwise, the user will need to create new relation to link. | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `has_primary` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[RepeatableAttributeInfoHelpers]](../../models/shared/repeatableattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `relation_affinity_mode` | [Optional[RepeatableAttributeRelationAffinityMode]](../../models/shared/repeatableattributerelationaffinitymode.md) | :heavy_minus_sign: | Weak repeatable attributes are kept when duplicating an entity. Strong repeatable attributes are discarded when duplicating an entity. | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `repeatable` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[RepeatableAttributeType]](../../models/shared/repeatableattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/repeatableattributeconstraints.md b/entity/docs/models/shared/repeatableattributeconstraints.md
new file mode 100755
index 000000000..662421814
--- /dev/null
+++ b/entity/docs/models/shared/repeatableattributeconstraints.md
@@ -0,0 +1,11 @@
+# RepeatableAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/repeatableattributeinfohelpers.md b/entity/docs/models/shared/repeatableattributeinfohelpers.md
new file mode 100755
index 000000000..71fe6ae23
--- /dev/null
+++ b/entity/docs/models/shared/repeatableattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# RepeatableAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/repeatableattributerelationaffinitymode.md b/entity/docs/models/shared/repeatableattributerelationaffinitymode.md
new file mode 100755
index 000000000..0cb1310df
--- /dev/null
+++ b/entity/docs/models/shared/repeatableattributerelationaffinitymode.md
@@ -0,0 +1,11 @@
+# RepeatableAttributeRelationAffinityMode
+
+Weak repeatable attributes are kept when duplicating an entity. Strong repeatable attributes are discarded when duplicating an entity.
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `WEAK` | weak |
+| `STRONG` | strong |
\ No newline at end of file
diff --git a/entity/docs/models/shared/repeatableattributetype.md b/entity/docs/models/shared/repeatableattributetype.md
new file mode 100755
index 000000000..9094b0e8c
--- /dev/null
+++ b/entity/docs/models/shared/repeatableattributetype.md
@@ -0,0 +1,15 @@
+# RepeatableAttributeType
+
+
+## Values
+
+| Name | Value |
+| ----------------- | ----------------- |
+| `STRING` | string |
+| `PHONE` | phone |
+| `EMAIL` | email |
+| `ADDRESS` | address |
+| `RELATION` | relation |
+| `PAYMENT` | payment |
+| `PRICE_COMPONENT` | price_component |
+| `DATE` | date |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedview.md b/entity/docs/models/shared/savedview.md
new file mode 100755
index 000000000..b0c332281
--- /dev/null
+++ b/entity/docs/models/shared/savedview.md
@@ -0,0 +1,16 @@
+# SavedView
+
+A saved entity view
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `created_by` | [Union[SavedViewCreatedBy1, SavedViewCreatedBy2]](../../models/shared/savedviewcreatedby.md) | :heavy_check_mark: | N/A | |
+| `is_favorited_by` | List[*str*] | :heavy_minus_sign: | List of users (IDs) that have favorited the view | 11701 |
+| `name` | *str* | :heavy_check_mark: | User-friendly identifier for the saved view | View listing German |
+| `org` | *Optional[str]* | :heavy_minus_sign: | Organisation ID a view belongs to | 66 |
+| `shared` | *Optional[bool]* | :heavy_minus_sign: | boolean property for if a view is shared with organisation | true |
+| `slug` | List[*str*] | :heavy_check_mark: | list of schemas a view can belong to | |
+| `ui_config` | Dict[str, *Any*] | :heavy_check_mark: | N/A | [object Object] |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewcreatedby.md b/entity/docs/models/shared/savedviewcreatedby.md
new file mode 100755
index 000000000..782e8939c
--- /dev/null
+++ b/entity/docs/models/shared/savedviewcreatedby.md
@@ -0,0 +1,17 @@
+# SavedViewCreatedBy
+
+
+## Supported Types
+
+### SavedViewCreatedBy1
+
+```python
+savedViewCreatedBy: shared.SavedViewCreatedBy1 = /* values here */
+```
+
+### SavedViewCreatedBy2
+
+```python
+savedViewCreatedBy: shared.SavedViewCreatedBy2 = /* values here */
+```
+
diff --git a/entity/docs/models/shared/savedviewcreatedby1.md b/entity/docs/models/shared/savedviewcreatedby1.md
new file mode 100755
index 000000000..e8778b9ca
--- /dev/null
+++ b/entity/docs/models/shared/savedviewcreatedby1.md
@@ -0,0 +1,10 @@
+# SavedViewCreatedBy1
+
+A user that created the view
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 10598 |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewcreatedby2.md b/entity/docs/models/shared/savedviewcreatedby2.md
new file mode 100755
index 000000000..f39daa4a2
--- /dev/null
+++ b/entity/docs/models/shared/savedviewcreatedby2.md
@@ -0,0 +1,11 @@
+# SavedViewCreatedBy2
+
+A system-created view
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `source` | [Optional[SavedViewCreatedBy2Source]](../../models/shared/savedviewcreatedby2source.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewcreatedby2source.md b/entity/docs/models/shared/savedviewcreatedby2source.md
new file mode 100755
index 000000000..1fb6f33e5
--- /dev/null
+++ b/entity/docs/models/shared/savedviewcreatedby2source.md
@@ -0,0 +1,9 @@
+# SavedViewCreatedBy2Source
+
+
+## Values
+
+| Name | Value |
+| ----------- | ----------- |
+| `SYSTEM` | SYSTEM |
+| `BLUEPRINT` | BLUEPRINT |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewitem.md b/entity/docs/models/shared/savedviewitem.md
new file mode 100755
index 000000000..59ffabb40
--- /dev/null
+++ b/entity/docs/models/shared/savedviewitem.md
@@ -0,0 +1,19 @@
+# SavedViewItem
+
+A saved entity view
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `created_at` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `created_by` | [Union[SavedViewItemCreatedBy1, SavedViewItemCreatedBy2]](../../models/shared/savedviewitemcreatedby.md) | :heavy_check_mark: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | Generated uuid for a saved view | |
+| `is_favorited_by` | List[*str*] | :heavy_minus_sign: | List of users (IDs) that have favorited the view | 11701 |
+| `name` | *str* | :heavy_check_mark: | User-friendly identifier for the saved view | View listing German |
+| `org` | *Optional[str]* | :heavy_minus_sign: | Organisation ID a view belongs to | 66 |
+| `shared` | *Optional[bool]* | :heavy_minus_sign: | boolean property for if a view is shared with organisation | true |
+| `slug` | List[*str*] | :heavy_check_mark: | list of schemas a view can belong to | |
+| `ui_config` | Dict[str, *Any*] | :heavy_check_mark: | N/A | [object Object] |
+| `updated_at` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewitemcreatedby.md b/entity/docs/models/shared/savedviewitemcreatedby.md
new file mode 100755
index 000000000..a7b4ac1a1
--- /dev/null
+++ b/entity/docs/models/shared/savedviewitemcreatedby.md
@@ -0,0 +1,17 @@
+# SavedViewItemCreatedBy
+
+
+## Supported Types
+
+### SavedViewItemCreatedBy1
+
+```python
+savedViewItemCreatedBy: shared.SavedViewItemCreatedBy1 = /* values here */
+```
+
+### SavedViewItemCreatedBy2
+
+```python
+savedViewItemCreatedBy: shared.SavedViewItemCreatedBy2 = /* values here */
+```
+
diff --git a/entity/docs/models/shared/savedviewitemcreatedby1.md b/entity/docs/models/shared/savedviewitemcreatedby1.md
new file mode 100755
index 000000000..406549b18
--- /dev/null
+++ b/entity/docs/models/shared/savedviewitemcreatedby1.md
@@ -0,0 +1,10 @@
+# SavedViewItemCreatedBy1
+
+A user that created the view
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 10598 |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewitemcreatedby2.md b/entity/docs/models/shared/savedviewitemcreatedby2.md
new file mode 100755
index 000000000..6a9bd1495
--- /dev/null
+++ b/entity/docs/models/shared/savedviewitemcreatedby2.md
@@ -0,0 +1,11 @@
+# SavedViewItemCreatedBy2
+
+A system-created view
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `additional_properties` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `source` | [Optional[SavedViewItemCreatedBy2Source]](../../models/shared/savedviewitemcreatedby2source.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/savedviewitemcreatedby2source.md b/entity/docs/models/shared/savedviewitemcreatedby2source.md
new file mode 100755
index 000000000..38ffa0a8a
--- /dev/null
+++ b/entity/docs/models/shared/savedviewitemcreatedby2source.md
@@ -0,0 +1,9 @@
+# SavedViewItemCreatedBy2Source
+
+
+## Values
+
+| Name | Value |
+| ----------- | ----------- |
+| `SYSTEM` | SYSTEM |
+| `BLUEPRINT` | BLUEPRINT |
\ No newline at end of file
diff --git a/entity/docs/models/shared/searchmappings.md b/entity/docs/models/shared/searchmappings.md
new file mode 100755
index 000000000..5de79a6af
--- /dev/null
+++ b/entity/docs/models/shared/searchmappings.md
@@ -0,0 +1,10 @@
+# SearchMappings
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| `fields` | Dict[str, *Any*] | :heavy_minus_sign: | N/A |
+| `index` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+| `type` | [Optional[SearchMappingsType]](../../models/shared/searchmappingstype.md) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/searchmappingstype.md b/entity/docs/models/shared/searchmappingstype.md
new file mode 100755
index 000000000..f351ee36c
--- /dev/null
+++ b/entity/docs/models/shared/searchmappingstype.md
@@ -0,0 +1,16 @@
+# SearchMappingsType
+
+
+## Values
+
+| Name | Value |
+| ----------- | ----------- |
+| `KEYWORD` | keyword |
+| `TEXT` | text |
+| `BOOLEAN` | boolean |
+| `INTEGER` | integer |
+| `LONG` | long |
+| `FLOAT` | float |
+| `DATE` | date |
+| `FLATTENED` | flattened |
+| `NESTED` | nested |
\ No newline at end of file
diff --git a/entity/docs/models/shared/security.md b/entity/docs/models/shared/security.md
new file mode 100755
index 000000000..7e7da0ee3
--- /dev/null
+++ b/entity/docs/models/shared/security.md
@@ -0,0 +1,9 @@
+# Security
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
+| `epilot_auth` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `epilot_org` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/selectattribute.md b/entity/docs/models/shared/selectattribute.md
new file mode 100755
index 000000000..0ae86fb92
--- /dev/null
+++ b/entity/docs/models/shared/selectattribute.md
@@ -0,0 +1,37 @@
+# SelectAttribute
+
+Dropdown select
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `allow_any` | *Optional[bool]* | :heavy_minus_sign: | Allow arbitrary input values in addition to provided options | |
+| `constraints` | [Optional[SelectAttributeConstraints]](../../models/shared/selectattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[SelectAttributeInfoHelpers]](../../models/shared/selectattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `options` | List[[Union[SelectAttributeOptions1, str]](../../models/shared/selectattributeoptions.md)] | :heavy_minus_sign: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[SelectAttributeType]](../../models/shared/selectattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/selectattributeconstraints.md b/entity/docs/models/shared/selectattributeconstraints.md
new file mode 100755
index 000000000..b875f98c0
--- /dev/null
+++ b/entity/docs/models/shared/selectattributeconstraints.md
@@ -0,0 +1,11 @@
+# SelectAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/selectattributeinfohelpers.md b/entity/docs/models/shared/selectattributeinfohelpers.md
new file mode 100755
index 000000000..f2120ea3f
--- /dev/null
+++ b/entity/docs/models/shared/selectattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# SelectAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/selectattributeoptions.md b/entity/docs/models/shared/selectattributeoptions.md
new file mode 100755
index 000000000..f39224aa4
--- /dev/null
+++ b/entity/docs/models/shared/selectattributeoptions.md
@@ -0,0 +1,17 @@
+# SelectAttributeOptions
+
+
+## Supported Types
+
+### SelectAttributeOptions1
+
+```python
+selectAttributeOptions: shared.SelectAttributeOptions1 = /* values here */
+```
+
+###
+
+```python
+selectAttributeOptions: str = /* values here */
+```
+
diff --git a/entity/docs/models/shared/selectattributeoptions1.md b/entity/docs/models/shared/selectattributeoptions1.md
new file mode 100755
index 000000000..0bb8bf0c4
--- /dev/null
+++ b/entity/docs/models/shared/selectattributeoptions1.md
@@ -0,0 +1,9 @@
+# SelectAttributeOptions1
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `title` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `value` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/entity/docs/models/shared/selectattributetype.md b/entity/docs/models/shared/selectattributetype.md
new file mode 100755
index 000000000..0e5254caf
--- /dev/null
+++ b/entity/docs/models/shared/selectattributetype.md
@@ -0,0 +1,9 @@
+# SelectAttributeType
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `SELECT` | select |
+| `RADIO` | radio |
\ No newline at end of file
diff --git a/entity/docs/models/shared/sequenceattribute.md b/entity/docs/models/shared/sequenceattribute.md
new file mode 100755
index 000000000..f15cb2e17
--- /dev/null
+++ b/entity/docs/models/shared/sequenceattribute.md
@@ -0,0 +1,37 @@
+# SequenceAttribute
+
+Sequence of unique identifiers
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[SequenceAttributeConstraints]](../../models/shared/sequenceattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[SequenceAttributeInfoHelpers]](../../models/shared/sequenceattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `prefix` | *Optional[str]* | :heavy_minus_sign: | Prefix added before the sequence number | OR- |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `start_number` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `type` | [Optional[SequenceAttributeType]](../../models/shared/sequenceattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/sequenceattributeconstraints.md b/entity/docs/models/shared/sequenceattributeconstraints.md
new file mode 100755
index 000000000..f9777f631
--- /dev/null
+++ b/entity/docs/models/shared/sequenceattributeconstraints.md
@@ -0,0 +1,11 @@
+# SequenceAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/sequenceattributeinfohelpers.md b/entity/docs/models/shared/sequenceattributeinfohelpers.md
new file mode 100755
index 000000000..73c184393
--- /dev/null
+++ b/entity/docs/models/shared/sequenceattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# SequenceAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/sequenceattributetype.md b/entity/docs/models/shared/sequenceattributetype.md
new file mode 100755
index 000000000..e2592e106
--- /dev/null
+++ b/entity/docs/models/shared/sequenceattributetype.md
@@ -0,0 +1,8 @@
+# SequenceAttributeType
+
+
+## Values
+
+| Name | Value |
+| ---------- | ---------- |
+| `SEQUENCE` | sequence |
\ No newline at end of file
diff --git a/entity/docs/models/shared/statusattribute.md b/entity/docs/models/shared/statusattribute.md
new file mode 100755
index 000000000..ba98fc7e8
--- /dev/null
+++ b/entity/docs/models/shared/statusattribute.md
@@ -0,0 +1,36 @@
+# StatusAttribute
+
+Status select
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[StatusAttributeConstraints]](../../models/shared/statusattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[StatusAttributeInfoHelpers]](../../models/shared/statusattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `options` | List[[Union[str, StatusAttributeOptions2]](../../models/shared/statusattributeoptions.md)] | :heavy_minus_sign: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[StatusAttributeType]](../../models/shared/statusattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/statusattributeconstraints.md b/entity/docs/models/shared/statusattributeconstraints.md
new file mode 100755
index 000000000..65e581f09
--- /dev/null
+++ b/entity/docs/models/shared/statusattributeconstraints.md
@@ -0,0 +1,11 @@
+# StatusAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/statusattributeinfohelpers.md b/entity/docs/models/shared/statusattributeinfohelpers.md
new file mode 100755
index 000000000..712bfc8df
--- /dev/null
+++ b/entity/docs/models/shared/statusattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# StatusAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/statusattributeoptions.md b/entity/docs/models/shared/statusattributeoptions.md
new file mode 100755
index 000000000..1cb794974
--- /dev/null
+++ b/entity/docs/models/shared/statusattributeoptions.md
@@ -0,0 +1,17 @@
+# StatusAttributeOptions
+
+
+## Supported Types
+
+###
+
+```python
+statusAttributeOptions: str = /* values here */
+```
+
+### StatusAttributeOptions2
+
+```python
+statusAttributeOptions: shared.StatusAttributeOptions2 = /* values here */
+```
+
diff --git a/entity/docs/models/shared/statusattributeoptions2.md b/entity/docs/models/shared/statusattributeoptions2.md
new file mode 100755
index 000000000..b363733b6
--- /dev/null
+++ b/entity/docs/models/shared/statusattributeoptions2.md
@@ -0,0 +1,9 @@
+# StatusAttributeOptions2
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `title` | *Optional[str]* | :heavy_minus_sign: | The displayed title of the option |
+| `value` | *str* | :heavy_check_mark: | The stored value of the option |
\ No newline at end of file
diff --git a/entity/docs/models/shared/statusattributetype.md b/entity/docs/models/shared/statusattributetype.md
new file mode 100755
index 000000000..8a9b3b5f1
--- /dev/null
+++ b/entity/docs/models/shared/statusattributetype.md
@@ -0,0 +1,8 @@
+# StatusAttributeType
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `STATUS` | status |
\ No newline at end of file
diff --git a/entity/docs/models/shared/summaryattribute.md b/entity/docs/models/shared/summaryattribute.md
new file mode 100755
index 000000000..0eb07aab0
--- /dev/null
+++ b/entity/docs/models/shared/summaryattribute.md
@@ -0,0 +1,27 @@
+# SummaryAttribute
+
+Represents an expanded version of an attribute to be displayed in the list item summary.
+This configuration can be used in the following way:
+```js
+{
+ "label": "Price components"
+ "value": "{{item.prices.length}} price components"
+ "show_as_tag": true
+ "render_condition": "is_composite_price = "true""
+}
+```
+The value field supports handlebar expressions from which you can pick any field from the entity state.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | Binds summary field visibility to the feature flag state. |
+| `label` | *str* | :heavy_check_mark: | Label to be shown on the top of the value. |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
|
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | Binds summary field visibility to the setting flag state. |
+| `show_as_tag` | *Optional[bool]* | :heavy_minus_sign: | Displays the value within a tag chip. |
+| `tag_color` | *Optional[str]* | :heavy_minus_sign: | CSS hex color or CSS color name for the tag chip. |
+| `value` | *str* | :heavy_check_mark: | A static value or an handlebar expression. |
\ No newline at end of file
diff --git a/entity/docs/models/shared/summaryfield.md b/entity/docs/models/shared/summaryfield.md
new file mode 100755
index 000000000..db5c1e954
--- /dev/null
+++ b/entity/docs/models/shared/summaryfield.md
@@ -0,0 +1,11 @@
+# SummaryField
+
+Summary Fields are displayed inside list view as a resume of the relation entity.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- |
+| `display_as` | *Optional[str]* | :heavy_minus_sign: | An hint on how to display the summary field |
+| `field` | *Optional[str]* | :heavy_minus_sign: | The field from the entity attributes to display |
\ No newline at end of file
diff --git a/entity/docs/models/shared/tagsattribute.md b/entity/docs/models/shared/tagsattribute.md
new file mode 100755
index 000000000..44251df64
--- /dev/null
+++ b/entity/docs/models/shared/tagsattribute.md
@@ -0,0 +1,37 @@
+# TagsAttribute
+
+Tags
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[TagsAttributeConstraints]](../../models/shared/tagsattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[TagsAttributeInfoHelpers]](../../models/shared/tagsattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `options` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `suggestions` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `type` | [Optional[TagsAttributeType]](../../models/shared/tagsattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/tagsattributeconstraints.md b/entity/docs/models/shared/tagsattributeconstraints.md
new file mode 100755
index 000000000..46c6a22d8
--- /dev/null
+++ b/entity/docs/models/shared/tagsattributeconstraints.md
@@ -0,0 +1,11 @@
+# TagsAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/tagsattributeinfohelpers.md b/entity/docs/models/shared/tagsattributeinfohelpers.md
new file mode 100755
index 000000000..9c3dda202
--- /dev/null
+++ b/entity/docs/models/shared/tagsattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# TagsAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/tagsattributetype.md b/entity/docs/models/shared/tagsattributetype.md
new file mode 100755
index 000000000..cf2593e33
--- /dev/null
+++ b/entity/docs/models/shared/tagsattributetype.md
@@ -0,0 +1,8 @@
+# TagsAttributeType
+
+
+## Values
+
+| Name | Value |
+| ------ | ------ |
+| `TAGS` | tags |
\ No newline at end of file
diff --git a/entity/docs/models/shared/taxonomy.md b/entity/docs/models/shared/taxonomy.md
new file mode 100755
index 000000000..84674090e
--- /dev/null
+++ b/entity/docs/models/shared/taxonomy.md
@@ -0,0 +1,12 @@
+# Taxonomy
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | A human friendly name of a Taxonomy e.g. Purpose, Product Category, Folder, Tag | Purpose |
+| `plural` | *Optional[str]* | :heavy_minus_sign: | Plural name of a Taxonomy e.g. Purposes, Product Categories, Folders, Tags | Purposes |
+| `slug` | *str* | :heavy_check_mark: | URL-friendly name for taxonomy | purpose |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/taxonomyclassification.md b/entity/docs/models/shared/taxonomyclassification.md
new file mode 100755
index 000000000..d0c0f0654
--- /dev/null
+++ b/entity/docs/models/shared/taxonomyclassification.md
@@ -0,0 +1,12 @@
+# TaxonomyClassification
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | Wallbox PV |
+| `parents` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `updated_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/textattribute.md b/entity/docs/models/shared/textattribute.md
new file mode 100755
index 000000000..39bd42d7e
--- /dev/null
+++ b/entity/docs/models/shared/textattribute.md
@@ -0,0 +1,36 @@
+# TextAttribute
+
+Textarea or text input
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[TextAttributeConstraints]](../../models/shared/textattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[TextAttributeInfoHelpers]](../../models/shared/textattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `multiline` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[TextAttributeType]](../../models/shared/textattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/textattributeconstraints.md b/entity/docs/models/shared/textattributeconstraints.md
new file mode 100755
index 000000000..5a2b92009
--- /dev/null
+++ b/entity/docs/models/shared/textattributeconstraints.md
@@ -0,0 +1,11 @@
+# TextAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/textattributeinfohelpers.md b/entity/docs/models/shared/textattributeinfohelpers.md
new file mode 100755
index 000000000..5f8f15b04
--- /dev/null
+++ b/entity/docs/models/shared/textattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# TextAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/textattributetype.md b/entity/docs/models/shared/textattributetype.md
new file mode 100755
index 000000000..88054505a
--- /dev/null
+++ b/entity/docs/models/shared/textattributetype.md
@@ -0,0 +1,8 @@
+# TextAttributeType
+
+
+## Values
+
+| Name | Value |
+| -------- | -------- |
+| `STRING` | string |
\ No newline at end of file
diff --git a/entity/docs/models/shared/userrelationattribute.md b/entity/docs/models/shared/userrelationattribute.md
new file mode 100755
index 000000000..322f6c8c3
--- /dev/null
+++ b/entity/docs/models/shared/userrelationattribute.md
@@ -0,0 +1,36 @@
+# UserRelationAttribute
+
+User Relationship
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `purpose` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `constraints` | [Optional[UserRelationAttributeConstraints]](../../models/shared/userrelationattributeconstraints.md) | :heavy_minus_sign: | A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
| |
+| `default_value` | *Optional[Any]* | :heavy_minus_sign: | N/A | |
+| `deprecated` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `entity_builder_disable_edit` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` disables editing the attribute on the entity builder UI | |
+| `feature_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the feature flag is enabled | FF_MY_FEATURE_FLAG |
+| `group` | *Optional[str]* | :heavy_minus_sign: | Which group the attribute should appear in. Accepts group ID or group name | |
+| `hidden` | *Optional[bool]* | :heavy_minus_sign: | Do not render attribute in entity views | |
+| `hide_label` | *Optional[bool]* | :heavy_minus_sign: | When set to true, will hide the label of the field. | |
+| `icon` | *Optional[str]* | :heavy_minus_sign: | Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
| |
+| `info_helpers` | [Optional[UserRelationAttributeInfoHelpers]](../../models/shared/userrelationattributeinfohelpers.md) | :heavy_minus_sign: | A set of configurations meant to document and assist the user in filling the attribute. | |
+| `label` | *str* | :heavy_check_mark: | N/A | |
+| `layout` | *Optional[str]* | :heavy_minus_sign: | N/A | full_width |
+| `multiple` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `order` | *Optional[int]* | :heavy_minus_sign: | Attribute sort order (ascending) in group | 0 |
+| `placeholder` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `preview_value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `protected` | *Optional[bool]* | :heavy_minus_sign: | Setting to `true` prevents the attribute from being modified / deleted | |
+| `readonly` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `render_condition` | *Optional[str]* | :heavy_minus_sign: | Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
| |
+| `required` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `setting_flag` | *Optional[str]* | :heavy_minus_sign: | This attribute should only be active when the setting is enabled | MY_SETTING |
+| `show_in_table` | *Optional[bool]* | :heavy_minus_sign: | Render as a column in table views. When defined, overrides `hidden` | |
+| `sortable` | *Optional[bool]* | :heavy_minus_sign: | Allow sorting by this attribute in table views if `show_in_table` is true | |
+| `type` | [Optional[UserRelationAttributeType]](../../models/shared/userrelationattributetype.md) | :heavy_minus_sign: | N/A | |
+| `value_formatter` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/entity/docs/models/shared/userrelationattributeconstraints.md b/entity/docs/models/shared/userrelationattributeconstraints.md
new file mode 100755
index 000000000..beed4d3a6
--- /dev/null
+++ b/entity/docs/models/shared/userrelationattributeconstraints.md
@@ -0,0 +1,11 @@
+# UserRelationAttributeConstraints
+
+A set of constraints applicable to the attribute.
+These constraints should and will be enforced by the attribute renderer.
+
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/entity/docs/models/shared/userrelationattributeinfohelpers.md b/entity/docs/models/shared/userrelationattributeinfohelpers.md
new file mode 100755
index 000000000..7298822e4
--- /dev/null
+++ b/entity/docs/models/shared/userrelationattributeinfohelpers.md
@@ -0,0 +1,13 @@
+# UserRelationAttributeInfoHelpers
+
+A set of configurations meant to document and assist the user in filling the attribute.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hint_custom_component` | *Optional[str]* | :heavy_minus_sign: | The name of the custom component to be used as the hint helper.
The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
When specified it overrides the `hint_text` or `hint_text_key` configuration.
| |
+| `hint_text` | *Optional[str]* | :heavy_minus_sign: | The text to be displayed in the attribute hint helper.
When specified it overrides the `hint_text_key` configuration.
| |
+| `hint_text_key` | *Optional[str]* | :heavy_minus_sign: | The key of the hint text to be displayed in the attribute hint helper.
The key should be a valid i18n key.
| |
+| `hint_tooltip_placement` | *Optional[str]* | :heavy_minus_sign: | The placement of the hint tooltip.
The value should be a valid `@mui/core` tooltip placement.
| top |
\ No newline at end of file
diff --git a/entity/docs/models/shared/userrelationattributetype.md b/entity/docs/models/shared/userrelationattributetype.md
new file mode 100755
index 000000000..3cca95f1e
--- /dev/null
+++ b/entity/docs/models/shared/userrelationattributetype.md
@@ -0,0 +1,8 @@
+# UserRelationAttributeType
+
+
+## Values
+
+| Name | Value |
+| --------------- | --------------- |
+| `RELATION_USER` | relation_user |
\ No newline at end of file
diff --git a/entity/docs/sdks/activity/README.md b/entity/docs/sdks/activity/README.md
new file mode 100755
index 000000000..cb90e9c81
--- /dev/null
+++ b/entity/docs/sdks/activity/README.md
@@ -0,0 +1,190 @@
+# Activity
+(*activity*)
+
+## Overview
+
+Entity Events
+
+### Available Operations
+
+* [attach_activity](#attach_activity) - attachActivity
+* [create_activity](#create_activity) - createActivity
+* [get_activity](#get_activity) - getActivity
+* [get_entity_activity_feed](#get_entity_activity_feed) - getEntityActivityFeed
+
+## attach_activity
+
+Attach existing activity to entity activity feeds
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.AttachActivityRequest(
+ entities=[
+ 'ee1dee63-2954-4671-8246-751c43fec091',
+ ],
+ id='01F130Q52Q6MWSNS8N2AVXV4JN',
+)
+
+res = s.activity.attach_activity(req)
+
+if res.activity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.AttachActivityRequest](../../models/operations/attachactivityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.AttachActivityResponse](../../models/operations/attachactivityresponse.md)**
+
+
+## create_activity
+
+Create an activity that can be displayed in activity feeds.
+
+- All activites are published as events on the event bus
+- Entity mutations are always part of an activity
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.CreateActivityRequest(
+ activity=shared.Activity(
+ message='{{caller}} did something with {{entity payload.entity.id}}.',
+ payload={
+ "entity": 'string',
+ },
+ title='My custom activity',
+ type='MyCustomActivity',
+ ),
+ entities=[
+ 'cf25acc1-fe2b-48d1-825c-2f2569c1faff',
+ ],
+)
+
+res = s.activity.create_activity(req)
+
+if res.activity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.CreateActivityRequest](../../models/operations/createactivityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.CreateActivityResponse](../../models/operations/createactivityresponse.md)**
+
+
+## get_activity
+
+Get activity by id
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetActivityRequest(
+ id='01F130Q52Q6MWSNS8N2AVXV4JN',
+)
+
+res = s.activity.get_activity(req)
+
+if res.activity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `request` | [operations.GetActivityRequest](../../models/operations/getactivityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetActivityResponse](../../models/operations/getactivityresponse.md)**
+
+
+## get_entity_activity_feed
+
+Get activity feed for an entity
+
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetEntityActivityFeedRequest(
+ id='591b83a9-db1e-4df0-8b99-bcaafe81677f',
+ slug='contact',
+ type='SyncActivity',
+)
+
+res = s.activity.get_entity_activity_feed(req)
+
+if res.get_entity_activity_feed_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `request` | [operations.GetEntityActivityFeedRequest](../../models/operations/getentityactivityfeedrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetEntityActivityFeedResponse](../../models/operations/getentityactivityfeedresponse.md)**
+
diff --git a/entity/docs/sdks/entities/README.md b/entity/docs/sdks/entities/README.md
new file mode 100755
index 000000000..a0b83567b
--- /dev/null
+++ b/entity/docs/sdks/entities/README.md
@@ -0,0 +1,791 @@
+# Entities
+(*entities*)
+
+## Overview
+
+CRUD Access for Entities
+
+### Available Operations
+
+* [autocomplete](#autocomplete) - autocomplete
+* [create_entity](#create_entity) - createEntity
+* [delete_entity](#delete_entity) - deleteEntity
+* [get_entity](#get_entity) - getEntity
+* [patch_entity](#patch_entity) - patchEntity
+* [search_entities](#search_entities) - searchEntities
+* [update_entity](#update_entity) - updateEntity
+* [upsert_entity](#upsert_entity) - upsertEntity
+
+## autocomplete
+
+Autocomplete entity attributes
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.AutocompleteRequest(
+ attribute='_tags',
+ slug='contact',
+)
+
+res = s.entities.autocomplete(req)
+
+if res.autocomplete_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.AutocompleteRequest](../../models/operations/autocompleterequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.AutocompleteResponse](../../models/operations/autocompleteresponse.md)**
+
+
+## create_entity
+
+Creates a new entity using a key.
+
+## Activity
+
+If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityCreated`
+
+## Relations
+
+To create a relation, store a property object that defines a `$relation` array.
+
+Example:
+
+```json
+{
+ "contacts": {
+ "$relation": [
+ { "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6" }
+ ]
+ }
+}
+```
+
+The items in `$relation` support two properties:
+- `entity_id` - The ID of the entity to link
+- `_tags` - Tags or labels for the relation (optional)
+
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.CreateEntityRequest(
+ entity=shared.Entity(
+ additional_properties={
+ "_acl": 'string',
+ "_id": 'string',
+ "_org": 'string',
+ "_owners": 'string',
+ "_schema": 'string',
+ "_tags": 'string',
+ "_created_at": 'string',
+ "_updated_at": 'string',
+ },
+ acl=shared.EntityACL(
+ additional_properties={
+ "key": 'string',
+ },
+ delete=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ edit=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ view=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ ),
+ owners=[
+ shared.EntityOwner(
+ org_id='123',
+ user_id='123',
+ ),
+ ],
+ schema='contact',
+ tags=[
+ 'string',
+ ],
+ ),
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ slug='contact',
+)
+
+res = s.entities.create_entity(req)
+
+if res.entity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.CreateEntityRequest](../../models/operations/createentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.CreateEntityResponse](../../models/operations/createentityresponse.md)**
+
+
+## delete_entity
+
+Deletes an Entity
+
+## Activity
+
+If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityDeleted`
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.DeleteEntityRequest(
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ id='3b4a567a-853a-474f-8030-3350a9970542',
+ slug='contact',
+)
+
+res = s.entities.delete_entity(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.DeleteEntityRequest](../../models/operations/deleteentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.DeleteEntityResponse](../../models/operations/deleteentityresponse.md)**
+
+
+## get_entity
+
+Gets Entity and relations by id.
+
+## Relations
+
+When `hydrate=true`, relation attributes are replaced in-place with nested entity values.
+
+Example:
+```json
+{
+ "_id": "123",
+ "name": "parent",
+ "_tags": ["parent"],
+ "contacts": {
+ "$relation": [
+ { "entity_id": "456", "_tags": ["primary"] },
+ { "entity_id": "789", "_tags": ["secondary"] },
+ ]
+ },
+ "addresses": {
+ "$relation_ref": [
+ { "entity_id": "123", "_tags": ["primary"], "path": "address.0" },
+ { "entity_id": "234", "_tags": ["secondary"], "path": "address.0" },
+ ]
+ }
+}
+```
+
+Becomes:
+```json
+{
+ "_id": "123",
+ "name": "parent",
+ "_tags": ["parent"],
+ "contacts": [
+ {
+ "$relation": { "entity_id": "456", "_tags": ["primary"] },
+ "_id": "456",
+ "name": "child 1",
+ "_tags": ["child"]
+ },
+ {
+ "$relation": { "entity_id": "789", "_tags": ["secondary"] },
+ "_id": "789",
+ "name": "child 2",
+ "_tags": ["child"]
+ }
+ ],
+ "addresses": [
+ {
+ "$relation_ref": { "entity_id": "123", "_tags": ["primary"], "path": "address.0" },
+ "_id": "123",
+ "address": "address 1",
+ "_tags": ["child"]
+ },
+ {
+ "$relation_ref": { "entity_id": "234", "_tags": ["secondary"], "path": "address.0" },
+ "_id": "234",
+ "address": "address 2",
+ "_tags": ["child"]
+ }
+ ]
+}
+```
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetEntityRequest(
+ id='73700929-3a3f-4c9a-8a39-e5abedf44929',
+ slug='contact',
+)
+
+res = s.entities.get_entity(req)
+
+if res.get_entity_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.GetEntityRequest](../../models/operations/getentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetEntityResponse](../../models/operations/getentityresponse.md)**
+
+
+## patch_entity
+
+Partially updates an entity with the passed in entity data.
+
+- If an _updated_at is passed and the server contains a newer version of the entity a `409` Error is returned
+
+## Activity
+
+If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityUpdated`
+
+## Relations
+
+To create a relation, store a property that defines a `$relation` array.
+
+Example:
+
+```json
+{
+ "contacts": {
+ "$relation": [
+ { "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6" }
+ ]
+ }
+}
+```
+
+The items in `$relation` support two properties:
+- `entity_id` - The ID of the entity to link
+- `_tags` - Tags or labels for the relation (optional)
+
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.PatchEntityRequest(
+ entity=shared.Entity(
+ additional_properties={
+ "_updated_at": 'string',
+ "_acl": 'string',
+ "_id": 'string',
+ "_org": 'string',
+ "_owners": 'string',
+ "_schema": 'string',
+ "_tags": 'string',
+ "_created_at": 'string',
+ },
+ acl=shared.EntityACL(
+ additional_properties={
+ "key": 'string',
+ },
+ delete=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ edit=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ view=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ ),
+ owners=[
+ shared.EntityOwner(
+ org_id='123',
+ user_id='123',
+ ),
+ ],
+ schema='contact',
+ tags=[
+ 'string',
+ ],
+ ),
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ id='cd6dc474-9915-44f5-99d5-806e999b7231',
+ slug='contact',
+)
+
+res = s.entities.patch_entity(req)
+
+if res.entity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `request` | [operations.PatchEntityRequest](../../models/operations/patchentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.PatchEntityResponse](../../models/operations/patchentityresponse.md)**
+
+
+## search_entities
+
+Search for entities. Supports ordering and pagination. Lucene query syntax supported for complex querying.
+
+Passing comma-separated `x-epilot-org-id` is supported for cross-org entity search.
+
+## Relations
+
+When `hydrate=true`, relation attributes are replaced in-place with nested entity values.
+
+Example:
+```json
+{
+ "_id": "123",
+ "name": "parent",
+ "_tags": ["parent"],
+ "contacts": {
+ "$relation": [
+ { "entity_id": "456", "_tags": ["primary"] },
+ { "entity_id": "789", "_tags": ["secondary"] },
+ ]
+ },
+ "addresses": {
+ "$relation_ref": [
+ { "entity_id": "123", "_tags": ["primary"], "path": "address.0" },
+ { "entity_id": "234", "_tags": ["secondary"], "path": "address.0" },
+ ]
+ }
+}
+```
+
+Becomes:
+```json
+{
+ "_id": "123",
+ "name": "parent",
+ "_tags": ["parent"],
+ "contacts": [
+ {
+ "$relation": { "entity_id": "456", "_tags": ["primary"] },
+ "_id": "456",
+ "name": "child 1",
+ "_tags": ["child"]
+ },
+ {
+ "$relation": { "entity_id": "789", "_tags": ["secondary"] },
+ "_id": "789",
+ "name": "child 2",
+ "_tags": ["child"]
+ }
+ ],
+ "addresses": [
+ {
+ "$relation_ref": { "entity_id": "123", "_tags": ["primary"], "path": "address.0" },
+ "_id": "123",
+ "address": "address 1",
+ "_tags": ["child"]
+ },
+ {
+ "$relation_ref": { "entity_id": "234", "_tags": ["secondary"], "path": "address.0" },
+ "_id": "234",
+ "address": "address 2",
+ "_tags": ["child"]
+ }
+ ]
+}
+```
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = shared.EntitySearchParams(
+ aggs=shared.EntitySearchParamsAggs(),
+ fields=[
+ '_id',
+ '_title',
+ 'first_name',
+ ],
+ q='_schema:contact AND status:active',
+ sort='_created_at:desc',
+)
+
+res = s.entities.search_entities(req)
+
+if res.entity_search_results is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `request` | [shared.EntitySearchParams](../../models/shared/entitysearchparams.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.SearchEntitiesResponse](../../models/operations/searchentitiesresponse.md)**
+
+
+## update_entity
+
+Updates an Entity
+
+## Activity
+
+If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityUpdated`
+
+## Relations
+
+To create a relation, store a property that defines a `$relation` array.
+
+Example:
+
+```json
+{
+ "contacts": {
+ "$relation": [
+ { "entity_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6" }
+ ]
+ }
+}
+```
+
+The items in `$relation` support two properties:
+- `entity_id` - The ID of the entity to link
+- `_tags` - Tags or labels for the relation (optional)
+
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UpdateEntityRequest(
+ entity=shared.Entity(
+ additional_properties={
+ "_schema": 'string',
+ "_tags": 'string',
+ "_created_at": 'string',
+ "_updated_at": 'string',
+ "_acl": 'string',
+ "_id": 'string',
+ "_org": 'string',
+ "_owners": 'string',
+ },
+ acl=shared.EntityACL(
+ additional_properties={
+ "key": 'string',
+ },
+ delete=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ edit=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ view=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ ),
+ owners=[
+ shared.EntityOwner(
+ org_id='123',
+ user_id='123',
+ ),
+ ],
+ schema='contact',
+ tags=[
+ 'string',
+ ],
+ ),
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ id='2d5d17df-5520-4987-bd5a-6b1d12df7446',
+ slug='contact',
+)
+
+res = s.entities.update_entity(req)
+
+if res.entity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.UpdateEntityRequest](../../models/operations/updateentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UpdateEntityResponse](../../models/operations/updateentityresponse.md)**
+
+
+## upsert_entity
+
+Create or update an entity using `unique_key`
+
+- If no entities are matched, a new entity is created.
+- If exactly one entity is matched, a `PATCH`-style update is applied to the existing entity.
+- If more than one entity is matched a `409` Error is returned
+
+## Activity
+
+If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityCreated` or `EntityUpdated`
+
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UpsertEntityRequest(
+ request_body=operations.UpsertEntityRequestBody(
+ entity=shared.Entity(
+ additional_properties={
+ "_tags": 'string',
+ "_created_at": 'string',
+ "_updated_at": 'string',
+ "_acl": 'string',
+ "_id": 'string',
+ "_org": 'string',
+ "_owners": 'string',
+ "_schema": 'string',
+ },
+ acl=shared.EntityACL(
+ additional_properties={
+ "key": 'string',
+ },
+ delete=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ edit=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ view=[
+ 'o',
+ 'r',
+ 'g',
+ ':',
+ '4',
+ '5',
+ '6',
+ ],
+ ),
+ owners=[
+ shared.EntityOwner(
+ org_id='123',
+ user_id='123',
+ ),
+ ],
+ schema='contact',
+ tags=[
+ 'string',
+ ],
+ ),
+ unique_key=[
+ '_id',
+ ],
+ ),
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ slug='contact',
+)
+
+res = s.entities.upsert_entity(req)
+
+if res.entity_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.UpsertEntityRequest](../../models/operations/upsertentityrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UpsertEntityResponse](../../models/operations/upsertentityresponse.md)**
+
diff --git a/entity/docs/sdks/entityimport/README.md b/entity/docs/sdks/entityimport/README.md
new file mode 100755
index 000000000..04b9fb152
--- /dev/null
+++ b/entity/docs/sdks/entityimport/README.md
@@ -0,0 +1,55 @@
+# EntityImport
+(*entity_import*)
+
+### Available Operations
+
+* [import_entities](#import_entities) - Import Entities
+
+## import_entities
+
+This endpoint enables the import of entities into the platform.
+The entities should be provided in a CSV format inside an S3 bucket.
+This API will return the `job_id`` which can be used to fetch the status of the import process.
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ImportEntitiesRequest(
+ entity_import_params=shared.EntityImportParams(
+ s3_reference=shared.EntityImportParamsS3Reference(
+ bucket='my-bucket',
+ key='imports/my-import.json',
+ ),
+ schema='contact',
+ ),
+ job_id='abc123',
+)
+
+res = s.entity_import.import_entities(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.ImportEntitiesRequest](../../models/operations/importentitiesrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ImportEntitiesResponse](../../models/operations/importentitiesresponse.md)**
+
diff --git a/entity/docs/sdks/epilot/README.md b/entity/docs/sdks/epilot/README.md
new file mode 100755
index 000000000..2668ec4da
--- /dev/null
+++ b/entity/docs/sdks/epilot/README.md
@@ -0,0 +1,14 @@
+# Epilot SDK
+
+
+## Overview
+
+Entity API: Flexible data layer for epilot Entities.
+
+Use this API configure and access your business objects like Contacts, Opportunities and Products.
+
+[Feature Documentation](https://docs.epilot.io/docs/entities/flexible-entities)
+
+
+### Available Operations
+
diff --git a/entity/docs/sdks/export/README.md b/entity/docs/sdks/export/README.md
new file mode 100755
index 000000000..798dc6f01
--- /dev/null
+++ b/entity/docs/sdks/export/README.md
@@ -0,0 +1,59 @@
+# Export
+(*export*)
+
+## Overview
+
+Export and Import entities via files
+
+### Available Operations
+
+* [export_entities](#export_entities) - exportEntities
+
+## export_entities
+
+create export file of entities
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ExportEntitiesRequest(
+ entity_search_params=shared.EntitySearchParams(
+ aggs=shared.EntitySearchParamsAggs(),
+ fields=[
+ '_id',
+ '_title',
+ 'first_name',
+ ],
+ q='_schema:contact AND status:active',
+ sort='_created_at:desc',
+ ),
+ job_id='abc123',
+)
+
+res = s.export.export_entities(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.ExportEntitiesRequest](../../models/operations/exportentitiesrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ExportEntitiesResponse](../../models/operations/exportentitiesresponse.md)**
+
diff --git a/entity/docs/sdks/relations/README.md b/entity/docs/sdks/relations/README.md
new file mode 100755
index 000000000..f9cb1819f
--- /dev/null
+++ b/entity/docs/sdks/relations/README.md
@@ -0,0 +1,353 @@
+# Relations
+(*relations*)
+
+## Overview
+
+Entity Relationships
+
+### Available Operations
+
+* [add_relations](#add_relations) - addRelations
+* [delete_relation](#delete_relation) - deleteRelation
+* [get_related_entities_count](#get_related_entities_count) - getRelatedEntitiesCount
+* [get_relations](#get_relations) - getRelations
+* [get_relations_v2](#get_relations_v2) - getRelationsV2
+* [get_relations_v3](#get_relations_v3) - getRelationsV3
+* [update_relation](#update_relation) - updateRelation
+
+## add_relations
+
+Relates one or more entities to parent entity by adding items to a relation attribute
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.AddRelationsRequest(
+ request_body=[
+ shared.RelationItem(
+ tags=[
+ 'string',
+ ],
+ attribute='string',
+ entity_id='acd6b1d8-3d92-448b-9649-9df660d593cf',
+ ),
+ ],
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ id='e3d006d8-7e69-4d98-8d09-bf6d30b52c36',
+ slug='contact',
+)
+
+res = s.relations.add_relations(req)
+
+if res.relation_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.AddRelationsRequest](../../models/operations/addrelationsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.AddRelationsResponse](../../models/operations/addrelationsresponse.md)**
+
+
+## delete_relation
+
+Removes relation between two entities
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.DeleteRelationRequest(
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ attribute='string',
+ entity_id='string',
+ id='84afcd91-1519-4f5b-b7b8-55b9c58577ae',
+ slug='contact',
+)
+
+res = s.relations.delete_relation(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.DeleteRelationRequest](../../models/operations/deleterelationrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.DeleteRelationResponse](../../models/operations/deleterelationresponse.md)**
+
+
+## get_related_entities_count
+
+Returns the amount of unique related entities for an entity - includes direct and reverse relations.
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetRelatedEntitiesCountRequest(
+ exclude_schemas=[
+ 'contact',
+ ],
+ id='3a515de5-fe13-46e4-ad0c-a57656a6a8af',
+ slug='contact',
+)
+
+res = s.relations.get_related_entities_count(req)
+
+if res.get_related_entities_count is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetRelatedEntitiesCountRequest](../../models/operations/getrelatedentitiescountrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetRelatedEntitiesCountResponse](../../models/operations/getrelatedentitiescountresponse.md)**
+
+
+## get_relations
+
+Returns 1st level direct relations for an entity.
+
+You can control whether to return the full entity or just the relation item with the `?hydrate` query param.
+
+Reverse relations i.e. entities referring to this entity are included with the `?include_reverse` query param.
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetRelationsRequest(
+ exclude_schemas=[
+ 'contact',
+ ],
+ id='e642d6bf-f2f7-41f9-8aa4-db0ec78f30e6',
+ include_schemas=[
+ 'contact',
+ ],
+ slug='contact',
+)
+
+res = s.relations.get_relations(req)
+
+if res.get_relations_resp is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.GetRelationsRequest](../../models/operations/getrelationsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetRelationsResponse](../../models/operations/getrelationsresponse.md)**
+
+
+## get_relations_v2
+
+Returns 1st level direct relations for an entity with pagination.
+
+You can control whether to return the full entity or just the relation item with the `?hydrate` query param.
+
+Reverse relations i.e. entities referring to this entity are included with the `?include_reverse` query param.
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetRelationsV2Request(
+ fields=[
+ '_id',
+ '_schema',
+ '_title',
+ ],
+ id='80912f3e-8dbd-4dd4-8ecc-63e001b2fb33',
+ slug='contact',
+)
+
+res = s.relations.get_relations_v2(req)
+
+if res.get_relations_resp_with_pagination is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.GetRelationsV2Request](../../models/operations/getrelationsv2request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetRelationsV2Response](../../models/operations/getrelationsv2response.md)**
+
+
+## get_relations_v3
+
+Returns 1st level direct relations for an entity with pagination.
+
+You can control whether to return the full entity or just the relation item with the `?hydrate` query param.
+
+Reverse relations i.e. entities referring to this entity are included with the `?include_reverse` query param.
+
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetRelationsV3Request(
+ exclude_schemas=[
+ 'contact',
+ ],
+ id='6e35e8b4-d75d-4f84-a79c-6a8b45571a04',
+ include_schemas=[
+ 'contact',
+ ],
+ slug='contact',
+)
+
+res = s.relations.get_relations_v3(req)
+
+if res.get_relations_resp_with_pagination is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.GetRelationsV3Request](../../models/operations/getrelationsv3request.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetRelationsV3Response](../../models/operations/getrelationsv3response.md)**
+
+
+## update_relation
+
+Updates an existing relation between two entities.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UpdateRelationRequest(
+ request_body=operations.UpdateRelationRequestBody(
+ tags=[
+ 'string',
+ ],
+ ),
+ activity_id='01F130Q52Q6MWSNS8N2AVXV4JN',
+ attribute='string',
+ entity_id='string',
+ id='90bd69bf-f6a7-44da-bb01-c3854f8c4b22',
+ slug='contact',
+)
+
+res = s.relations.update_relation(req)
+
+if res.relation_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `request` | [operations.UpdateRelationRequest](../../models/operations/updaterelationrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UpdateRelationResponse](../../models/operations/updaterelationresponse.md)**
+
diff --git a/entity/docs/sdks/savedviews/README.md b/entity/docs/sdks/savedviews/README.md
new file mode 100755
index 000000000..574656ad7
--- /dev/null
+++ b/entity/docs/sdks/savedviews/README.md
@@ -0,0 +1,264 @@
+# SavedViews
+(*saved_views*)
+
+## Overview
+
+Saved Views for Entities
+
+### Available Operations
+
+* [create_saved_view](#create_saved_view) - createSavedView
+* [delete_saved_view](#delete_saved_view) - deleteSavedView
+* [get_saved_view](#get_saved_view) - getSavedView
+* [list_favorite_views_for_user](#list_favorite_views_for_user) - listFavoriteViewsForUser
+* [list_saved_views](#list_saved_views) - listSavedViews
+* [update_saved_view](#update_saved_view) - updateSavedView
+
+## create_saved_view
+
+Creates a new saved view
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = shared.SavedView(
+ shared.SavedViewCreatedBy1(
+ user_id='10598',
+ ),
+ is_favorited_by=[
+ '11701',
+ ],
+ name='View listing German',
+ org='66',
+ shared=True,
+ slug=[
+ 'contact',
+ ],
+ ui_config={
+ "filters": 'string',
+ "table_layout": 'string',
+ },
+)
+
+res = s.saved_views.create_saved_view(req)
+
+if res.saved_view_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `request` | [shared.SavedView](../../models/shared/savedview.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.CreateSavedViewResponse](../../models/operations/createsavedviewresponse.md)**
+
+
+## delete_saved_view
+
+Deletes a saved view
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.DeleteSavedViewRequest(
+ id='59eccd11-7c56-46ef-bb90-41cbc04178cc',
+)
+
+res = s.saved_views.delete_saved_view(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.DeleteSavedViewRequest](../../models/operations/deletesavedviewrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.DeleteSavedViewResponse](../../models/operations/deletesavedviewresponse.md)**
+
+
+## get_saved_view
+
+Gets Saved View configuration by id.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetSavedViewRequest(
+ id='638188cd-8a1e-442e-95b2-8864469eafc5',
+)
+
+res = s.saved_views.get_saved_view(req)
+
+if res.get_saved_view_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.GetSavedViewRequest](../../models/operations/getsavedviewrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetSavedViewResponse](../../models/operations/getsavedviewresponse.md)**
+
+
+## list_favorite_views_for_user
+
+Get the Favorite Saved Views for user based on the schema
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+
+res = s.saved_views.list_favorite_views_for_user()
+
+if res.list_favorite_views_for_user_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+
+### Response
+
+**[operations.ListFavoriteViewsForUserResponse](../../models/operations/listfavoriteviewsforuserresponse.md)**
+
+
+## list_saved_views
+
+Get the Saved Views based on the schema
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+
+res = s.saved_views.list_saved_views()
+
+if res.list_saved_views_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+
+### Response
+
+**[operations.ListSavedViewsResponse](../../models/operations/listsavedviewsresponse.md)**
+
+
+## update_saved_view
+
+Updates a saved view
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UpdateSavedViewRequest(
+ saved_view=shared.SavedView(
+ shared.SavedViewCreatedBy1(
+ user_id='10598',
+ ),
+ is_favorited_by=[
+ '11701',
+ ],
+ name='View listing German',
+ org='66',
+ shared=True,
+ slug=[
+ 'contact',
+ ],
+ ui_config={
+ "filters": 'string',
+ "table_layout": 'string',
+ },
+ ),
+ id='203092cd-4781-4664-9f55-b0841d72e4e5',
+)
+
+res = s.saved_views.update_saved_view(req)
+
+if res.saved_view_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `request` | [operations.UpdateSavedViewRequest](../../models/operations/updatesavedviewrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UpdateSavedViewResponse](../../models/operations/updatesavedviewresponse.md)**
+
diff --git a/entity/docs/sdks/schemas/README.md b/entity/docs/sdks/schemas/README.md
new file mode 100755
index 000000000..c7b5225a5
--- /dev/null
+++ b/entity/docs/sdks/schemas/README.md
@@ -0,0 +1,528 @@
+# Schemas
+(*schemas*)
+
+## Overview
+
+Model Entities
+
+### Available Operations
+
+* [delete_schema](#delete_schema) - deleteSchema
+* [get_schema](#get_schema) - getSchema
+* [get_schema_versions](#get_schema_versions) - getSchemaVersions
+* [list_schema_blueprints](#list_schema_blueprints) - listSchemaBlueprints
+* [list_schemas](#list_schemas) - listSchemas
+* [list_taxonomy_classifications_for_schema](#list_taxonomy_classifications_for_schema) - listTaxonomyClassificationsForSchema
+* [put_schema](#put_schema) - putSchema
+
+## delete_schema
+
+Delete a schema, or a specific version of a schema
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.DeleteSchemaRequest(
+ slug='contact',
+)
+
+res = s.schemas.delete_schema(req)
+
+if res.status_code == 200:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `request` | [operations.DeleteSchemaRequest](../../models/operations/deleteschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.DeleteSchemaResponse](../../models/operations/deleteschemaresponse.md)**
+
+
+## get_schema
+
+By default gets the latest version of the Schema and to get the specific version of schema pass the id.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetSchemaRequest(
+ slug='contact',
+)
+
+res = s.schemas.get_schema(req)
+
+if res.entity_schema_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.GetSchemaRequest](../../models/operations/getschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetSchemaResponse](../../models/operations/getschemaresponse.md)**
+
+
+## get_schema_versions
+
+Get all versions of this schema ordered by the latest versions including drafts.
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetSchemaVersionsRequest(
+ slug='contact',
+)
+
+res = s.schemas.get_schema_versions(req)
+
+if res.get_schema_versions_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `request` | [operations.GetSchemaVersionsRequest](../../models/operations/getschemaversionsrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetSchemaVersionsResponse](../../models/operations/getschemaversionsresponse.md)**
+
+
+## list_schema_blueprints
+
+List canonical versions of all available schemas
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+
+res = s.schemas.list_schema_blueprints()
+
+if res.list_schema_blueprints_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+
+### Response
+
+**[operations.ListSchemaBlueprintsResponse](../../models/operations/listschemablueprintsresponse.md)**
+
+
+## list_schemas
+
+Get the latest versions of all schemas
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ListSchemasRequest()
+
+res = s.schemas.list_schemas(req)
+
+if res.list_schemas_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `request` | [operations.ListSchemasRequest](../../models/operations/listschemasrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ListSchemasResponse](../../models/operations/listschemasresponse.md)**
+
+
+## list_taxonomy_classifications_for_schema
+
+List taxonomy classifications for a given schema
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.ListTaxonomyClassificationsForSchemaRequest(
+ slug='contact',
+ taxonomy_slug='string',
+)
+
+res = s.schemas.list_taxonomy_classifications_for_schema(req)
+
+if res.list_taxonomy_classifications_for_schema_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.ListTaxonomyClassificationsForSchemaRequest](../../models/operations/listtaxonomyclassificationsforschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.ListTaxonomyClassificationsForSchemaResponse](../../models/operations/listtaxonomyclassificationsforschemaresponse.md)**
+
+
+## put_schema
+
+Create or update a schema with a new version
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.PutSchemaRequest(
+ entity_schema=shared.EntitySchema(
+ attributes=[
+ shared.TextAttribute(
+ purpose=[
+ 'a93c7b74-037c-43b9-94a9-6166aa0e2336',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ shared.TextAttribute(
+ purpose=[
+ '535d6bf8-fcc1-4de0-b32d-65715210cf50',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ shared.TextAttribute(
+ purpose=[
+ '4680eaf6-fd6b-4ef2-8dd2-87b615b3e0e2',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ shared.TextAttribute(
+ purpose=[
+ '8c6d1668-543e-44eb-a42b-720a7fd081cb',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ shared.TextAttribute(
+ purpose=[
+ '030766bc-3807-45c8-837b-1710c2601905',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ shared.TextAttribute(
+ purpose=[
+ 'e25fbb37-949e-45c6-b657-647c7479d9c5',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ shared.TextAttribute(
+ purpose=[
+ '60ea7969-366d-4774-ba49-a55907519da9',
+ ],
+ constraints=shared.TextAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.TextAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ ],
+ capabilities=[
+ shared.EntityCapability(
+ purpose=[
+ 'b2682a9b-a9cc-4095-b674-af53c32a28a3',
+ ],
+ attributes=[
+ shared.PartnerOrganisationAttribute(
+ purpose=[
+ 'aa88fab2-463c-4780-a75f-efd4fb709f43',
+ ],
+ constraints=shared.PartnerOrganisationAttributeConstraints(),
+ feature_flag='FF_MY_FEATURE_FLAG',
+ info_helpers=shared.PartnerOrganisationAttributeInfoHelpers(
+ hint_tooltip_placement='top',
+ ),
+ label='string',
+ layout='full_width',
+ name='string',
+ order=0,
+ setting_flag='MY_SETTING',
+ ),
+ ],
+ feature_flag='FF_MY_FEATURE_FLAG',
+ name='customer_messaging',
+ setting_flag='MY_SETTING',
+ title='Messaging',
+ ui_hooks=[
+ shared.EntityCapabilityUIHooks(
+ additional_properties={
+ "key": 'string',
+ },
+ component='PricingItems',
+ hook='EntityDetailsV2:Tab',
+ icon='email',
+ import_='@epilot360/notes',
+ order=10,
+ render_condition='_is_composite_price = "false"',
+ required_permission=shared.EntityCapabilityUIHooksRequiredPermission(
+ action='note:view',
+ resource='123',
+ ),
+ route='notes',
+ title='Notes',
+ ),
+ ],
+ ),
+ ],
+ dialog_config={
+ "key": 'string',
+ },
+ draft=False,
+ enable_setting=[
+ '3',
+ '6',
+ '0',
+ '_',
+ 'f',
+ 'e',
+ 'a',
+ 't',
+ 'u',
+ 'r',
+ 'e',
+ 's',
+ ],
+ explicit_search_mappings={
+ "image": shared.SearchMappings(
+ fields={
+ "key": 'string',
+ },
+ ),
+ },
+ feature_flag='FF_MY_FEATURE_FLAG',
+ group_settings=[
+ shared.EntitySchemaGroupSettings(
+ purpose=[
+ 'acc8e6b9-335e-475d-bf77-f76391618236',
+ ],
+ feature_flag='FF_MY_FEATURE_FLAG',
+ id='',
+ info_tooltip_title=shared.EntitySchemaGroupSettingsInfoTooltipTitle(),
+ label='string',
+ render_condition='_is_composite_price = "false"',
+ setting_flag='MY_SETTING',
+ ),
+ shared.EntitySchemaGroupSettings(
+ purpose=[
+ '09a0d8c5-8211-4d87-949e-87e05451ea97',
+ ],
+ feature_flag='FF_MY_FEATURE_FLAG',
+ id='',
+ info_tooltip_title=shared.EntitySchemaGroupSettingsInfoTooltipTitle(),
+ label='string',
+ render_condition='_is_composite_price = "false"',
+ setting_flag='MY_SETTING',
+ ),
+ ],
+ icon='person',
+ layout_settings=shared.EntitySchemaLayoutSettings(
+ additional_properties={
+ "key": 'string',
+ },
+ ),
+ name='Contact',
+ plural='Contacts',
+ published=False,
+ slug='contact',
+ title_template='{{first_name}} {{last_name}}',
+ ui_config=shared.EntitySchemaUIConfig(
+ shared.RedirectEntityView(
+ route='/app/pricing-hub/product/:entityId',
+ ),
+ shared.EntityViewDisabled(),
+ list_item=shared.EntitySchemaUIConfigListItem(
+ quick_actions=[
+ shared.EntityAction(
+ action='preview_file',
+ icon='visibility',
+ label='Preview File',
+ permission='entity:edit',
+ ),
+ ],
+ summary_attributes=[
+ shared.SummaryAttribute(
+ label='string',
+ value='string',
+ ),
+ ],
+ ),
+ sharing=shared.EntitySchemaUIConfigSharing(
+ show_sharing_button=True,
+ ),
+ shared.RedirectEntityView(
+ route='/app/pricing-hub/product/:entityId',
+ ),
+ shared.RedirectEntityView(
+ route='/app/pricing-hub/product/:entityId',
+ ),
+ ),
+ ),
+ slug='contact',
+)
+
+res = s.schemas.put_schema(req)
+
+if res.entity_schema_item is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `request` | [operations.PutSchemaRequest](../../models/operations/putschemarequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.PutSchemaResponse](../../models/operations/putschemaresponse.md)**
+
diff --git a/entity/docs/sdks/taxonomy/README.md b/entity/docs/sdks/taxonomy/README.md
new file mode 100755
index 000000000..07cb36527
--- /dev/null
+++ b/entity/docs/sdks/taxonomy/README.md
@@ -0,0 +1,227 @@
+# Taxonomy
+(*taxonomy*)
+
+## Overview
+
+Entity classification with Taxonomies
+
+### Available Operations
+
+* [get_taxonomy](#get_taxonomy) - getTaxonomy
+* [list_taxonomies](#list_taxonomies) - listTaxonomies
+* [taxonomies_classifications_search](#taxonomies_classifications_search) - taxonomiesClassificationsSearch
+* [taxonomy_autocomplete](#taxonomy_autocomplete) - taxonomyAutocomplete
+* [update_classifications_for_taxonomy](#update_classifications_for_taxonomy) - updateClassificationsForTaxonomy
+
+## get_taxonomy
+
+Get taxonomy by slug
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.GetTaxonomyRequest(
+ taxonomy_slug='string',
+)
+
+res = s.taxonomy.get_taxonomy(req)
+
+if res.taxonomy is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `request` | [operations.GetTaxonomyRequest](../../models/operations/gettaxonomyrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.GetTaxonomyResponse](../../models/operations/gettaxonomyresponse.md)**
+
+
+## list_taxonomies
+
+List taxonomies in an organisation
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+
+res = s.taxonomy.list_taxonomies()
+
+if res.list_taxonomies_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+
+### Response
+
+**[operations.ListTaxonomiesResponse](../../models/operations/listtaxonomiesresponse.md)**
+
+
+## taxonomies_classifications_search
+
+List taxonomy classifications in an organisation based on taxonomy slug
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.TaxonomiesClassificationsSearchRequest(
+ request_body=operations.TaxonomiesClassificationsSearchRequestBody(
+ classification_ids=[
+ '140d9b86-5e3a-4ede-b609-1ca17c7aaeae',
+ ],
+ ),
+ taxonomy_slug='string',
+)
+
+res = s.taxonomy.taxonomies_classifications_search(req)
+
+if res.taxonomies_classifications_search_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `request` | [operations.TaxonomiesClassificationsSearchRequest](../../models/operations/taxonomiesclassificationssearchrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.TaxonomiesClassificationsSearchResponse](../../models/operations/taxonomiesclassificationssearchresponse.md)**
+
+
+## taxonomy_autocomplete
+
+Taxonomies autocomplete
+
+### Example Usage
+
+```python
+import epilot
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.TaxonomyAutocompleteRequest(
+ taxonomy_slug='string',
+)
+
+res = s.taxonomy.taxonomy_autocomplete(req)
+
+if res.taxonomy_autocomplete_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `request` | [operations.TaxonomyAutocompleteRequest](../../models/operations/taxonomyautocompleterequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.TaxonomyAutocompleteResponse](../../models/operations/taxonomyautocompleteresponse.md)**
+
+
+## update_classifications_for_taxonomy
+
+Update taxonomies in an organisation based in taxonomy slug
+
+### Example Usage
+
+```python
+import epilot
+import dateutil.parser
+from epilot.models import operations, shared
+
+s = epilot.Epilot(
+ security=shared.Security(
+ epilot_auth="",
+ ),
+)
+
+req = operations.UpdateClassificationsForTaxonomyRequest(
+ classifications_update=shared.ClassificationsUpdate(
+ create=[
+ shared.TaxonomyClassification(
+ name='Wallbox PV',
+ parents=[
+ 'b4e342f2-9dee-4002-bc41-5ef6fe03f06e',
+ ],
+ ),
+ ],
+ delete=[
+ '9998bd32-2c31-4e2b-b318-191a2c6ad60b',
+ ],
+ update=[
+ shared.TaxonomyClassification(
+ name='Wallbox PV',
+ parents=[
+ '42062aff-2df8-4b95-9241-f68f95bbd35c',
+ ],
+ ),
+ ],
+ ),
+ taxonomy_slug='string',
+)
+
+res = s.taxonomy.update_classifications_for_taxonomy(req)
+
+if res.update_classifications_for_taxonomy_200_application_json_object is not None:
+ # handle response
+ pass
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `request` | [operations.UpdateClassificationsForTaxonomyRequest](../../models/operations/updateclassificationsfortaxonomyrequest.md) | :heavy_check_mark: | The request object to use for the request. |
+
+
+### Response
+
+**[operations.UpdateClassificationsForTaxonomyResponse](../../models/operations/updateclassificationsfortaxonomyresponse.md)**
+
diff --git a/entity/files.gen b/entity/files.gen
index 5fbc99a8f..0f217eaac 100755
--- a/entity/files.gen
+++ b/entity/files.gen
@@ -1,5 +1,7 @@
+src/epilot/sdkconfiguration.py
src/epilot/activity.py
src/epilot/entities.py
+src/epilot/entity_import.py
src/epilot/export.py
src/epilot/relations.py
src/epilot/saved_views.py
@@ -10,6 +12,7 @@ pylintrc
setup.py
src/epilot/__init__.py
src/epilot/models/__init__.py
+src/epilot/models/errors/sdkerror.py
src/epilot/utils/__init__.py
src/epilot/utils/retries.py
src/epilot/utils/utils.py
@@ -25,16 +28,19 @@ src/epilot/models/operations/patchentity.py
src/epilot/models/operations/searchentities.py
src/epilot/models/operations/updateentity.py
src/epilot/models/operations/upsertentity.py
-src/epilot/models/operations/exportentities.py
src/epilot/models/operations/importentities.py
+src/epilot/models/operations/exportentities.py
src/epilot/models/operations/addrelations.py
src/epilot/models/operations/deleterelation.py
+src/epilot/models/operations/getrelatedentitiescount.py
src/epilot/models/operations/getrelations.py
src/epilot/models/operations/getrelationsv2.py
+src/epilot/models/operations/getrelationsv3.py
src/epilot/models/operations/updaterelation.py
src/epilot/models/operations/createsavedview.py
src/epilot/models/operations/deletesavedview.py
src/epilot/models/operations/getsavedview.py
+src/epilot/models/operations/listfavoriteviewsforuser.py
src/epilot/models/operations/listsavedviews.py
src/epilot/models/operations/updatesavedview.py
src/epilot/models/operations/deleteschema.py
@@ -52,17 +58,24 @@ src/epilot/models/operations/updateclassificationsfortaxonomy.py
src/epilot/models/operations/__init__.py
src/epilot/models/shared/activityitem.py
src/epilot/models/shared/entityoperation.py
+src/epilot/models/shared/entityowner.py
+src/epilot/models/shared/entityacl.py
+src/epilot/models/shared/entity.py
+src/epilot/models/shared/activitycallercontext.py
src/epilot/models/shared/activity.py
+src/epilot/models/shared/entityitem.py
src/epilot/models/shared/entitysearchresults.py
src/epilot/models/shared/entitysearchparams.py
src/epilot/models/shared/entityimportparams.py
src/epilot/models/shared/relationitem.py
-src/epilot/models/shared/getrelationsresp.py
+src/epilot/models/shared/getrelatedentitiescount.py
+src/epilot/models/shared/relationentity.py
src/epilot/models/shared/getrelationsrespwithpagination.py
src/epilot/models/shared/savedviewitem.py
src/epilot/models/shared/savedview.py
src/epilot/models/shared/entityschemaitem.py
src/epilot/models/shared/entitydefaulttable.py
+src/epilot/models/shared/entityaction.py
src/epilot/models/shared/redirectentityview.py
src/epilot/models/shared/entityviewdisabled.py
src/epilot/models/shared/entitydefaultedit.py
@@ -98,10 +111,335 @@ src/epilot/models/shared/invitationemailattribute.py
src/epilot/models/shared/automationattribute.py
src/epilot/models/shared/internaluserattribute.py
src/epilot/models/shared/purposeattribute.py
+src/epilot/models/shared/partnerorganisationattribute.py
src/epilot/models/shared/taxonomyclassification.py
src/epilot/models/shared/entityschema.py
src/epilot/models/shared/taxonomy.py
src/epilot/models/shared/classificationsupdate.py
src/epilot/models/shared/security.py
src/epilot/models/shared/__init__.py
-USAGE.md
\ No newline at end of file
+src/epilot/models/errors/__init__.py
+USAGE.md
+docs/models/operations/attachactivityrequest.md
+docs/models/operations/attachactivityresponse.md
+docs/models/operations/createactivityrequest.md
+docs/models/operations/createactivityresponse.md
+docs/models/operations/getactivityrequest.md
+docs/models/operations/getactivityresponse.md
+docs/models/operations/getentityactivityfeedrequest.md
+docs/models/operations/getentityactivityfeed200applicationjson.md
+docs/models/operations/getentityactivityfeedresponse.md
+docs/models/operations/autocompleterequest.md
+docs/models/operations/autocomplete200applicationjsonresults.md
+docs/models/operations/autocomplete200applicationjson.md
+docs/models/operations/autocompleteresponse.md
+docs/models/operations/createentityrequest.md
+docs/models/operations/createentityresponse.md
+docs/models/operations/deleteentityrequest.md
+docs/models/operations/deleteentityresponse.md
+docs/models/operations/getentityrequest.md
+docs/models/operations/getentity200applicationjson.md
+docs/models/operations/getentityresponse.md
+docs/models/operations/patchentityrequest.md
+docs/models/operations/patchentityresponse.md
+docs/models/operations/searchentitiesresponse.md
+docs/models/operations/updateentityrequest.md
+docs/models/operations/updateentityresponse.md
+docs/models/operations/upsertentityrequestbody.md
+docs/models/operations/upsertentityrequest.md
+docs/models/operations/upsertentityresponse.md
+docs/models/operations/importentitiesrequest.md
+docs/models/operations/importentitiesresponse.md
+docs/models/operations/exportentitiesrequest.md
+docs/models/operations/exportentitiesresponse.md
+docs/models/operations/addrelationsrequest.md
+docs/models/operations/addrelationsresponse.md
+docs/models/operations/deleterelationrequest.md
+docs/models/operations/deleterelationresponse.md
+docs/models/operations/getrelatedentitiescountrequest.md
+docs/models/operations/getrelatedentitiescountresponse.md
+docs/models/operations/getrelationsrequest.md
+docs/models/operations/getrelationsresponse.md
+docs/models/operations/getrelationsv2request.md
+docs/models/operations/getrelationsv2response.md
+docs/models/operations/getrelationsv3request.md
+docs/models/operations/getrelationsv3response.md
+docs/models/operations/updaterelationrequestbody.md
+docs/models/operations/updaterelationrequest.md
+docs/models/operations/updaterelationresponse.md
+docs/models/operations/createsavedviewresponse.md
+docs/models/operations/deletesavedviewrequest.md
+docs/models/operations/deletesavedviewresponse.md
+docs/models/operations/getsavedviewrequest.md
+docs/models/operations/getsavedview200applicationjson.md
+docs/models/operations/getsavedviewresponse.md
+docs/models/operations/listfavoriteviewsforuser200applicationjson.md
+docs/models/operations/listfavoriteviewsforuserresponse.md
+docs/models/operations/listsavedviews200applicationjson.md
+docs/models/operations/listsavedviewsresponse.md
+docs/models/operations/updatesavedviewrequest.md
+docs/models/operations/updatesavedviewresponse.md
+docs/models/operations/deleteschemarequest.md
+docs/models/operations/deleteschemaresponse.md
+docs/models/operations/getschemarequest.md
+docs/models/operations/getschemaresponse.md
+docs/models/operations/getschemaversionsrequest.md
+docs/models/operations/getschemaversions200applicationjson.md
+docs/models/operations/getschemaversionsresponse.md
+docs/models/operations/listschemablueprints200applicationjson.md
+docs/models/operations/listschemablueprintsresponse.md
+docs/models/operations/listschemasrequest.md
+docs/models/operations/listschemas200applicationjson.md
+docs/models/operations/listschemasresponse.md
+docs/models/operations/listtaxonomyclassificationsforschemarequest.md
+docs/models/operations/listtaxonomyclassificationsforschema200applicationjson.md
+docs/models/operations/listtaxonomyclassificationsforschemaresponse.md
+docs/models/operations/putschemarequest.md
+docs/models/operations/putschemaresponse.md
+docs/models/operations/gettaxonomyrequest.md
+docs/models/operations/gettaxonomyresponse.md
+docs/models/operations/listtaxonomies200applicationjson.md
+docs/models/operations/listtaxonomiesresponse.md
+docs/models/operations/taxonomiesclassificationssearchrequestbody.md
+docs/models/operations/taxonomiesclassificationssearchrequest.md
+docs/models/operations/taxonomiesclassificationssearch200applicationjson.md
+docs/models/operations/taxonomiesclassificationssearchresponse.md
+docs/models/operations/taxonomyautocompleterequest.md
+docs/models/operations/taxonomyautocomplete200applicationjson.md
+docs/models/operations/taxonomyautocompleteresponse.md
+docs/models/operations/updateclassificationsfortaxonomyrequest.md
+docs/models/operations/updateclassificationsfortaxonomy200applicationjsondeleted.md
+docs/models/operations/updateclassificationsfortaxonomy200applicationjson.md
+docs/models/operations/updateclassificationsfortaxonomyresponse.md
+docs/models/shared/activityitem.md
+docs/models/shared/entityoperationdiff.md
+docs/models/shared/entityoperationoperation.md
+docs/models/shared/entityoperationparams.md
+docs/models/shared/entityoperationpayload.md
+docs/models/shared/entityoperation.md
+docs/models/shared/entityowner.md
+docs/models/shared/entityacl.md
+docs/models/shared/entity.md
+docs/models/shared/activitycallercontextepilotauthtoken.md
+docs/models/shared/activitycallercontextepilotauth.md
+docs/models/shared/activitycallercontext.md
+docs/models/shared/activity.md
+docs/models/shared/entityitem.md
+docs/models/shared/entitysearchresultsaggregations.md
+docs/models/shared/entitysearchresults.md
+docs/models/shared/entitysearchparamsaggs.md
+docs/models/shared/entitysearchparams.md
+docs/models/shared/entityimportparamss3reference.md
+docs/models/shared/entityimportparams.md
+docs/models/shared/relationitem.md
+docs/models/shared/getrelatedentitiescount.md
+docs/models/shared/getrelationsresp.md
+docs/models/shared/relationentity.md
+docs/models/shared/getrelationsrespwithpagination.md
+docs/models/shared/savedviewitemcreatedby2source.md
+docs/models/shared/savedviewitemcreatedby2.md
+docs/models/shared/savedviewitemcreatedby1.md
+docs/models/shared/savedviewitemcreatedby.md
+docs/models/shared/savedviewitem.md
+docs/models/shared/savedviewcreatedby2source.md
+docs/models/shared/savedviewcreatedby2.md
+docs/models/shared/savedviewcreatedby1.md
+docs/models/shared/savedviewcreatedby.md
+docs/models/shared/savedview.md
+docs/models/shared/entityschemaitemgroupsettingsinfotooltiptitle.md
+docs/models/shared/entityschemaitemgroupsettings.md
+docs/models/shared/entityschemaitemlayoutsettings.md
+docs/models/shared/entityschemaitemsource.md
+docs/models/shared/entityschemaitemuiconfigcreateview.md
+docs/models/shared/entityschemaitemuiconfigeditview.md
+docs/models/shared/entityschemaitemuiconfiglistitemsummaryattributes.md
+docs/models/shared/entityschemaitemuiconfiglistitem.md
+docs/models/shared/entityschemaitemuiconfigsharing.md
+docs/models/shared/entityschemaitemuiconfigsingleview.md
+docs/models/shared/entityschemaitemuiconfigtableview.md
+docs/models/shared/entityschemaitemuiconfig.md
+docs/models/shared/entityschemaitem.md
+docs/models/shared/entitydefaulttabledropdownitems2type.md
+docs/models/shared/entitydefaulttabledropdownitems2.md
+docs/models/shared/entitydefaulttabledropdownitems1type.md
+docs/models/shared/entitydefaulttabledropdownitems1.md
+docs/models/shared/entitydefaulttabledropdownitems.md
+docs/models/shared/entitydefaulttablenavbaractionsoptionsparams.md
+docs/models/shared/entitydefaulttablenavbaractionsoptions.md
+docs/models/shared/entitydefaulttablenavbaractions.md
+docs/models/shared/entitydefaulttablerowactions.md
+docs/models/shared/entitydefaulttableviewtype.md
+docs/models/shared/entitydefaulttable.md
+docs/models/shared/entityaction.md
+docs/models/shared/redirectentityviewviewtype.md
+docs/models/shared/redirectentityview.md
+docs/models/shared/entityviewdisabledviewtype.md
+docs/models/shared/entityviewdisabled.md
+docs/models/shared/entitydefaulteditviewtype.md
+docs/models/shared/entitydefaultedit.md
+docs/models/shared/summaryattribute.md
+docs/models/shared/entitydefaultcreateviewtype.md
+docs/models/shared/entitydefaultcreate.md
+docs/models/shared/searchmappingstype.md
+docs/models/shared/searchmappings.md
+docs/models/shared/entitycapabilityuihooksrequiredpermission.md
+docs/models/shared/entitycapabilityuihooks.md
+docs/models/shared/entitycapability.md
+docs/models/shared/attribute.md
+docs/models/shared/textattributeconstraints.md
+docs/models/shared/textattributeinfohelpers.md
+docs/models/shared/textattributetype.md
+docs/models/shared/textattribute.md
+docs/models/shared/linkattributeconstraints.md
+docs/models/shared/linkattributeinfohelpers.md
+docs/models/shared/linkattributetype.md
+docs/models/shared/linkattribute.md
+docs/models/shared/dateattributeconstraints.md
+docs/models/shared/dateattributeinfohelpers.md
+docs/models/shared/dateattributetype.md
+docs/models/shared/dateattribute.md
+docs/models/shared/countryattributeconstraints.md
+docs/models/shared/countryattributeinfohelpers.md
+docs/models/shared/countryattributetype.md
+docs/models/shared/countryattribute.md
+docs/models/shared/booleanattributeconstraints.md
+docs/models/shared/booleanattributeinfohelpers.md
+docs/models/shared/booleanattributetype.md
+docs/models/shared/booleanattribute.md
+docs/models/shared/selectattributeconstraints.md
+docs/models/shared/selectattributeinfohelpers.md
+docs/models/shared/selectattributeoptions1.md
+docs/models/shared/selectattributeoptions.md
+docs/models/shared/selectattributetype.md
+docs/models/shared/selectattribute.md
+docs/models/shared/multiselectattributeconstraints.md
+docs/models/shared/multiselectattributeinfohelpers.md
+docs/models/shared/multiselectattributeoptions2.md
+docs/models/shared/multiselectattributeoptions.md
+docs/models/shared/multiselectattributetype.md
+docs/models/shared/multiselectattribute.md
+docs/models/shared/statusattributeconstraints.md
+docs/models/shared/statusattributeinfohelpers.md
+docs/models/shared/statusattributeoptions2.md
+docs/models/shared/statusattributeoptions.md
+docs/models/shared/statusattributetype.md
+docs/models/shared/statusattribute.md
+docs/models/shared/sequenceattributeconstraints.md
+docs/models/shared/sequenceattributeinfohelpers.md
+docs/models/shared/sequenceattributetype.md
+docs/models/shared/sequenceattribute.md
+docs/models/shared/relationattributeactionsactiontype.md
+docs/models/shared/relationattributeactionsnewentityitem.md
+docs/models/shared/relationattributeactions.md
+docs/models/shared/relationattributeconstraints.md
+docs/models/shared/relationattributedrawersize.md
+docs/models/shared/relationattributeeditmode.md
+docs/models/shared/relationattributeinfohelpers.md
+docs/models/shared/relationattributerelationaffinitymode.md
+docs/models/shared/relationattributerelationtype.md
+docs/models/shared/relationattributesummaryfields.md
+docs/models/shared/relationattributetype.md
+docs/models/shared/relationattribute.md
+docs/models/shared/summaryfield.md
+docs/models/shared/userrelationattributeconstraints.md
+docs/models/shared/userrelationattributeinfohelpers.md
+docs/models/shared/userrelationattributetype.md
+docs/models/shared/userrelationattribute.md
+docs/models/shared/addressrelationattributeconstraints.md
+docs/models/shared/addressrelationattributeinfohelpers.md
+docs/models/shared/addressrelationattributetype.md
+docs/models/shared/addressrelationattribute.md
+docs/models/shared/paymentmethodrelationattributeconstraints.md
+docs/models/shared/paymentmethodrelationattributeinfohelpers.md
+docs/models/shared/paymentmethodrelationattributetype.md
+docs/models/shared/paymentmethodrelationattribute.md
+docs/models/shared/currencyattributeconstraints.md
+docs/models/shared/currencyattributecurrency1.md
+docs/models/shared/currencyattributecurrency.md
+docs/models/shared/currencyattributeinfohelpers.md
+docs/models/shared/currencyattributetype.md
+docs/models/shared/currencyattribute.md
+docs/models/shared/repeatableattributeconstraints.md
+docs/models/shared/repeatableattributeinfohelpers.md
+docs/models/shared/repeatableattributerelationaffinitymode.md
+docs/models/shared/repeatableattributetype.md
+docs/models/shared/repeatableattribute.md
+docs/models/shared/tagsattributeconstraints.md
+docs/models/shared/tagsattributeinfohelpers.md
+docs/models/shared/tagsattributetype.md
+docs/models/shared/tagsattribute.md
+docs/models/shared/numberattributeconstraints.md
+docs/models/shared/numberattributeinfohelpers.md
+docs/models/shared/numberattributetype.md
+docs/models/shared/numberattribute.md
+docs/models/shared/consentattributeconstraints.md
+docs/models/shared/consentattributeinfohelpers.md
+docs/models/shared/consentattributetype.md
+docs/models/shared/consentattribute.md
+docs/models/shared/internalattributeconstraints.md
+docs/models/shared/internalattributeinfohelpers.md
+docs/models/shared/internalattributetype.md
+docs/models/shared/internalattribute.md
+docs/models/shared/orderedlistattributeconstraints.md
+docs/models/shared/orderedlistattributeinfohelpers.md
+docs/models/shared/orderedlistattributetype.md
+docs/models/shared/orderedlistattribute.md
+docs/models/shared/fileattributeconstraints.md
+docs/models/shared/fileattributedefaultaccesscontrol.md
+docs/models/shared/fileattributeinfohelpers.md
+docs/models/shared/fileattributetype.md
+docs/models/shared/fileattribute.md
+docs/models/shared/computedattributeconstraints.md
+docs/models/shared/computedattributeinfohelpers.md
+docs/models/shared/computedattributetype.md
+docs/models/shared/computedattribute.md
+docs/models/shared/partnerstatusattributeconstraints.md
+docs/models/shared/partnerstatusattributeinfohelpers.md
+docs/models/shared/partnerstatusattributetype.md
+docs/models/shared/partnerstatusattribute.md
+docs/models/shared/invitationemailattributeconstraints.md
+docs/models/shared/invitationemailattributeinfohelpers.md
+docs/models/shared/invitationemailattributetype.md
+docs/models/shared/invitationemailattribute.md
+docs/models/shared/automationattributeconstraints.md
+docs/models/shared/automationattributeinfohelpers.md
+docs/models/shared/automationattributetype.md
+docs/models/shared/automationattribute.md
+docs/models/shared/internaluserattributeconstraints.md
+docs/models/shared/internaluserattributeinfohelpers.md
+docs/models/shared/internaluserattributetype.md
+docs/models/shared/internaluserattribute.md
+docs/models/shared/purposeattributeconstraints.md
+docs/models/shared/purposeattributeinfohelpers.md
+docs/models/shared/purposeattributetype.md
+docs/models/shared/purposeattribute.md
+docs/models/shared/partnerorganisationattributeconstraints.md
+docs/models/shared/partnerorganisationattributeinfohelpers.md
+docs/models/shared/partnerorganisationattributetype.md
+docs/models/shared/partnerorganisationattribute.md
+docs/models/shared/taxonomyclassification.md
+docs/models/shared/entityschemagroupsettingsinfotooltiptitle.md
+docs/models/shared/entityschemagroupsettings.md
+docs/models/shared/entityschemalayoutsettings.md
+docs/models/shared/entityschemauiconfigcreateview.md
+docs/models/shared/entityschemauiconfigeditview.md
+docs/models/shared/entityschemauiconfiglistitemsummaryattributes.md
+docs/models/shared/entityschemauiconfiglistitem.md
+docs/models/shared/entityschemauiconfigsharing.md
+docs/models/shared/entityschemauiconfigsingleview.md
+docs/models/shared/entityschemauiconfigtableview.md
+docs/models/shared/entityschemauiconfig.md
+docs/models/shared/entityschema.md
+docs/models/shared/taxonomy.md
+docs/models/shared/classificationsupdate.md
+docs/models/shared/security.md
+docs/sdks/epilot/README.md
+docs/sdks/activity/README.md
+docs/sdks/entities/README.md
+docs/sdks/entityimport/README.md
+docs/sdks/export/README.md
+docs/sdks/relations/README.md
+docs/sdks/savedviews/README.md
+docs/sdks/schemas/README.md
+docs/sdks/taxonomy/README.md
+.gitattributes
\ No newline at end of file
diff --git a/entity/gen.yaml b/entity/gen.yaml
index 852bdf838..0854e421b 100644
--- a/entity/gen.yaml
+++ b/entity/gen.yaml
@@ -1,16 +1,27 @@
configVersion: 1.0.0
management:
- docChecksum: 08db6223bb1d9fff9895a9628a24aab3
+ docChecksum: e8adb604a2c9aaf4c8973aa40510b5c2
docVersion: 1.0.0
- speakeasyVersion: 1.19.2
- generationVersion: 2.16.5
+ speakeasyVersion: 1.109.2
+ generationVersion: 2.173.0
generation:
- telemetryEnabled: false
+ repoURL: https://github.com/epilot-dev/sdk-python.git
sdkClassName: epilot
sdkFlattening: true
singleTagPerOp: false
+ telemetryEnabled: false
+features:
+ python:
+ additionalProperties: 0.1.0
+ core: 3.3.1
+ globalSecurity: 2.82.0
+ globalServerURLs: 2.82.0
python:
- version: 1.2.2
+ version: 2.1.5
author: epilot
description: Python Client SDK for Epilot
+ flattenGlobalSecurity: false
+ installationURL: https://github.com/epilot-dev/sdk-python.git#subdirectory=entity
+ maxMethodParams: 0
packageName: epilot-entity
+ repoSubDirectory: entity
diff --git a/entity/pylintrc b/entity/pylintrc
index cb9d37ade..22b805943 100755
--- a/entity/pylintrc
+++ b/entity/pylintrc
@@ -88,7 +88,7 @@ persistent=yes
# Minimum Python version to use for version dependent checks. Will default to
# the version used to run pylint.
-py-version=3.9
+py-version=3.8
# Discover python modules and packages in the file system subtree.
recursive=no
@@ -116,20 +116,15 @@ argument-naming-style=snake_case
#argument-rgx=
# Naming style matching correct attribute names.
-attr-naming-style=snake_case
+#attr-naming-style=snake_case
# Regular expression matching correct attribute names. Overrides attr-naming-
# style. If left empty, attribute names will be checked with the set naming
# style.
-#attr-rgx=
+attr-rgx=[^\W\d][^\W]*|__.*__$
# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
- bar,
- baz,
- toto,
- tutu,
- tata
+bad-names=
# Bad variable names regexes, separated by a comma. If names match any regex,
# they will always be refused
@@ -440,7 +435,13 @@ disable=raw-checker-failed,
trailing-newlines,
too-many-public-methods,
too-many-locals,
- too-many-lines
+ too-many-lines,
+ using-constant-test,
+ too-many-statements,
+ cyclic-import,
+ too-many-nested-blocks,
+ too-many-boolean-expressions,
+ no-else-raise
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
@@ -621,7 +622,7 @@ additional-builtins=
allow-global-unused-variables=yes
# List of names allowed to shadow builtins
-allowed-redefined-builtins=
+allowed-redefined-builtins=id,object
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
diff --git a/entity/setup.py b/entity/setup.py
index 66da8b6d1..1fd614041 100755
--- a/entity/setup.py
+++ b/entity/setup.py
@@ -10,30 +10,31 @@
setuptools.setup(
name="epilot-entity",
- version="1.2.2",
+ version="2.1.5",
author="epilot",
description="Python Client SDK for Epilot",
long_description=long_description,
long_description_content_type="text/markdown",
packages=setuptools.find_packages(where="src"),
install_requires=[
- "certifi==2022.12.07",
- "charset-normalizer==2.1.1",
- "dataclasses-json-speakeasy==0.5.8",
- "idna==3.3",
- "marshmallow==3.17.1",
- "marshmallow-enum==1.5.1",
- "mypy-extensions==0.4.3",
- "packaging==21.3",
- "pyparsing==3.0.9",
- "python-dateutil==2.8.2",
- "requests==2.28.1",
- "six==1.16.0",
- "typing-inspect==0.8.0",
- "typing_extensions==4.3.0",
- "urllib3==1.26.12",
- "pylint==2.16.2",
+ "certifi>=2023.7.22",
+ "charset-normalizer>=3.2.0",
+ "dataclasses-json>=0.6.1",
+ "idna>=3.4",
+ "jsonpath-python>=1.0.6 ",
+ "marshmallow>=3.19.0",
+ "mypy-extensions>=1.0.0",
+ "packaging>=23.1",
+ "python-dateutil>=2.8.2",
+ "requests>=2.31.0",
+ "six>=1.16.0",
+ "typing-inspect>=0.9.0",
+ "typing_extensions>=4.7.1",
+ "urllib3>=2.0.4",
],
+ extras_require={
+ "dev":["pylint==2.16.2"]
+ },
package_dir={'': 'src'},
- python_requires='>=3.9'
+ python_requires='>=3.8'
)
diff --git a/entity/src/epilot/__init__.py b/entity/src/epilot/__init__.py
index b9e232018..e6c0deeb6 100755
--- a/entity/src/epilot/__init__.py
+++ b/entity/src/epilot/__init__.py
@@ -1,3 +1,4 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
from .sdk import *
+from .sdkconfiguration import *
diff --git a/entity/src/epilot/activity.py b/entity/src/epilot/activity.py
index 1a53c9fbc..9576d649f 100755
--- a/entity/src/epilot/activity.py
+++ b/entity/src/epilot/activity.py
@@ -1,40 +1,33 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
from typing import Optional
class Activity:
r"""Entity Events"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def attach_activity(self, request: operations.AttachActivityRequest) -> operations.AttachActivityResponse:
r"""attachActivity
Attach existing activity to entity activity feeds
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.AttachActivityRequest, base_url, '/v1/entity/activity/{id}:attach', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.AttachActivityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('POST', url, params=query_params)
+ http_res = client.request('POST', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.AttachActivityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -43,28 +36,31 @@ def attach_activity(self, request: operations.AttachActivityRequest) -> operatio
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ActivityItem])
res.activity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def create_activity(self, request: operations.CreateActivityRequest) -> operations.CreateActivityResponse:
r"""createActivity
Create an activity that can be displayed in activity feeds.
-
+
- All activites are published as events on the event bus
- Entity mutations are always part of an activity
-
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/activity'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/activity'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "activity", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "activity", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.CreateActivityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -75,22 +71,27 @@ def create_activity(self, request: operations.CreateActivityRequest) -> operatio
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ActivityItem])
res.activity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_activity(self, request: operations.GetActivityRequest) -> operations.GetActivityResponse:
r"""getActivity
Get activity by id
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetActivityRequest, base_url, '/v1/entity/activity/{id}', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.GetActivityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetActivityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -99,23 +100,27 @@ def get_activity(self, request: operations.GetActivityRequest) -> operations.Get
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.ActivityItem])
res.activity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_entity_activity_feed(self, request: operations.GetEntityActivityFeedRequest) -> operations.GetEntityActivityFeedResponse:
r"""getEntityActivityFeed
Get activity feed for an entity
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetEntityActivityFeedRequest, base_url, '/v1/entity/{slug}/{id}/activity', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.GetEntityActivityFeedRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetEntityActivityFeedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -124,6 +129,8 @@ def get_entity_activity_feed(self, request: operations.GetEntityActivityFeedRequ
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetEntityActivityFeed200ApplicationJSON])
res.get_entity_activity_feed_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/entity/src/epilot/entities.py b/entity/src/epilot/entities.py
index 7e62dbdae..61e9acbef 100755
--- a/entity/src/epilot/entities.py
+++ b/entity/src/epilot/entities.py
@@ -1,41 +1,38 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
-from typing import Any, Optional
+from .sdkconfiguration import SDKConfiguration
+from enum import Enum
+from epilot import utils
+from epilot.models import errors, operations, shared
+from typing import Optional
+
+class SearchEntitiesAcceptEnum(str, Enum):
+ APPLICATION_JSON = "application/json"
+ TEXT_CSV = "text/csv"
class Entities:
r"""CRUD Access for Entities"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def autocomplete(self, request: operations.AutocompleteRequest) -> operations.AutocompleteResponse:
r"""autocomplete
Autocomplete entity attributes
-
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity:autocomplete'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity:autocomplete'
+ headers = {}
query_params = utils.get_query_params(operations.AutocompleteRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.AutocompleteResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -44,23 +41,26 @@ def autocomplete(self, request: operations.AutocompleteRequest) -> operations.Au
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.Autocomplete200ApplicationJSON])
res.autocomplete_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def create_entity(self, request: operations.CreateEntityRequest) -> operations.CreateEntityResponse:
r"""createEntity
Creates a new entity using a key.
-
+
## Activity
-
+
If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityCreated`
-
+
## Relations
-
+
To create a relation, store a property object that defines a `$relation` array.
-
+
Example:
-
+
```json
{
\"contacts\": {
@@ -70,23 +70,23 @@ def create_entity(self, request: operations.CreateEntityRequest) -> operations.C
}
}
```
-
+
The items in `$relation` support two properties:
- `entity_id` - The ID of the entity to link
- `_tags` - Tags or labels for the relation (optional)
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.CreateEntityRequest, base_url, '/v1/entity/{slug}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "entity", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.CreateEntityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -95,46 +95,49 @@ def create_entity(self, request: operations.CreateEntityRequest) -> operations.C
if http_res.status_code == 201:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
+ out = utils.unmarshal_json(http_res.text, Optional[shared.EntityItem])
res.entity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def delete_entity(self, request: operations.DeleteEntityRequest) -> operations.DeleteEntityResponse:
r"""deleteEntity
Deletes an Entity
-
+
## Activity
-
+
If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityDeleted`
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.DeleteEntityRequest, base_url, '/v1/entity/{slug}/{id}', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.DeleteEntityRequest, request)
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('DELETE', url, params=query_params)
+ http_res = client.request('DELETE', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeleteEntityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 200:
- pass
return res
+
def get_entity(self, request: operations.GetEntityRequest) -> operations.GetEntityResponse:
r"""getEntity
Gets Entity and relations by id.
-
+
## Relations
-
+
When `hydrate=true`, relation attributes are replaced in-place with nested entity values.
-
+
Example:
```json
{
@@ -155,7 +158,7 @@ def get_entity(self, request: operations.GetEntityRequest) -> operations.GetEnti
}
}
```
-
+
Becomes:
```json
{
@@ -192,17 +195,18 @@ def get_entity(self, request: operations.GetEntityRequest) -> operations.GetEnti
]
}
```
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetEntityRequest, base_url, '/v1/entity/{slug}/{id}', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.GetEntityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetEntityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -211,25 +215,28 @@ def get_entity(self, request: operations.GetEntityRequest) -> operations.GetEnti
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetEntity200ApplicationJSON])
res.get_entity_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def patch_entity(self, request: operations.PatchEntityRequest) -> operations.PatchEntityResponse:
r"""patchEntity
Partially updates an entity with the passed in entity data.
-
+
- If an _updated_at is passed and the server contains a newer version of the entity a `409` Error is returned
-
+
## Activity
-
+
If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityUpdated`
-
+
## Relations
-
+
To create a relation, store a property that defines a `$relation` array.
-
+
Example:
-
+
```json
{
\"contacts\": {
@@ -239,25 +246,25 @@ def patch_entity(self, request: operations.PatchEntityRequest) -> operations.Pat
}
}
```
-
+
The items in `$relation` support two properties:
- `entity_id` - The ID of the entity to link
- `_tags` - Tags or labels for the relation (optional)
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.PatchEntityRequest, base_url, '/v1/entity/{slug}/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "entity", False, False, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
if data is None and form is None:
raise Exception('request body is required')
query_params = utils.get_query_params(operations.PatchEntityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PATCH', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -266,23 +273,26 @@ def patch_entity(self, request: operations.PatchEntityRequest) -> operations.Pat
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
+ out = utils.unmarshal_json(http_res.text, Optional[shared.EntityItem])
res.entity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
elif http_res.status_code == 409:
pass
return res
- def search_entities(self, request: shared.EntitySearchParams) -> operations.SearchEntitiesResponse:
+
+ def search_entities(self, request: shared.EntitySearchParams, accept_header_override: Optional[SearchEntitiesAcceptEnum] = None) -> operations.SearchEntitiesResponse:
r"""searchEntities
Search for entities. Supports ordering and pagination. Lucene query syntax supported for complex querying.
-
+
Passing comma-separated `x-epilot-org-id` is supported for cross-org entity search.
-
+
## Relations
-
+
When `hydrate=true`, relation attributes are replaced in-place with nested entity values.
-
+
Example:
```json
{
@@ -303,7 +313,7 @@ def search_entities(self, request: shared.EntitySearchParams) -> operations.Sear
}
}
```
-
+
Becomes:
```json
{
@@ -340,18 +350,21 @@ def search_entities(self, request: shared.EntitySearchParams) -> operations.Sear
]
}
```
-
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity:search'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity:search'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ if accept_header_override is not None:
+ headers['Accept'] = accept_header_override.value
+ else:
+ headers['Accept'] = 'application/json;q=1, text/csv;q=0'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -362,25 +375,28 @@ def search_entities(self, request: shared.EntitySearchParams) -> operations.Sear
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.EntitySearchResults])
res.entity_search_results = out
- if utils.match_content_type(content_type, 'text/csv'):
+ elif utils.match_content_type(content_type, 'text/csv'):
res.search_entities_200_text_csv_string = http_res.content
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_entity(self, request: operations.UpdateEntityRequest) -> operations.UpdateEntityResponse:
r"""updateEntity
Updates an Entity
-
+
## Activity
-
+
If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityUpdated`
-
+
## Relations
-
+
To create a relation, store a property that defines a `$relation` array.
-
+
Example:
-
+
```json
{
\"contacts\": {
@@ -390,23 +406,23 @@ def update_entity(self, request: operations.UpdateEntityRequest) -> operations.U
}
}
```
-
+
The items in `$relation` support two properties:
- `entity_id` - The ID of the entity to link
- `_tags` - Tags or labels for the relation (optional)
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateEntityRequest, base_url, '/v1/entity/{slug}/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "entity", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.UpdateEntityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PUT', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -415,35 +431,38 @@ def update_entity(self, request: operations.UpdateEntityRequest) -> operations.U
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
+ out = utils.unmarshal_json(http_res.text, Optional[shared.EntityItem])
res.entity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def upsert_entity(self, request: operations.UpsertEntityRequest) -> operations.UpsertEntityResponse:
r"""upsertEntity
Create or update an entity using `unique_key`
-
+
- If no entities are matched, a new entity is created.
- If exactly one entity is matched, a `PATCH`-style update is applied to the existing entity.
- If more than one entity is matched a `409` Error is returned
-
+
## Activity
-
+
If no `activity_id` query parameter is provided, implicitly creates Activity of type `EntityCreated` or `EntityUpdated`
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpsertEntityRequest, base_url, '/v1/entity/{slug}:upsert', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.UpsertEntityRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PATCH', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -452,8 +471,10 @@ def upsert_entity(self, request: operations.UpsertEntityRequest) -> operations.U
if http_res.status_code in [200, 201]:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[dict[str, Any]])
+ out = utils.unmarshal_json(http_res.text, Optional[shared.EntityItem])
res.entity_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
elif http_res.status_code == 409:
pass
diff --git a/entity/src/epilot/entity_import.py b/entity/src/epilot/entity_import.py
new file mode 100755
index 000000000..48f5bde5a
--- /dev/null
+++ b/entity/src/epilot/entity_import.py
@@ -0,0 +1,41 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import operations
+
+class EntityImport:
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
+
+ def import_entities(self, request: operations.ImportEntitiesRequest) -> operations.ImportEntitiesResponse:
+ r"""Import Entities
+ This endpoint enables the import of entities into the platform.
+ The entities should be provided in a CSV format inside an S3 bucket.
+ This API will return the `job_id`` which can be used to fetch the status of the import process.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v1/entity:import'
+ headers = {}
+ req_content_type, data, form = utils.serialize_request_body(request, "entity_import_params", False, True, 'json')
+ if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
+ headers['content-type'] = req_content_type
+ query_params = utils.get_query_params(operations.ImportEntitiesRequest, request)
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ImportEntitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+
+ return res
+
+
\ No newline at end of file
diff --git a/entity/src/epilot/export.py b/entity/src/epilot/export.py
index 4dd6297c2..09d39e324 100755
--- a/entity/src/epilot/export.py
+++ b/entity/src/epilot/export.py
@@ -1,75 +1,39 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
from epilot.models import operations
class Export:
r"""Export and Import entities via files"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
+ sdk_configuration: SDKConfiguration
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def export_entities(self, request: operations.ExportEntitiesRequest) -> operations.ExportEntitiesResponse:
r"""exportEntities
create export file of entities
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity:export'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity:export'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "entity_search_params", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "entity_search_params", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.ExportEntitiesRequest, request)
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ExportEntitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 201:
- pass
-
- return res
-
- def import_entities(self, request: operations.ImportEntitiesRequest) -> operations.ImportEntitiesResponse:
- r"""importEntities
- import entity data from
- """
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity:import'
-
- headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "entity_import_params", 'json')
- if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
- headers['content-type'] = req_content_type
- query_params = utils.get_query_params(operations.ImportEntitiesRequest, request)
-
- client = self._security_client
-
- http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
- content_type = http_res.headers.get('Content-Type')
-
- res = operations.ImportEntitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
-
- if http_res.status_code == 201:
- pass
return res
diff --git a/entity/src/epilot/models/__init__.py b/entity/src/epilot/models/__init__.py
index 889f8adcf..36628d6cc 100755
--- a/entity/src/epilot/models/__init__.py
+++ b/entity/src/epilot/models/__init__.py
@@ -1,2 +1,3 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+# __init__.py
diff --git a/entity/src/epilot/models/errors/__init__.py b/entity/src/epilot/models/errors/__init__.py
new file mode 100755
index 000000000..cfd848441
--- /dev/null
+++ b/entity/src/epilot/models/errors/__init__.py
@@ -0,0 +1,4 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from .sdkerror import SDKError
+__all__ = ["SDKError"]
diff --git a/entity/src/epilot/models/errors/sdkerror.py b/entity/src/epilot/models/errors/sdkerror.py
new file mode 100755
index 000000000..6bb02bbd6
--- /dev/null
+++ b/entity/src/epilot/models/errors/sdkerror.py
@@ -0,0 +1,24 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests as requests_http
+
+
+class SDKError(Exception):
+ """Represents an error returned by the API."""
+ message: str
+ status_code: int
+ body: str
+ raw_response: requests_http.Response
+
+ def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response):
+ self.message = message
+ self.status_code = status_code
+ self.body = body
+ self.raw_response = raw_response
+
+ def __str__(self):
+ body = ''
+ if len(self.body) > 0:
+ body = f'\n{self.body}'
+
+ return f'{self.message}: Status {self.status_code}{body}'
diff --git a/entity/src/epilot/models/operations/__init__.py b/entity/src/epilot/models/operations/__init__.py
index 28811cc88..fc4c6d68d 100755
--- a/entity/src/epilot/models/operations/__init__.py
+++ b/entity/src/epilot/models/operations/__init__.py
@@ -14,13 +14,16 @@
from .getactivity import *
from .getentity import *
from .getentityactivityfeed import *
+from .getrelatedentitiescount import *
from .getrelations import *
from .getrelationsv2 import *
+from .getrelationsv3 import *
from .getsavedview import *
from .getschema import *
from .getschemaversions import *
from .gettaxonomy import *
from .importentities import *
+from .listfavoriteviewsforuser import *
from .listsavedviews import *
from .listschemablueprints import *
from .listschemas import *
@@ -37,4 +40,4 @@
from .updatesavedview import *
from .upsertentity import *
-__all__ = ["AddRelationsRequest","AddRelationsResponse","AttachActivityRequest","AttachActivityResponse","Autocomplete200ApplicationJSON","AutocompleteRequest","AutocompleteResponse","CreateActivityRequest","CreateActivityResponse","CreateEntityRequest","CreateEntityResponse","CreateSavedViewResponse","DeleteEntityRequest","DeleteEntityResponse","DeleteRelationRequest","DeleteRelationResponse","DeleteSavedViewRequest","DeleteSavedViewResponse","DeleteSchemaRequest","DeleteSchemaResponse","ExportEntitiesRequest","ExportEntitiesResponse","GetActivityRequest","GetActivityResponse","GetEntity200ApplicationJSON","GetEntityActivityFeed200ApplicationJSON","GetEntityActivityFeedRequest","GetEntityActivityFeedResponse","GetEntityRequest","GetEntityResponse","GetRelationsRequest","GetRelationsResponse","GetRelationsV2Request","GetRelationsV2Response","GetSavedView200ApplicationJSON","GetSavedViewRequest","GetSavedViewResponse","GetSchemaRequest","GetSchemaResponse","GetSchemaVersions200ApplicationJSON","GetSchemaVersionsRequest","GetSchemaVersionsResponse","GetTaxonomyRequest","GetTaxonomyResponse","ImportEntitiesRequest","ImportEntitiesResponse","ListSavedViews200ApplicationJSON","ListSavedViewsResponse","ListSchemaBlueprints200ApplicationJSON","ListSchemaBlueprintsResponse","ListSchemas200ApplicationJSON","ListSchemasRequest","ListSchemasResponse","ListTaxonomies200ApplicationJSON","ListTaxonomiesResponse","ListTaxonomyClassificationsForSchema200ApplicationJSON","ListTaxonomyClassificationsForSchemaRequest","ListTaxonomyClassificationsForSchemaResponse","PatchEntityRequest","PatchEntityResponse","PutSchemaRequest","PutSchemaResponse","SearchEntitiesResponse","TaxonomiesClassificationsSearch200ApplicationJSON","TaxonomiesClassificationsSearchRequest","TaxonomiesClassificationsSearchRequestBody","TaxonomiesClassificationsSearchResponse","TaxonomyAutocomplete200ApplicationJSON","TaxonomyAutocompleteRequest","TaxonomyAutocompleteResponse","UpdateClassificationsForTaxonomy200ApplicationJSON","UpdateClassificationsForTaxonomyRequest","UpdateClassificationsForTaxonomyResponse","UpdateEntityRequest","UpdateEntityResponse","UpdateRelationRequest","UpdateRelationRequestBody","UpdateRelationResponse","UpdateSavedViewRequest","UpdateSavedViewResponse","UpsertEntityRequest","UpsertEntityRequestBody","UpsertEntityResponse"]
+__all__ = ["AddRelationsRequest","AddRelationsResponse","AttachActivityRequest","AttachActivityResponse","Autocomplete200ApplicationJSON","Autocomplete200ApplicationJSONResults","AutocompleteRequest","AutocompleteResponse","CreateActivityRequest","CreateActivityResponse","CreateEntityRequest","CreateEntityResponse","CreateSavedViewResponse","DeleteEntityRequest","DeleteEntityResponse","DeleteRelationRequest","DeleteRelationResponse","DeleteSavedViewRequest","DeleteSavedViewResponse","DeleteSchemaRequest","DeleteSchemaResponse","ExportEntitiesRequest","ExportEntitiesResponse","GetActivityRequest","GetActivityResponse","GetEntity200ApplicationJSON","GetEntityActivityFeed200ApplicationJSON","GetEntityActivityFeedRequest","GetEntityActivityFeedResponse","GetEntityRequest","GetEntityResponse","GetRelatedEntitiesCountRequest","GetRelatedEntitiesCountResponse","GetRelationsRequest","GetRelationsResponse","GetRelationsV2Request","GetRelationsV2Response","GetRelationsV3Request","GetRelationsV3Response","GetSavedView200ApplicationJSON","GetSavedViewRequest","GetSavedViewResponse","GetSchemaRequest","GetSchemaResponse","GetSchemaVersions200ApplicationJSON","GetSchemaVersionsRequest","GetSchemaVersionsResponse","GetTaxonomyRequest","GetTaxonomyResponse","ImportEntitiesRequest","ImportEntitiesResponse","ListFavoriteViewsForUser200ApplicationJSON","ListFavoriteViewsForUserResponse","ListSavedViews200ApplicationJSON","ListSavedViewsResponse","ListSchemaBlueprints200ApplicationJSON","ListSchemaBlueprintsResponse","ListSchemas200ApplicationJSON","ListSchemasRequest","ListSchemasResponse","ListTaxonomies200ApplicationJSON","ListTaxonomiesResponse","ListTaxonomyClassificationsForSchema200ApplicationJSON","ListTaxonomyClassificationsForSchemaRequest","ListTaxonomyClassificationsForSchemaResponse","PatchEntityRequest","PatchEntityResponse","PutSchemaRequest","PutSchemaResponse","SearchEntitiesResponse","TaxonomiesClassificationsSearch200ApplicationJSON","TaxonomiesClassificationsSearchRequest","TaxonomiesClassificationsSearchRequestBody","TaxonomiesClassificationsSearchResponse","TaxonomyAutocomplete200ApplicationJSON","TaxonomyAutocompleteRequest","TaxonomyAutocompleteResponse","UpdateClassificationsForTaxonomy200ApplicationJSON","UpdateClassificationsForTaxonomy200ApplicationJSONDeleted","UpdateClassificationsForTaxonomyRequest","UpdateClassificationsForTaxonomyResponse","UpdateEntityRequest","UpdateEntityResponse","UpdateRelationRequest","UpdateRelationRequestBody","UpdateRelationResponse","UpdateSavedViewRequest","UpdateSavedViewResponse","UpsertEntityRequest","UpsertEntityRequestBody","UpsertEntityResponse"]
diff --git a/entity/src/epilot/models/operations/addrelations.py b/entity/src/epilot/models/operations/addrelations.py
index 5222ca473..ed0e14b80 100755
--- a/entity/src/epilot/models/operations/addrelations.py
+++ b/entity/src/epilot/models/operations/addrelations.py
@@ -4,27 +4,33 @@
import dataclasses
import requests as requests_http
from ..shared import relationitem as shared_relationitem
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class AddRelationsRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
- request_body: Optional[list[shared_relationitem.RelationItem]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Entity Type"""
+ activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ request_body: Optional[List[shared_relationitem.RelationItem]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class AddRelationsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
relation_item: Optional[shared_relationitem.RelationItem] = dataclasses.field(default=None)
- r"""Success"""
-
\ No newline at end of file
+ r"""Success"""
+
+
diff --git a/entity/src/epilot/models/operations/attachactivity.py b/entity/src/epilot/models/operations/attachactivity.py
index 7c09227f9..714a96fb3 100755
--- a/entity/src/epilot/models/operations/attachactivity.py
+++ b/entity/src/epilot/models/operations/attachactivity.py
@@ -4,24 +4,28 @@
import dataclasses
import requests as requests_http
from ..shared import activityitem as shared_activityitem
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class AttachActivityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Activity Id"""
- entities: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entities', 'style': 'form', 'explode': False }})
- r"""Comma-separated list of entities which the activity primarily concerns"""
+ r"""Activity Id"""
+ entities: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entities', 'style': 'form', 'explode': False }})
+ r"""Comma-separated list of entities which the activity primarily concerns"""
+
+
@dataclasses.dataclass
class AttachActivityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
activity_item: Optional[shared_activityitem.ActivityItem] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/autocomplete.py b/entity/src/epilot/models/operations/autocomplete.py
index 9222f6f39..63fe259b0 100755
--- a/entity/src/epilot/models/operations/autocomplete.py
+++ b/entity/src/epilot/models/operations/autocomplete.py
@@ -5,37 +5,47 @@
import requests as requests_http
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
@dataclasses.dataclass
class AutocompleteRequest:
-
attribute: str = dataclasses.field(metadata={'query_param': { 'field_name': 'attribute', 'style': 'form', 'explode': True }})
- r"""Autocomplete attribute"""
+ r"""Autocomplete attribute"""
input: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'input', 'style': 'form', 'explode': True }})
- r"""Input to autocomplete"""
- size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
- r"""Maximum number of results to return"""
+ r"""Input to autocomplete"""
+ size: Optional[int] = dataclasses.field(default=10, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ r"""Maximum number of results to return"""
slug: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'slug', 'style': 'form', 'explode': True }})
- r"""Limit results to entity schema"""
+ r"""Limit results to entity schema"""
+
+
+@dataclasses.dataclass
+class Autocomplete200ApplicationJSONResults:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class Autocomplete200ApplicationJSON:
r"""Success"""
-
- hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
- results: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+ hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
+ results: Optional[List[Union[str, bool, Dict[str, Any]]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class AutocompleteResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
autocomplete_200_application_json_object: Optional[Autocomplete200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/createactivity.py b/entity/src/epilot/models/operations/createactivity.py
index 0a2b6951a..742f54d8a 100755
--- a/entity/src/epilot/models/operations/createactivity.py
+++ b/entity/src/epilot/models/operations/createactivity.py
@@ -5,23 +5,27 @@
import requests as requests_http
from ..shared import activity as shared_activity
from ..shared import activityitem as shared_activityitem
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class CreateActivityRequest:
+ activity: Optional[shared_activity.Activity] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ entities: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entities', 'style': 'form', 'explode': False }})
+ r"""Comma-separated list of entities which the activity primarily concerns"""
- activity: Optional[shared_activity.Activity] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
- entities: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'entities', 'style': 'form', 'explode': False }})
- r"""Comma-separated list of entities which the activity primarily concerns"""
-
+
+
@dataclasses.dataclass
class CreateActivityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
activity_item: Optional[shared_activityitem.ActivityItem] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/createentity.py b/entity/src/epilot/models/operations/createentity.py
index 2fc5ae0c9..e83067531 100755
--- a/entity/src/epilot/models/operations/createentity.py
+++ b/entity/src/epilot/models/operations/createentity.py
@@ -3,27 +3,33 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import entity as shared_entity
+from ..shared import entityitem as shared_entityitem
+from typing import Optional
@dataclasses.dataclass
class CreateEntityRequest:
-
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Schema"""
+ r"""Entity Type"""
activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
- r"""Activity to include in event feed"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
- request_body: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ entity: Optional[shared_entity.Entity] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class CreateEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ entity_item: Optional[shared_entityitem.EntityItem] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/createsavedview.py b/entity/src/epilot/models/operations/createsavedview.py
index 79c8910ab..8e9a4ee9a 100755
--- a/entity/src/epilot/models/operations/createsavedview.py
+++ b/entity/src/epilot/models/operations/createsavedview.py
@@ -9,10 +9,13 @@
@dataclasses.dataclass
class CreateSavedViewResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
saved_view_item: Optional[shared_savedviewitem.SavedViewItem] = dataclasses.field(default=None)
- r"""Success"""
-
\ No newline at end of file
+ r"""Success"""
+
+
diff --git a/entity/src/epilot/models/operations/deleteentity.py b/entity/src/epilot/models/operations/deleteentity.py
index aa5b318cc..44e78a62b 100755
--- a/entity/src/epilot/models/operations/deleteentity.py
+++ b/entity/src/epilot/models/operations/deleteentity.py
@@ -8,18 +8,23 @@
@dataclasses.dataclass
class DeleteEntityRequest:
-
- id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
+ r"""Entity Type"""
activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
- r"""Activity to include in event feed"""
+ r"""Activity to include in event feed"""
+
+
@dataclasses.dataclass
class DeleteEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/deleterelation.py b/entity/src/epilot/models/operations/deleterelation.py
index 1fc1ff9cc..af8208b03 100755
--- a/entity/src/epilot/models/operations/deleterelation.py
+++ b/entity/src/epilot/models/operations/deleterelation.py
@@ -8,23 +8,29 @@
@dataclasses.dataclass
class DeleteRelationRequest:
-
attribute: str = dataclasses.field(metadata={'path_param': { 'field_name': 'attribute', 'style': 'simple', 'explode': False }})
- r"""The attribute that express meaning"""
+ r"""The attribute that express meaning"""
entity_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'entity_id', 'style': 'simple', 'explode': False }})
- r"""The attribute that express meaning"""
+ r"""The attribute that express meaning"""
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ r"""Entity Type"""
+ activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+
+
@dataclasses.dataclass
class DeleteRelationResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/deletesavedview.py b/entity/src/epilot/models/operations/deletesavedview.py
index 641140151..5f6a827c7 100755
--- a/entity/src/epilot/models/operations/deletesavedview.py
+++ b/entity/src/epilot/models/operations/deletesavedview.py
@@ -8,15 +8,19 @@
@dataclasses.dataclass
class DeleteSavedViewRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""View id"""
+ r"""View id"""
+
+
@dataclasses.dataclass
class DeleteSavedViewResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/deleteschema.py b/entity/src/epilot/models/operations/deleteschema.py
index 63e149fef..9b1ae2b9d 100755
--- a/entity/src/epilot/models/operations/deleteschema.py
+++ b/entity/src/epilot/models/operations/deleteschema.py
@@ -8,14 +8,19 @@
@dataclasses.dataclass
class DeleteSchemaRequest:
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
-
+
+
@dataclasses.dataclass
class DeleteSchemaResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/exportentities.py b/entity/src/epilot/models/operations/exportentities.py
index 0ed9440e8..18a000a1b 100755
--- a/entity/src/epilot/models/operations/exportentities.py
+++ b/entity/src/epilot/models/operations/exportentities.py
@@ -9,20 +9,24 @@
@dataclasses.dataclass
class ExportEntitiesRequest:
-
- entity_search_params: Optional[shared_entitysearchparams.EntitySearchParams] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ entity_search_params: Optional[shared_entitysearchparams.EntitySearchParams] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
is_template: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'is_template', 'style': 'form', 'explode': True }})
- r"""Pass 'true' to generate import template"""
+ r"""Pass 'true' to generate import template"""
job_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'job_id', 'style': 'form', 'explode': True }})
- r"""Export Job Id to get the result"""
+ r"""Export Job Id to get the result"""
language: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'language', 'style': 'form', 'explode': True }})
- r"""Export headers translation language"""
+ r"""Export headers translation language"""
+
+
@dataclasses.dataclass
class ExportEntitiesResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/getactivity.py b/entity/src/epilot/models/operations/getactivity.py
index ff4ef93c8..18803aa3d 100755
--- a/entity/src/epilot/models/operations/getactivity.py
+++ b/entity/src/epilot/models/operations/getactivity.py
@@ -9,25 +9,25 @@
@dataclasses.dataclass
class GetActivityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Activity Id"""
- operations_from: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'operations_from', 'style': 'form', 'explode': True }})
- r"""Pagination offset for operations
-
- """
- operations_size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'operations_size', 'style': 'form', 'explode': True }})
- r"""Maximum number of operations to include in response (default: 10)
-
- """
+ r"""Activity Id"""
+ operations_from: Optional[int] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'operations_from', 'style': 'form', 'explode': True }})
+ r"""Pagination offset for operations"""
+ operations_size: Optional[int] = dataclasses.field(default=25, metadata={'query_param': { 'field_name': 'operations_size', 'style': 'form', 'explode': True }})
+ r"""Maximum number of operations to include in response (default: 10)"""
+
+
@dataclasses.dataclass
class GetActivityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
activity_item: Optional[shared_activityitem.ActivityItem] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getentity.py b/entity/src/epilot/models/operations/getentity.py
index 00c7a6548..08d350cfc 100755
--- a/entity/src/epilot/models/operations/getentity.py
+++ b/entity/src/epilot/models/operations/getentity.py
@@ -3,37 +3,43 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entityitem as shared_entityitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetEntityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
- hydrate: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
- r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
+ r"""Entity Type"""
+ hydrate: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
+ r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetEntity200ApplicationJSON:
r"""Success"""
+ entity: Optional[shared_entityitem.EntityItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
+ relations: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
- entity: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
- relations: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class GetEntityResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_entity_200_application_json_object: Optional[GetEntity200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getentityactivityfeed.py b/entity/src/epilot/models/operations/getentityactivityfeed.py
index 545d9ca12..803be50e3 100755
--- a/entity/src/epilot/models/operations/getentityactivityfeed.py
+++ b/entity/src/epilot/models/operations/getentityactivityfeed.py
@@ -7,43 +7,50 @@
from dataclasses_json import Undefined, dataclass_json
from datetime import datetime
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetEntityActivityFeedRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
+ r"""Entity Type"""
after: Optional[datetime] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'after', 'style': 'form', 'explode': True }})
- r"""Get activities after this timestamp"""
+ r"""Get activities after this timestamp"""
before: Optional[datetime] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'before', 'style': 'form', 'explode': True }})
- r"""get activities before this timestamp"""
- from_: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
- r"""start from page"""
- size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
- r"""max number of results to return"""
+ r"""get activities before this timestamp"""
+ from_: Optional[int] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ r"""Starting page number"""
+ include_relations: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'include_relations', 'style': 'form', 'explode': True }})
+ r"""Include activities from related entities"""
+ size: Optional[int] = dataclasses.field(default=25, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ r"""max number of results to return"""
type: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }})
- r"""Activity type"""
+ r"""Filter by activity type"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetEntityActivityFeed200ApplicationJSON:
r"""Success"""
+ results: Optional[List[shared_activityitem.ActivityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+ total: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('total'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_activityitem.ActivityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- total: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('total'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class GetEntityActivityFeedResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_entity_activity_feed_200_application_json_object: Optional[GetEntityActivityFeed200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getrelatedentitiescount.py b/entity/src/epilot/models/operations/getrelatedentitiescount.py
new file mode 100755
index 000000000..ad99756ff
--- /dev/null
+++ b/entity/src/epilot/models/operations/getrelatedentitiescount.py
@@ -0,0 +1,33 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import getrelatedentitiescount as shared_getrelatedentitiescount
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class GetRelatedEntitiesCountRequest:
+ id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ r"""Entity id"""
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ exclude_schemas: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'exclude_schemas', 'style': 'form', 'explode': False }})
+ r"""Filter results to exclude schemas"""
+
+
+
+
+@dataclasses.dataclass
+class GetRelatedEntitiesCountResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ get_related_entities_count: Optional[shared_getrelatedentitiescount.GetRelatedEntitiesCount] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getrelations.py b/entity/src/epilot/models/operations/getrelations.py
index eb38b4ae3..68d8a0ba0 100755
--- a/entity/src/epilot/models/operations/getrelations.py
+++ b/entity/src/epilot/models/operations/getrelations.py
@@ -3,28 +3,42 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import relationentity as shared_relationentity
+from ..shared import relationitem as shared_relationitem
+from typing import List, Optional, Union
@dataclasses.dataclass
class GetRelationsRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
- hydrate: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
- r"""When true, expand relation items with full blown entities."""
- include_reverse: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'include_reverse', 'style': 'form', 'explode': True }})
- r"""When true, includes reverse relations in response (other entities pointing to this entity)"""
+ r"""Entity Type"""
+ exclude_schemas: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'exclude_schemas', 'style': 'form', 'explode': False }})
+ r"""Filter results to exclude schemas"""
+ from_: Optional[int] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ r"""Starting page number"""
+ hydrate: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
+ r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
+ include_reverse: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'include_reverse', 'style': 'form', 'explode': True }})
+ r"""When true, includes reverse relations in response (other entities pointing to this entity)"""
+ include_schemas: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'include_schemas', 'style': 'form', 'explode': False }})
+ r"""Filter results to only include schemas"""
+ size: Optional[int] = dataclasses.field(default=100, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ r"""Number of results to return per page"""
+
+
@dataclasses.dataclass
class GetRelationsResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ get_relations_resp: Optional[List[Union[shared_relationitem.RelationItem, shared_relationentity.RelationEntity]]] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- get_relations_resp: Optional[list[Any]] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/getrelationsv2.py b/entity/src/epilot/models/operations/getrelationsv2.py
index fc9996797..6450dd096 100755
--- a/entity/src/epilot/models/operations/getrelationsv2.py
+++ b/entity/src/epilot/models/operations/getrelationsv2.py
@@ -4,36 +4,40 @@
import dataclasses
import requests as requests_http
from ..shared import getrelationsrespwithpagination as shared_getrelationsrespwithpagination
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetRelationsV2Request:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
- fields: Optional[list[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'fields', 'style': 'form', 'explode': True }})
- r"""List of entity fields to include in results"""
- from_: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
- r"""Starting page number"""
- hydrate: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
- r"""When true, expand relation items with full blown entities."""
- include_reverse: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'include_reverse', 'style': 'form', 'explode': True }})
- r"""When true, includes reverse relations in response (other entities pointing to this entity)"""
+ r"""Entity Type"""
+ fields: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'fields', 'style': 'form', 'explode': True }})
+ r"""List of entity fields to include in results"""
+ from_: Optional[int] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ r"""Starting page number"""
+ hydrate: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
+ r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
+ include_reverse: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'include_reverse', 'style': 'form', 'explode': True }})
+ r"""When true, includes reverse relations in response (other entities pointing to this entity)"""
query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }})
- r"""Input to filter search results"""
- size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
- r"""Number of results to return per page"""
+ r"""Input to filter search results"""
+ size: Optional[int] = dataclasses.field(default=50, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ r"""Number of results to return per page"""
+
+
@dataclasses.dataclass
class GetRelationsV2Response:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_relations_resp_with_pagination: Optional[shared_getrelationsrespwithpagination.GetRelationsRespWithPagination] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getrelationsv3.py b/entity/src/epilot/models/operations/getrelationsv3.py
new file mode 100755
index 000000000..f17bdc70c
--- /dev/null
+++ b/entity/src/epilot/models/operations/getrelationsv3.py
@@ -0,0 +1,43 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import getrelationsrespwithpagination as shared_getrelationsrespwithpagination
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class GetRelationsV3Request:
+ id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
+ r"""Entity id"""
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ exclude_schemas: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'exclude_schemas', 'style': 'form', 'explode': False }})
+ r"""Filter results to exclude schemas"""
+ from_: Optional[int] = dataclasses.field(default=0, metadata={'query_param': { 'field_name': 'from', 'style': 'form', 'explode': True }})
+ r"""Starting page number"""
+ hydrate: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'hydrate', 'style': 'form', 'explode': True }})
+ r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
+ include_reverse: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'include_reverse', 'style': 'form', 'explode': True }})
+ r"""When true, includes reverse relations in response (other entities pointing to this entity)"""
+ include_schemas: Optional[List[str]] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'include_schemas', 'style': 'form', 'explode': False }})
+ r"""Filter results to only include schemas"""
+ size: Optional[int] = dataclasses.field(default=100, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
+ r"""Number of results to return per page"""
+
+
+
+
+@dataclasses.dataclass
+class GetRelationsV3Response:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ get_relations_resp_with_pagination: Optional[shared_getrelationsrespwithpagination.GetRelationsRespWithPagination] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getsavedview.py b/entity/src/epilot/models/operations/getsavedview.py
index 28f720ade..c1e54c497 100755
--- a/entity/src/epilot/models/operations/getsavedview.py
+++ b/entity/src/epilot/models/operations/getsavedview.py
@@ -11,25 +11,30 @@
@dataclasses.dataclass
class GetSavedViewRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""View id"""
+ r"""View id"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetSavedView200ApplicationJSON:
r"""Success"""
+ view: Optional[shared_savedviewitem.SavedViewItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view'), 'exclude': lambda f: f is None }})
- view: Optional[shared_savedviewitem.SavedViewItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class GetSavedViewResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_saved_view_200_application_json_object: Optional[GetSavedView200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getschema.py b/entity/src/epilot/models/operations/getschema.py
index 59ff80c70..a71e8b72d 100755
--- a/entity/src/epilot/models/operations/getschema.py
+++ b/entity/src/epilot/models/operations/getschema.py
@@ -9,17 +9,22 @@
@dataclasses.dataclass
class GetSchemaRequest:
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'id', 'style': 'form', 'explode': True }})
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'id', 'style': 'form', 'explode': True }})
-
+
+
@dataclasses.dataclass
class GetSchemaResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
entity_schema_item: Optional[shared_entityschemaitem.EntitySchemaItem] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/getschemaversions.py b/entity/src/epilot/models/operations/getschemaversions.py
index 6c7f26c56..789bae63c 100755
--- a/entity/src/epilot/models/operations/getschemaversions.py
+++ b/entity/src/epilot/models/operations/getschemaversions.py
@@ -6,30 +6,40 @@
from ..shared import entityschemaitem as shared_entityschemaitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class GetSchemaVersionsRequest:
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ drafts_from: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'drafts_from', 'style': 'form', 'explode': True }})
+ drafts_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'drafts_size', 'style': 'form', 'explode': True }})
+ versions_from: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'versions_from', 'style': 'form', 'explode': True }})
+ versions_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'versions_size', 'style': 'form', 'explode': True }})
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetSchemaVersions200ApplicationJSON:
r"""Success"""
+ drafts: Optional[List[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('drafts'), 'exclude': lambda f: f is None }})
+ versions: Optional[List[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('versions'), 'exclude': lambda f: f is None }})
- drafts: Optional[list[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('drafts'), 'exclude': lambda f: f is None }})
- versions: Optional[list[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('versions'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class GetSchemaVersionsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
get_schema_versions_200_application_json_object: Optional[GetSchemaVersions200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/gettaxonomy.py b/entity/src/epilot/models/operations/gettaxonomy.py
index c13811e44..ac56e1cf6 100755
--- a/entity/src/epilot/models/operations/gettaxonomy.py
+++ b/entity/src/epilot/models/operations/gettaxonomy.py
@@ -9,17 +9,21 @@
@dataclasses.dataclass
class GetTaxonomyRequest:
-
taxonomy_slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'taxonomySlug', 'style': 'simple', 'explode': False }})
- r"""Taxonomy slug to return taxonomy for"""
+ r"""Taxonomy slug"""
+
+
@dataclasses.dataclass
class GetTaxonomyResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
taxonomy: Optional[shared_taxonomy.Taxonomy] = dataclasses.field(default=None)
- r"""Taxonomy"""
-
\ No newline at end of file
+ r"""Taxonomy"""
+
+
diff --git a/entity/src/epilot/models/operations/importentities.py b/entity/src/epilot/models/operations/importentities.py
index b4aeac9d7..5c7ba25aa 100755
--- a/entity/src/epilot/models/operations/importentities.py
+++ b/entity/src/epilot/models/operations/importentities.py
@@ -9,16 +9,20 @@
@dataclasses.dataclass
class ImportEntitiesRequest:
-
- entity_import_params: Optional[shared_entityimportparams.EntityImportParams] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ entity_import_params: Optional[shared_entityimportparams.EntityImportParams] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
job_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'job_id', 'style': 'form', 'explode': True }})
- r"""Import Job Id to get the result"""
+ r"""The ID of the import job. This ID is used to track the progress and fetch the result of the import operation."""
+
+
@dataclasses.dataclass
class ImportEntitiesResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/listfavoriteviewsforuser.py b/entity/src/epilot/models/operations/listfavoriteviewsforuser.py
new file mode 100755
index 000000000..a24a8e82b
--- /dev/null
+++ b/entity/src/epilot/models/operations/listfavoriteviewsforuser.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import requests as requests_http
+from ..shared import savedviewitem as shared_savedviewitem
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ListFavoriteViewsForUser200ApplicationJSON:
+ r"""Success"""
+ results: Optional[List[shared_savedviewitem.SavedViewItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclasses.dataclass
+class ListFavoriteViewsForUserResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ list_favorite_views_for_user_200_application_json_object: Optional[ListFavoriteViewsForUser200ApplicationJSON] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/listsavedviews.py b/entity/src/epilot/models/operations/listsavedviews.py
index 21407a550..6d84311d7 100755
--- a/entity/src/epilot/models/operations/listsavedviews.py
+++ b/entity/src/epilot/models/operations/listsavedviews.py
@@ -6,23 +6,27 @@
from ..shared import savedviewitem as shared_savedviewitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListSavedViews200ApplicationJSON:
r"""Success"""
+ results: Optional[List[shared_savedviewitem.SavedViewItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_savedviewitem.SavedViewItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListSavedViewsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_saved_views_200_application_json_object: Optional[ListSavedViews200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/listschemablueprints.py b/entity/src/epilot/models/operations/listschemablueprints.py
index 6d8b5b024..9751d523e 100755
--- a/entity/src/epilot/models/operations/listschemablueprints.py
+++ b/entity/src/epilot/models/operations/listschemablueprints.py
@@ -6,23 +6,27 @@
from ..shared import entityschemaitem as shared_entityschemaitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListSchemaBlueprints200ApplicationJSON:
r"""Success"""
+ results: Optional[List[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListSchemaBlueprintsResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_schema_blueprints_200_application_json_object: Optional[ListSchemaBlueprints200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/listschemas.py b/entity/src/epilot/models/operations/listschemas.py
index 2614845f5..ff903bc7e 100755
--- a/entity/src/epilot/models/operations/listschemas.py
+++ b/entity/src/epilot/models/operations/listschemas.py
@@ -6,30 +6,35 @@
from ..shared import entityschemaitem as shared_entityschemaitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class ListSchemasRequest:
+ unpublished: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'unpublished', 'style': 'form', 'explode': True }})
+ r"""Return unpublished draft schemas"""
- unpublished: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'unpublished', 'style': 'form', 'explode': True }})
- r"""Return unpublished draft schemas"""
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListSchemas200ApplicationJSON:
r"""Success"""
+ results: Optional[List[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_entityschemaitem.EntitySchemaItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListSchemasResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_schemas_200_application_json_object: Optional[ListSchemas200ApplicationJSON] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/listtaxonomies.py b/entity/src/epilot/models/operations/listtaxonomies.py
index 509636d7c..2cc99a3df 100755
--- a/entity/src/epilot/models/operations/listtaxonomies.py
+++ b/entity/src/epilot/models/operations/listtaxonomies.py
@@ -6,23 +6,27 @@
from ..shared import taxonomy as shared_taxonomy
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListTaxonomies200ApplicationJSON:
r"""Returns list of taxonomies in an organisation"""
+ results: Optional[List[shared_taxonomy.Taxonomy]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_taxonomy.Taxonomy]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListTaxonomiesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_taxonomies_200_application_json_object: Optional[ListTaxonomies200ApplicationJSON] = dataclasses.field(default=None)
- r"""Returns list of taxonomies in an organisation"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Returns list of taxonomies in an organisation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/listtaxonomyclassificationsforschema.py b/entity/src/epilot/models/operations/listtaxonomyclassificationsforschema.py
index 0fbbb0ea4..b5694e875 100755
--- a/entity/src/epilot/models/operations/listtaxonomyclassificationsforschema.py
+++ b/entity/src/epilot/models/operations/listtaxonomyclassificationsforschema.py
@@ -6,32 +6,39 @@
from ..shared import taxonomyclassification as shared_taxonomyclassification
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class ListTaxonomyClassificationsForSchemaRequest:
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ taxonomy_slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'taxonomySlug', 'style': 'simple', 'explode': False }})
+ r"""Taxonomy slug"""
+ query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }})
+ size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- taxonomy_slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'taxonomySlug', 'style': 'simple', 'explode': False }})
- query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }})
- size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ListTaxonomyClassificationsForSchema200ApplicationJSON:
r"""List of taxonomy classifications"""
+ results: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class ListTaxonomyClassificationsForSchemaResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
list_taxonomy_classifications_for_schema_200_application_json_object: Optional[ListTaxonomyClassificationsForSchema200ApplicationJSON] = dataclasses.field(default=None)
- r"""List of taxonomy classifications"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""List of taxonomy classifications"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/patchentity.py b/entity/src/epilot/models/operations/patchentity.py
index 7c780fa34..065598c70 100755
--- a/entity/src/epilot/models/operations/patchentity.py
+++ b/entity/src/epilot/models/operations/patchentity.py
@@ -3,31 +3,37 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import entity as shared_entity
+from ..shared import entityitem as shared_entityitem
+from typing import Optional
@dataclasses.dataclass
class PatchEntityRequest:
-
+ entity: shared_entity.Entity = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity Id"""
- request_body: dict[str, Any] = dataclasses.field(metadata={'request': { 'media_type': 'application/json' }})
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Schema"""
+ r"""Entity Type"""
activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
- r"""Activity to include in event feed"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for the patch entity to become available in Search API. Useful for large migrations"""
- dry_run: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'dry_run', 'style': 'form', 'explode': True }})
- r"""Dry Run mode = returns the patch result but doesn't perform the patch."""
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ dry_run: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'dry_run', 'style': 'form', 'explode': True }})
+ r"""Dry Run mode = return results but does not perform the operation."""
+
+
@dataclasses.dataclass
class PatchEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ entity_item: Optional[shared_entityitem.EntityItem] = dataclasses.field(default=None)
+ r"""Entity was updated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""Entity was updated"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/putschema.py b/entity/src/epilot/models/operations/putschema.py
index 3d4303034..898ee5c07 100755
--- a/entity/src/epilot/models/operations/putschema.py
+++ b/entity/src/epilot/models/operations/putschema.py
@@ -10,18 +10,23 @@
@dataclasses.dataclass
class PutSchemaRequest:
+ slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
+ r"""Entity Type"""
+ draft: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'draft', 'style': 'form', 'explode': True }})
+ entity_schema: Optional[shared_entityschema.EntitySchema] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
- slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- draft: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'draft', 'style': 'form', 'explode': True }})
- entity_schema: Optional[shared_entityschema.EntitySchema] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
-
+
+
@dataclasses.dataclass
class PutSchemaResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
entity_schema_item: Optional[shared_entityschemaitem.EntitySchemaItem] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
+
+
diff --git a/entity/src/epilot/models/operations/searchentities.py b/entity/src/epilot/models/operations/searchentities.py
index fcfa66037..5ae7b7c19 100755
--- a/entity/src/epilot/models/operations/searchentities.py
+++ b/entity/src/epilot/models/operations/searchentities.py
@@ -9,12 +9,15 @@
@dataclasses.dataclass
class SearchEntitiesResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
entity_search_results: Optional[shared_entitysearchresults.EntitySearchResults] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
search_entities_200_text_csv_string: Optional[str] = dataclasses.field(default=None)
- r"""Success"""
-
\ No newline at end of file
+ r"""Success"""
+
+
diff --git a/entity/src/epilot/models/operations/taxonomiesclassificationssearch.py b/entity/src/epilot/models/operations/taxonomiesclassificationssearch.py
index da647f8b9..88efa8d53 100755
--- a/entity/src/epilot/models/operations/taxonomiesclassificationssearch.py
+++ b/entity/src/epilot/models/operations/taxonomiesclassificationssearch.py
@@ -6,38 +6,44 @@
from ..shared import taxonomyclassification as shared_taxonomyclassification
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class TaxonomiesClassificationsSearchRequestBody:
+ classification_ids: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('classificationIds'), 'exclude': lambda f: f is None }})
- classification_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('classificationIds'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class TaxonomiesClassificationsSearchRequest:
-
taxonomy_slug: str = dataclasses.field(metadata={'query_param': { 'field_name': 'taxonomySlug', 'style': 'form', 'explode': True }})
- r"""Taxonomy slug"""
- request_body: Optional[TaxonomiesClassificationsSearchRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Taxonomy slug"""
+ request_body: Optional[TaxonomiesClassificationsSearchRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class TaxonomiesClassificationsSearch200ApplicationJSON:
r"""Returns list of taxonomy classifications"""
-
- results: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+ results: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class TaxonomiesClassificationsSearchResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
taxonomies_classifications_search_200_application_json_object: Optional[TaxonomiesClassificationsSearch200ApplicationJSON] = dataclasses.field(default=None)
- r"""Returns list of taxonomy classifications"""
-
\ No newline at end of file
+ r"""Returns list of taxonomy classifications"""
+
+
diff --git a/entity/src/epilot/models/operations/taxonomyautocomplete.py b/entity/src/epilot/models/operations/taxonomyautocomplete.py
index 93ec92414..a971968a8 100755
--- a/entity/src/epilot/models/operations/taxonomyautocomplete.py
+++ b/entity/src/epilot/models/operations/taxonomyautocomplete.py
@@ -6,34 +6,39 @@
from ..shared import taxonomyclassification as shared_taxonomyclassification
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclasses.dataclass
class TaxonomyAutocompleteRequest:
-
taxonomy_slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'taxonomySlug', 'style': 'simple', 'explode': False }})
- r"""Limit results to slug"""
+ r"""Taxonomy slug"""
query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }})
- r"""Input to autocomplete"""
+ r"""Input to autocomplete"""
size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'size', 'style': 'form', 'explode': True }})
- r"""Minimum number of results to return"""
+ r"""Minimum number of results to return"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class TaxonomyAutocomplete200ApplicationJSON:
r"""Taxonomy classifications"""
+ results: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- results: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class TaxonomyAutocompleteResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
taxonomy_autocomplete_200_application_json_object: Optional[TaxonomyAutocomplete200ApplicationJSON] = dataclasses.field(default=None)
- r"""Taxonomy classifications"""
-
\ No newline at end of file
+ r"""Taxonomy classifications"""
+
+
diff --git a/entity/src/epilot/models/operations/updateclassificationsfortaxonomy.py b/entity/src/epilot/models/operations/updateclassificationsfortaxonomy.py
index d896cd4db..498159ffe 100755
--- a/entity/src/epilot/models/operations/updateclassificationsfortaxonomy.py
+++ b/entity/src/epilot/models/operations/updateclassificationsfortaxonomy.py
@@ -7,33 +7,43 @@
from ..shared import taxonomyclassification as shared_taxonomyclassification
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclasses.dataclass
class UpdateClassificationsForTaxonomyRequest:
-
taxonomy_slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'taxonomySlug', 'style': 'simple', 'explode': False }})
- r"""Taxonomy slug"""
- classifications_update: Optional[shared_classificationsupdate.ClassificationsUpdate] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Taxonomy slug"""
+ classifications_update: Optional[shared_classificationsupdate.ClassificationsUpdate] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
+@dataclasses.dataclass
+class UpdateClassificationsForTaxonomy200ApplicationJSONDeleted:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpdateClassificationsForTaxonomy200ApplicationJSON:
r"""Taxonomies classifications"""
-
- created: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created'), 'exclude': lambda f: f is None }})
- deleted: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deleted'), 'exclude': lambda f: f is None }})
- updated: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated'), 'exclude': lambda f: f is None }})
+ created: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created'), 'exclude': lambda f: f is None }})
+ deleted: Optional[UpdateClassificationsForTaxonomy200ApplicationJSONDeleted] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deleted'), 'exclude': lambda f: f is None }})
+ updated: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated'), 'exclude': lambda f: f is None }})
+
+
@dataclasses.dataclass
class UpdateClassificationsForTaxonomyResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
update_classifications_for_taxonomy_200_application_json_object: Optional[UpdateClassificationsForTaxonomy200ApplicationJSON] = dataclasses.field(default=None)
- r"""Taxonomies classifications"""
-
\ No newline at end of file
+ r"""Taxonomies classifications"""
+
+
diff --git a/entity/src/epilot/models/operations/updateentity.py b/entity/src/epilot/models/operations/updateentity.py
index 6694cb83e..d94c60888 100755
--- a/entity/src/epilot/models/operations/updateentity.py
+++ b/entity/src/epilot/models/operations/updateentity.py
@@ -3,29 +3,35 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
-from typing import Any, Optional
+from ..shared import entity as shared_entity
+from ..shared import entityitem as shared_entityitem
+from typing import Optional
@dataclasses.dataclass
class UpdateEntityRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
+ r"""Entity Type"""
activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
- r"""Activity to include in event feed"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
- request_body: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ entity: Optional[shared_entity.Entity] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class UpdateEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ entity_item: Optional[shared_entityitem.EntityItem] = dataclasses.field(default=None)
+ r"""Success"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""Success"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/operations/updaterelation.py b/entity/src/epilot/models/operations/updaterelation.py
index 2a087ea36..a8837bff6 100755
--- a/entity/src/epilot/models/operations/updaterelation.py
+++ b/entity/src/epilot/models/operations/updaterelation.py
@@ -6,38 +6,45 @@
from ..shared import relationitem as shared_relationitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpdateRelationRequestBody:
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
- tags: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
-
+
+
@dataclasses.dataclass
class UpdateRelationRequest:
-
attribute: str = dataclasses.field(metadata={'path_param': { 'field_name': 'attribute', 'style': 'simple', 'explode': False }})
- r"""The attribute that express meaning"""
+ r"""The attribute that express meaning"""
entity_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'entity_id', 'style': 'simple', 'explode': False }})
- r"""The attribute that express meaning"""
+ r"""The attribute that express meaning"""
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""Entity id"""
+ r"""Entity id"""
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Type"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
- request_body: Optional[UpdateRelationRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Entity Type"""
+ activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ request_body: Optional[UpdateRelationRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class UpdateRelationResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
relation_item: Optional[shared_relationitem.RelationItem] = dataclasses.field(default=None)
- r"""Success"""
-
\ No newline at end of file
+ r"""Success"""
+
+
diff --git a/entity/src/epilot/models/operations/updatesavedview.py b/entity/src/epilot/models/operations/updatesavedview.py
index 108d00cfe..cf067bb92 100755
--- a/entity/src/epilot/models/operations/updatesavedview.py
+++ b/entity/src/epilot/models/operations/updatesavedview.py
@@ -10,18 +10,22 @@
@dataclasses.dataclass
class UpdateSavedViewRequest:
-
id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }})
- r"""View id"""
- saved_view: Optional[shared_savedview.SavedView] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""View id"""
+ saved_view: Optional[shared_savedview.SavedView] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class UpdateSavedViewResponse:
-
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
saved_view_item: Optional[shared_savedviewitem.SavedViewItem] = dataclasses.field(default=None)
- r"""Success"""
-
\ No newline at end of file
+ r"""Success"""
+
+
diff --git a/entity/src/epilot/models/operations/upsertentity.py b/entity/src/epilot/models/operations/upsertentity.py
index 4a71ecaa6..ea196ff27 100755
--- a/entity/src/epilot/models/operations/upsertentity.py
+++ b/entity/src/epilot/models/operations/upsertentity.py
@@ -3,39 +3,46 @@
from __future__ import annotations
import dataclasses
import requests as requests_http
+from ..shared import entity as shared_entity
+from ..shared import entityitem as shared_entityitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UpsertEntityRequestBody:
+ entity: shared_entity.Entity = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity') }})
+ unique_key: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('unique_key') }})
- entity: dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity') }})
- unique_key: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('unique_key') }})
-
+
+
@dataclasses.dataclass
class UpsertEntityRequest:
-
slug: str = dataclasses.field(metadata={'path_param': { 'field_name': 'slug', 'style': 'simple', 'explode': False }})
- r"""Entity Schema"""
+ r"""Entity Type"""
activity_id: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'activity_id', 'style': 'form', 'explode': True }})
- r"""Activity to include in event feed"""
- async_: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
- r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
- dry_run: Optional[bool] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'dry_run', 'style': 'form', 'explode': True }})
- r"""Dry Run mode = return matched entities but don't update them."""
- request_body: Optional[UpsertEntityRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+ r"""Activity to include in event feed"""
+ async_: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'async', 'style': 'form', 'explode': True }})
+ r"""Don't wait for updated entity to become available in Search API. Useful for large migrations"""
+ dry_run: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'dry_run', 'style': 'form', 'explode': True }})
+ r"""Dry Run mode = return results but does not perform the operation."""
+ request_body: Optional[UpsertEntityRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }})
+
+
@dataclasses.dataclass
class UpsertEntityResponse:
+ content_type: str = dataclasses.field()
+ r"""HTTP response content type for this operation"""
+ status_code: int = dataclasses.field()
+ r"""HTTP response status code for this operation"""
+ entity_item: Optional[shared_entityitem.EntityItem] = dataclasses.field(default=None)
+ r"""Entity was updated"""
+ raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
+ r"""Raw HTTP response; suitable for custom response parsing"""
- content_type: str = dataclasses.field()
- status_code: int = dataclasses.field()
- entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None)
- r"""Entity was updated"""
- raw_response: Optional[requests_http.Response] = dataclasses.field(default=None)
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/__init__.py b/entity/src/epilot/models/shared/__init__.py
index f60cdfc56..8b60bddb1 100755
--- a/entity/src/epilot/models/shared/__init__.py
+++ b/entity/src/epilot/models/shared/__init__.py
@@ -1,6 +1,7 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
from .activity import *
+from .activitycallercontext import *
from .activityitem import *
from .addressrelationattribute import *
from .automationattribute import *
@@ -11,19 +12,24 @@
from .countryattribute import *
from .currencyattribute import *
from .dateattribute import *
+from .entity import *
+from .entityacl import *
+from .entityaction import *
from .entitycapability import *
from .entitydefaultcreate import *
from .entitydefaultedit import *
from .entitydefaulttable import *
from .entityimportparams import *
+from .entityitem import *
from .entityoperation import *
+from .entityowner import *
from .entityschema import *
from .entityschemaitem import *
from .entitysearchparams import *
from .entitysearchresults import *
from .entityviewdisabled import *
from .fileattribute import *
-from .getrelationsresp import *
+from .getrelatedentitiescount import *
from .getrelationsrespwithpagination import *
from .internalattribute import *
from .internaluserattribute import *
@@ -32,11 +38,13 @@
from .multiselectattribute import *
from .numberattribute import *
from .orderedlistattribute import *
+from .partnerorganisationattribute import *
from .partnerstatusattribute import *
from .paymentmethodrelationattribute import *
from .purposeattribute import *
from .redirectentityview import *
from .relationattribute import *
+from .relationentity import *
from .relationitem import *
from .repeatableattribute import *
from .savedview import *
@@ -54,4 +62,4 @@
from .textattribute import *
from .userrelationattribute import *
-__all__ = ["Activity","ActivityItem","AddressRelationAttribute","AddressRelationAttributeTypeEnum","AutomationAttribute","AutomationAttributeTypeEnum","BooleanAttribute","BooleanAttributeTypeEnum","ClassificationsUpdate","ComputedAttribute","ComputedAttributeTypeEnum","ConsentAttribute","ConsentAttributeTypeEnum","CountryAttribute","CountryAttributeTypeEnum","CurrencyAttribute","CurrencyAttributeCurrency1","CurrencyAttributeTypeEnum","DateAttribute","DateAttributeTypeEnum","EntityCapability","EntityDefaultCreate","EntityDefaultCreateTableMenuOptions","EntityDefaultCreateViewTypeEnum","EntityDefaultEdit","EntityDefaultEditTableMenuOptions","EntityDefaultEditViewTypeEnum","EntityDefaultTable","EntityDefaultTableDropdownItems1","EntityDefaultTableDropdownItems1TypeEnum","EntityDefaultTableDropdownItems2","EntityDefaultTableDropdownItems2TypeEnum","EntityDefaultTableNavbarActions","EntityDefaultTableNavbarActionsOptions","EntityDefaultTableViewTypeEnum","EntityImportParams","EntityImportParamsS3Reference","EntityOperation","EntityOperationDiff","EntityOperationOperationEnum","EntityOperationParams","EntitySchema","EntitySchemaGroupSettings","EntitySchemaGroupSettingsInfoTooltipTitle","EntitySchemaItem","EntitySchemaItemGroupSettings","EntitySchemaItemGroupSettingsInfoTooltipTitle","EntitySchemaItemSource","EntitySchemaItemUIConfig","EntitySchemaItemUIConfigListItem","EntitySchemaItemUIConfigSharing","EntitySchemaUIConfig","EntitySchemaUIConfigListItem","EntitySchemaUIConfigSharing","EntitySearchParams","EntitySearchResults","EntityViewDisabled","EntityViewDisabledViewTypeEnum","FileAttribute","FileAttributeDefaultAccessControlEnum","FileAttributeTypeEnum","GetRelationsResp","GetRelationsRespWithPagination","InternalAttribute","InternalAttributeTypeEnum","InternalUserAttribute","InternalUserAttributeTypeEnum","InvitationEmailAttribute","InvitationEmailAttributeTypeEnum","LinkAttribute","LinkAttributeTypeEnum","MultiSelectAttribute","MultiSelectAttributeOptions2","MultiSelectAttributeTypeEnum","NumberAttribute","NumberAttributeTypeEnum","OrderedListAttribute","OrderedListAttributeTypeEnum","PartnerStatusAttribute","PartnerStatusAttributeTypeEnum","PaymentMethodRelationAttribute","PaymentMethodRelationAttributeTypeEnum","PurposeAttribute","PurposeAttributeTypeEnum","RedirectEntityView","RedirectEntityViewViewTypeEnum","RelationAttribute","RelationAttributeActions","RelationAttributeActionsActionTypeEnum","RelationAttributeDrawerSizeEnum","RelationAttributeEditModeEnum","RelationAttributeRelationAffinityModeEnum","RelationAttributeRelationTypeEnum","RelationAttributeTypeEnum","RelationItem","RepeatableAttribute","RepeatableAttributeRelationAffinityModeEnum","RepeatableAttributeTypeEnum","SavedView","SavedViewCreatedBy1","SavedViewItem","SavedViewItemCreatedBy1","SearchMappings","SearchMappingsTypeEnum","Security","SelectAttribute","SelectAttributeOptions1","SelectAttributeTypeEnum","SequenceAttribute","SequenceAttributeTypeEnum","StatusAttribute","StatusAttributeOptions2","StatusAttributeTypeEnum","SummaryAttribute","SummaryField","TagsAttribute","TagsAttributeTypeEnum","Taxonomy","TaxonomyClassification","TextAttribute","TextAttributeTypeEnum","UserRelationAttribute","UserRelationAttributeTypeEnum"]
+__all__ = ["Activity","ActivityCallerContext","ActivityCallerContextEpilotAuth","ActivityCallerContextEpilotAuthToken","ActivityItem","AddressRelationAttribute","AddressRelationAttributeConstraints","AddressRelationAttributeInfoHelpers","AddressRelationAttributeType","AutomationAttribute","AutomationAttributeConstraints","AutomationAttributeInfoHelpers","AutomationAttributeType","BooleanAttribute","BooleanAttributeConstraints","BooleanAttributeInfoHelpers","BooleanAttributeType","ClassificationsUpdate","ComputedAttribute","ComputedAttributeConstraints","ComputedAttributeInfoHelpers","ComputedAttributeType","ConsentAttribute","ConsentAttributeConstraints","ConsentAttributeInfoHelpers","ConsentAttributeType","CountryAttribute","CountryAttributeConstraints","CountryAttributeInfoHelpers","CountryAttributeType","CurrencyAttribute","CurrencyAttributeConstraints","CurrencyAttributeCurrency","CurrencyAttributeCurrency1","CurrencyAttributeInfoHelpers","CurrencyAttributeType","DateAttribute","DateAttributeConstraints","DateAttributeInfoHelpers","DateAttributeType","Entity","EntityACL","EntityAction","EntityCapability","EntityCapabilityUIHooks","EntityCapabilityUIHooksRequiredPermission","EntityDefaultCreate","EntityDefaultCreateViewType","EntityDefaultEdit","EntityDefaultEditViewType","EntityDefaultTable","EntityDefaultTableDropdownItems","EntityDefaultTableDropdownItems1","EntityDefaultTableDropdownItems1Type","EntityDefaultTableDropdownItems2","EntityDefaultTableDropdownItems2Type","EntityDefaultTableNavbarActions","EntityDefaultTableNavbarActionsOptions","EntityDefaultTableNavbarActionsOptionsParams","EntityDefaultTableRowActions","EntityDefaultTableViewType","EntityImportParams","EntityImportParamsS3Reference","EntityItem","EntityOperation","EntityOperationDiff","EntityOperationOperation","EntityOperationParams","EntityOperationPayload","EntityOwner","EntitySchema","EntitySchemaGroupSettings","EntitySchemaGroupSettingsInfoTooltipTitle","EntitySchemaItem","EntitySchemaItemGroupSettings","EntitySchemaItemGroupSettingsInfoTooltipTitle","EntitySchemaItemLayoutSettings","EntitySchemaItemSource","EntitySchemaItemUIConfig","EntitySchemaItemUIConfigCreateView","EntitySchemaItemUIConfigEditView","EntitySchemaItemUIConfigListItem","EntitySchemaItemUIConfigListItemSummaryAttributes","EntitySchemaItemUIConfigSharing","EntitySchemaItemUIConfigSingleView","EntitySchemaItemUIConfigTableView","EntitySchemaLayoutSettings","EntitySchemaUIConfig","EntitySchemaUIConfigCreateView","EntitySchemaUIConfigEditView","EntitySchemaUIConfigListItem","EntitySchemaUIConfigListItemSummaryAttributes","EntitySchemaUIConfigSharing","EntitySchemaUIConfigSingleView","EntitySchemaUIConfigTableView","EntitySearchParams","EntitySearchParamsAggs","EntitySearchResults","EntitySearchResultsAggregations","EntityViewDisabled","EntityViewDisabledViewType","FileAttribute","FileAttributeConstraints","FileAttributeDefaultAccessControl","FileAttributeInfoHelpers","FileAttributeType","GetRelatedEntitiesCount","GetRelationsRespWithPagination","InternalAttribute","InternalAttributeConstraints","InternalAttributeInfoHelpers","InternalAttributeType","InternalUserAttribute","InternalUserAttributeConstraints","InternalUserAttributeInfoHelpers","InternalUserAttributeType","InvitationEmailAttribute","InvitationEmailAttributeConstraints","InvitationEmailAttributeInfoHelpers","InvitationEmailAttributeType","LinkAttribute","LinkAttributeConstraints","LinkAttributeInfoHelpers","LinkAttributeType","MultiSelectAttribute","MultiSelectAttributeConstraints","MultiSelectAttributeInfoHelpers","MultiSelectAttributeOptions","MultiSelectAttributeOptions2","MultiSelectAttributeType","NumberAttribute","NumberAttributeConstraints","NumberAttributeInfoHelpers","NumberAttributeType","OrderedListAttribute","OrderedListAttributeConstraints","OrderedListAttributeInfoHelpers","OrderedListAttributeType","PartnerOrganisationAttribute","PartnerOrganisationAttributeConstraints","PartnerOrganisationAttributeInfoHelpers","PartnerOrganisationAttributeType","PartnerStatusAttribute","PartnerStatusAttributeConstraints","PartnerStatusAttributeInfoHelpers","PartnerStatusAttributeType","PaymentMethodRelationAttribute","PaymentMethodRelationAttributeConstraints","PaymentMethodRelationAttributeInfoHelpers","PaymentMethodRelationAttributeType","PurposeAttribute","PurposeAttributeConstraints","PurposeAttributeInfoHelpers","PurposeAttributeType","RedirectEntityView","RedirectEntityViewViewType","RelationAttribute","RelationAttributeActions","RelationAttributeActionsActionType","RelationAttributeActionsNewEntityItem","RelationAttributeConstraints","RelationAttributeDrawerSize","RelationAttributeEditMode","RelationAttributeInfoHelpers","RelationAttributeRelationAffinityMode","RelationAttributeRelationType","RelationAttributeSummaryFields","RelationAttributeType","RelationEntity","RelationItem","RepeatableAttribute","RepeatableAttributeConstraints","RepeatableAttributeInfoHelpers","RepeatableAttributeRelationAffinityMode","RepeatableAttributeType","SavedView","SavedViewCreatedBy","SavedViewCreatedBy1","SavedViewCreatedBy2","SavedViewCreatedBy2Source","SavedViewItem","SavedViewItemCreatedBy","SavedViewItemCreatedBy1","SavedViewItemCreatedBy2","SavedViewItemCreatedBy2Source","SearchMappings","SearchMappingsType","Security","SelectAttribute","SelectAttributeConstraints","SelectAttributeInfoHelpers","SelectAttributeOptions","SelectAttributeOptions1","SelectAttributeType","SequenceAttribute","SequenceAttributeConstraints","SequenceAttributeInfoHelpers","SequenceAttributeType","StatusAttribute","StatusAttributeConstraints","StatusAttributeInfoHelpers","StatusAttributeOptions","StatusAttributeOptions2","StatusAttributeType","SummaryAttribute","SummaryField","TagsAttribute","TagsAttributeConstraints","TagsAttributeInfoHelpers","TagsAttributeType","Taxonomy","TaxonomyClassification","TextAttribute","TextAttributeConstraints","TextAttributeInfoHelpers","TextAttributeType","UserRelationAttribute","UserRelationAttributeConstraints","UserRelationAttributeInfoHelpers","UserRelationAttributeType"]
diff --git a/entity/src/epilot/models/shared/activity.py b/entity/src/epilot/models/shared/activity.py
index 358dd431f..6f7a568bf 100755
--- a/entity/src/epilot/models/shared/activity.py
+++ b/entity/src/epilot/models/shared/activity.py
@@ -4,17 +4,17 @@
import dataclasses
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class Activity:
-
message: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }})
- r"""Message for activity. Supports handlebars syntax."""
+ r"""Message for activity. Supports handlebars syntax."""
title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title') }})
- r"""Title for activity. Supports handlebars syntax."""
- type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
- payload: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Title for activity. Supports handlebars syntax."""
+ type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ payload: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/activitycallercontext.py b/entity/src/epilot/models/shared/activitycallercontext.py
new file mode 100755
index 000000000..9d7333dd9
--- /dev/null
+++ b/entity/src/epilot/models/shared/activitycallercontext.py
@@ -0,0 +1,35 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityCallerContextEpilotAuthToken:
+ cognito_username: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cognito:username'), 'exclude': lambda f: f is None }})
+ custom_ivy_user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom:ivy_user_id'), 'exclude': lambda f: f is None }})
+ email: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('email'), 'exclude': lambda f: f is None }})
+ sub: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sub'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityCallerContextEpilotAuth:
+ token: Optional[ActivityCallerContextEpilotAuthToken] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('token'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ActivityCallerContext:
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ epilot_auth: Optional[ActivityCallerContextEpilotAuth] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('EpilotAuth'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/activityitem.py b/entity/src/epilot/models/shared/activityitem.py
index 51170003f..944040e49 100755
--- a/entity/src/epilot/models/shared/activityitem.py
+++ b/entity/src/epilot/models/shared/activityitem.py
@@ -3,30 +3,29 @@
from __future__ import annotations
import dataclasses
import dateutil.parser
+from ..shared import activitycallercontext as shared_activitycallercontext
from ..shared import entityoperation as shared_entityoperation
from dataclasses_json import Undefined, dataclass_json
from datetime import datetime
from epilot import utils
-from marshmallow import fields
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ActivityItem:
- r"""Success"""
-
message: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }})
- r"""Message for activity. Supports handlebars syntax."""
+ r"""Message for activity. Supports handlebars syntax."""
title: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title') }})
- r"""Title for activity. Supports handlebars syntax."""
- type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ r"""Title for activity. Supports handlebars syntax."""
+ type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id'), 'exclude': lambda f: f is None }})
- r"""See https://github.com/ulid/spec"""
- caller: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('caller'), 'exclude': lambda f: f is None }})
- operations: Optional[list[shared_entityoperation.EntityOperation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('operations'), 'exclude': lambda f: f is None }})
+ r"""See https://github.com/ulid/spec"""
+ caller: Optional[shared_activitycallercontext.ActivityCallerContext] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('caller'), 'exclude': lambda f: f is None }})
+ operations: Optional[List[shared_entityoperation.EntityOperation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('operations'), 'exclude': lambda f: f is None }})
operations_total: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('operations_total'), 'exclude': lambda f: f is None }})
- r"""Count of total operations attached to this activity"""
- payload: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
- timestamp: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Count of total operations attached to this activity"""
+ payload: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
+ timestamp: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/addressrelationattribute.py b/entity/src/epilot/models/shared/addressrelationattribute.py
index 579077a65..7d5bb6cc0 100755
--- a/entity/src/epilot/models/shared/addressrelationattribute.py
+++ b/entity/src/epilot/models/shared/addressrelationattribute.py
@@ -5,62 +5,97 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class AddressRelationAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class AddressRelationAttributeTypeEnum(str, Enum):
- RELATION_ADDRESS = "relation_address"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class AddressRelationAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class AddressRelationAttributeType(str, Enum):
+ RELATION_ADDRESS = 'relation_address'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class AddressRelationAttribute:
r"""Reference to an address attribute of another entity"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[AddressRelationAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[AddressRelationAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[AddressRelationAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[AddressRelationAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/automationattribute.py b/entity/src/epilot/models/shared/automationattribute.py
index e13f4b398..87e3f5953 100755
--- a/entity/src/epilot/models/shared/automationattribute.py
+++ b/entity/src/epilot/models/shared/automationattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class AutomationAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class AutomationAttributeTypeEnum(str, Enum):
- AUTOMATION = "automation"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class AutomationAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class AutomationAttributeType(str, Enum):
+ AUTOMATION = 'automation'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class AutomationAttribute:
r"""Automation entity"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[AutomationAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[AutomationAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[AutomationAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[AutomationAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/booleanattribute.py b/entity/src/epilot/models/shared/booleanattribute.py
index 1f10155ec..8afee7c5f 100755
--- a/entity/src/epilot/models/shared/booleanattribute.py
+++ b/entity/src/epilot/models/shared/booleanattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class BooleanAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class BooleanAttributeTypeEnum(str, Enum):
- BOOLEAN = "boolean"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class BooleanAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class BooleanAttributeType(str, Enum):
+ BOOLEAN = 'boolean'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class BooleanAttribute:
r"""Yes / No Toggle"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[BooleanAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[BooleanAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[BooleanAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[BooleanAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/classificationsupdate.py b/entity/src/epilot/models/shared/classificationsupdate.py
index 555d7e3da..243ca5326 100755
--- a/entity/src/epilot/models/shared/classificationsupdate.py
+++ b/entity/src/epilot/models/shared/classificationsupdate.py
@@ -5,14 +5,14 @@
from ..shared import taxonomyclassification as shared_taxonomyclassification
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ClassificationsUpdate:
+ create: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create'), 'exclude': lambda f: f is None }})
+ delete: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('delete'), 'exclude': lambda f: f is None }})
+ update: Optional[List[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('update'), 'exclude': lambda f: f is None }})
- create: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create'), 'exclude': lambda f: f is None }})
- delete: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('delete'), 'exclude': lambda f: f is None }})
- update: Optional[list[shared_taxonomyclassification.TaxonomyClassification]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('update'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/computedattribute.py b/entity/src/epilot/models/shared/computedattribute.py
index 3e06d0228..4f2a20865 100755
--- a/entity/src/epilot/models/shared/computedattribute.py
+++ b/entity/src/epilot/models/shared/computedattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class ComputedAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class ComputedAttributeTypeEnum(str, Enum):
- COMPUTED = "computed"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ComputedAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class ComputedAttributeType(str, Enum):
+ COMPUTED = 'computed'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ComputedAttribute:
r"""An attribute that is computed from the entity data. For more details on how to use them, check the docs [here](https://e-pilot.atlassian.net/wiki/spaces/EO/pages/5642977476/How+To+Computed+Schema+Attributes)"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[ComputedAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[ComputedAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[ComputedAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[ComputedAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/consentattribute.py b/entity/src/epilot/models/shared/consentattribute.py
index ac604395e..cb3c865ba 100755
--- a/entity/src/epilot/models/shared/consentattribute.py
+++ b/entity/src/epilot/models/shared/consentattribute.py
@@ -5,63 +5,98 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class ConsentAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class ConsentAttributeTypeEnum(str, Enum):
- CONSENT = "consent"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class ConsentAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class ConsentAttributeType(str, Enum):
+ CONSENT = 'consent'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class ConsentAttribute:
r"""Consent Management"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- topic: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic') }})
- type: ConsentAttributeTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ topic: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('topic') }})
+ type: ConsentAttributeType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[ConsentAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- identifiers: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifiers'), 'exclude': lambda f: f is None }})
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ identifiers: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifiers'), 'exclude': lambda f: f is None }})
+ info_helpers: Optional[ConsentAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/countryattribute.py b/entity/src/epilot/models/shared/countryattribute.py
index 55cfaf330..5b823ca04 100755
--- a/entity/src/epilot/models/shared/countryattribute.py
+++ b/entity/src/epilot/models/shared/countryattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class CountryAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class CountryAttributeTypeEnum(str, Enum):
- COUNTRY = "country"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class CountryAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class CountryAttributeType(str, Enum):
+ COUNTRY = 'country'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class CountryAttribute:
r"""Country picker"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[CountryAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[CountryAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[CountryAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[CountryAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/currencyattribute.py b/entity/src/epilot/models/shared/currencyattribute.py
index 04a0e77c8..c533af784 100755
--- a/entity/src/epilot/models/shared/currencyattribute.py
+++ b/entity/src/epilot/models/shared/currencyattribute.py
@@ -5,75 +5,116 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional, Union
+
+
+@dataclasses.dataclass
+class CurrencyAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class CurrencyAttributeCurrency1:
r"""A currency configuration"""
+ code: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code') }})
+ description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description') }})
+ symbol: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('symbol') }})
+ flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flag'), 'exclude': lambda f: f is None }})
- code: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code') }})
- description: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description') }})
- symbol: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('symbol') }})
- flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('flag'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclasses.dataclass
+class CurrencyAttributeCurrency:
+ pass
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class CurrencyAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
-class CurrencyAttributeTypeEnum(str, Enum):
- CURRENCY = "currency"
+
+
+class CurrencyAttributeType(str, Enum):
+ CURRENCY = 'currency'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class CurrencyAttribute:
r"""Currency input"""
-
- currency: list[Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency') }})
- r"""An array of currency configurations with a country code (ISO-4217)"""
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- type: CurrencyAttributeTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ currency: List[Union[CurrencyAttributeCurrency1]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency') }})
+ r"""An array of currency configurations with a country code (ISO-4217)"""
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ type: CurrencyAttributeType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[CurrencyAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- currency_selector_only: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency_selector_only'), 'exclude': lambda f: f is None }})
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ currency_selector_only: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency_selector_only'), 'exclude': lambda f: f is None }})
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[CurrencyAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/dateattribute.py b/entity/src/epilot/models/shared/dateattribute.py
index dde650479..40dc34957 100755
--- a/entity/src/epilot/models/shared/dateattribute.py
+++ b/entity/src/epilot/models/shared/dateattribute.py
@@ -5,62 +5,97 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class DateAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class DateAttributeTypeEnum(str, Enum):
- DATE = "date"
- DATETIME = "datetime"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class DateAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class DateAttributeType(str, Enum):
+ DATE = 'date'
+ DATETIME = 'datetime'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class DateAttribute:
r"""Date or Datetime picker"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[DateAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[DateAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[DateAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[DateAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entity.py b/entity/src/epilot/models/shared/entity.py
new file mode 100755
index 000000000..24a2d4aa5
--- /dev/null
+++ b/entity/src/epilot/models/shared/entity.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import entityacl as shared_entityacl
+from ..shared import entityowner as shared_entityowner
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class Entity:
+ acl: Optional[shared_entityacl.EntityACL] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_acl'), 'exclude': lambda f: f is None }})
+ r"""Access control list (ACL) for an entity. Defines sharing access to external orgs or users."""
+ created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id'), 'exclude': lambda f: f is None }})
+ org: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org'), 'exclude': lambda f: f is None }})
+ r"""Organization Id the entity belongs to"""
+ owners: Optional[List[shared_entityowner.EntityOwner]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_owners'), 'exclude': lambda f: f is None }})
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags') }})
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of entity"""
+ updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entityacl.py b/entity/src/epilot/models/shared/entityacl.py
new file mode 100755
index 000000000..b874c2527
--- /dev/null
+++ b/entity/src/epilot/models/shared/entityacl.py
@@ -0,0 +1,19 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityACL:
+ r"""Access control list (ACL) for an entity. Defines sharing access to external orgs or users."""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ delete: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('delete'), 'exclude': lambda f: f is None }})
+ edit: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit'), 'exclude': lambda f: f is None }})
+ view: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entityaction.py b/entity/src/epilot/models/shared/entityaction.py
new file mode 100755
index 000000000..08c02cc2c
--- /dev/null
+++ b/entity/src/epilot/models/shared/entityaction.py
@@ -0,0 +1,23 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityAction:
+ r"""An entity action configured from the entity schema"""
+ action: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action') }})
+ r"""A unique action name"""
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
+ permission: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('permission'), 'exclude': lambda f: f is None }})
+ r"""Permission required to show the action.
+ If not provided, the action will be shown to all users.
+ """
+
+
diff --git a/entity/src/epilot/models/shared/entitycapability.py b/entity/src/epilot/models/shared/entitycapability.py
index 9bb84934d..97e9b7b9e 100755
--- a/entity/src/epilot/models/shared/entitycapability.py
+++ b/entity/src/epilot/models/shared/entitycapability.py
@@ -2,27 +2,95 @@
from __future__ import annotations
import dataclasses
+from ..shared import addressrelationattribute as shared_addressrelationattribute
+from ..shared import automationattribute as shared_automationattribute
+from ..shared import booleanattribute as shared_booleanattribute
+from ..shared import computedattribute as shared_computedattribute
+from ..shared import consentattribute as shared_consentattribute
+from ..shared import countryattribute as shared_countryattribute
+from ..shared import currencyattribute as shared_currencyattribute
+from ..shared import dateattribute as shared_dateattribute
+from ..shared import fileattribute as shared_fileattribute
+from ..shared import internalattribute as shared_internalattribute
+from ..shared import internaluserattribute as shared_internaluserattribute
+from ..shared import invitationemailattribute as shared_invitationemailattribute
+from ..shared import linkattribute as shared_linkattribute
+from ..shared import multiselectattribute as shared_multiselectattribute
+from ..shared import numberattribute as shared_numberattribute
+from ..shared import orderedlistattribute as shared_orderedlistattribute
+from ..shared import partnerorganisationattribute as shared_partnerorganisationattribute
+from ..shared import partnerstatusattribute as shared_partnerstatusattribute
+from ..shared import paymentmethodrelationattribute as shared_paymentmethodrelationattribute
+from ..shared import purposeattribute as shared_purposeattribute
+from ..shared import relationattribute as shared_relationattribute
+from ..shared import repeatableattribute as shared_repeatableattribute
+from ..shared import selectattribute as shared_selectattribute
+from ..shared import sequenceattribute as shared_sequenceattribute
+from ..shared import statusattribute as shared_statusattribute
+from ..shared import tagsattribute as shared_tagsattribute
+from ..shared import textattribute as shared_textattribute
+from ..shared import userrelationattribute as shared_userrelationattribute
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityCapabilityUIHooksRequiredPermission:
+ r"""Require a permission to display UI hook"""
+ action: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action') }})
+ resource: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('resource'), 'exclude': lambda f: f is None }})
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityCapabilityUIHooks:
+ hook: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hook') }})
+ r"""name of the hook to use"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('component'), 'exclude': lambda f: f is None }})
+ r"""the component to be dynamically loaded"""
+ disabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled'), 'exclude': lambda f: f is None }})
+ r"""Whether capability should be disabled"""
+ group_expanded: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group_expanded'), 'exclude': lambda f: f is None }})
+ r"""Sets the group expand/collapse default state"""
+ header: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('header'), 'exclude': lambda f: f is None }})
+ r"""Specific to Activity pilot"""
+ icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
+ r"""Preview icon name(As in Base elements) for the capability"""
+ import_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('import'), 'exclude': lambda f: f is None }})
+ r"""package to be imported"""
+ order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
+ r"""render order (ascending)"""
+ render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
+ required_permission: Optional[EntityCapabilityUIHooksRequiredPermission] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('requiredPermission'), 'exclude': lambda f: f is None }})
+ r"""Require a permission to display UI hook"""
+ route: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('route'), 'exclude': lambda f: f is None }})
+ r"""route for specified capability"""
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityCapability:
r"""Capabilities the Entity has. Turn features on/off for entities."""
-
name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- r"""Unique name for the capability"""
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- attributes: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
+ r"""Unique name for the capability"""
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ attributes: Optional[List[Union[shared_textattribute.TextAttribute, shared_linkattribute.LinkAttribute, shared_dateattribute.DateAttribute, shared_countryattribute.CountryAttribute, shared_booleanattribute.BooleanAttribute, shared_selectattribute.SelectAttribute, shared_multiselectattribute.MultiSelectAttribute, shared_statusattribute.StatusAttribute, shared_sequenceattribute.SequenceAttribute, shared_relationattribute.RelationAttribute, shared_userrelationattribute.UserRelationAttribute, shared_addressrelationattribute.AddressRelationAttribute, shared_paymentmethodrelationattribute.PaymentMethodRelationAttribute, shared_currencyattribute.CurrencyAttribute, shared_repeatableattribute.RepeatableAttribute, shared_tagsattribute.TagsAttribute, shared_numberattribute.NumberAttribute, shared_consentattribute.ConsentAttribute, shared_internalattribute.InternalAttribute, shared_orderedlistattribute.OrderedListAttribute, shared_fileattribute.FileAttribute, shared_computedattribute.ComputedAttribute, shared_partnerstatusattribute.PartnerStatusAttribute, shared_invitationemailattribute.InvitationEmailAttribute, shared_automationattribute.AutomationAttribute, shared_internaluserattribute.InternalUserAttribute, shared_purposeattribute.PurposeAttribute, shared_partnerorganisationattribute.PartnerOrganisationAttribute]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This capability should only be active when the feature flag is enabled"""
+ r"""This capability should only be active when the feature flag is enabled"""
legacy: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('legacy'), 'exclude': lambda f: f is None }})
- r"""Only show capability for legacy tenants (ivy)"""
+ r"""Only show capability for legacy tenants (ivy)"""
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This capability should only be active when the setting is enabled"""
+ r"""This capability should only be active when the setting is enabled"""
title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
- r"""Human readable title of the capability"""
- ui_hooks: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_hooks'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Human readable title of the capability"""
+ ui_hooks: Optional[List[EntityCapabilityUIHooks]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_hooks'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entitydefaultcreate.py b/entity/src/epilot/models/shared/entitydefaultcreate.py
index c51a74d4b..9e92dcc8b 100755
--- a/entity/src/epilot/models/shared/entitydefaultcreate.py
+++ b/entity/src/epilot/models/shared/entitydefaultcreate.py
@@ -5,25 +5,16 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Optional
+from typing import Dict, Optional
-
-@dataclass_json(undefined=Undefined.EXCLUDE)
-@dataclasses.dataclass
-class EntityDefaultCreateTableMenuOptions:
-
- icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
- label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }})
-
-class EntityDefaultCreateViewTypeEnum(str, Enum):
- DEFAULT = "default"
+class EntityDefaultCreateViewType(str, Enum):
+ DEFAULT = 'default'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultCreate:
+ search_params: Optional[Dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search_params'), 'exclude': lambda f: f is None }})
+ view_type: Optional[EntityDefaultCreateViewType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
- search_params: Optional[dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search_params'), 'exclude': lambda f: f is None }})
- table_menu_options: Optional[EntityDefaultCreateTableMenuOptions] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_menu_options'), 'exclude': lambda f: f is None }})
- view_type: Optional[EntityDefaultCreateViewTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/entitydefaultedit.py b/entity/src/epilot/models/shared/entitydefaultedit.py
index ae1ced155..1025a9992 100755
--- a/entity/src/epilot/models/shared/entitydefaultedit.py
+++ b/entity/src/epilot/models/shared/entitydefaultedit.py
@@ -5,25 +5,18 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Optional
+from typing import Dict, List, Optional
-
-@dataclass_json(undefined=Undefined.EXCLUDE)
-@dataclasses.dataclass
-class EntityDefaultEditTableMenuOptions:
-
- icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
- label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }})
-
-class EntityDefaultEditViewTypeEnum(str, Enum):
- DEFAULT = "default"
+class EntityDefaultEditViewType(str, Enum):
+ DEFAULT = 'default'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultEdit:
+ search_params: Optional[Dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search_params'), 'exclude': lambda f: f is None }})
+ summary_attributes: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_attributes'), 'exclude': lambda f: f is None }})
+ r"""List of attribute names that we show in the summary header"""
+ view_type: Optional[EntityDefaultEditViewType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
- search_params: Optional[dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search_params'), 'exclude': lambda f: f is None }})
- table_menu_options: Optional[EntityDefaultEditTableMenuOptions] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_menu_options'), 'exclude': lambda f: f is None }})
- view_type: Optional[EntityDefaultEditViewTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/entitydefaulttable.py b/entity/src/epilot/models/shared/entitydefaulttable.py
index fcf70f4df..18e9a2f26 100755
--- a/entity/src/epilot/models/shared/entitydefaulttable.py
+++ b/entity/src/epilot/models/shared/entitydefaulttable.py
@@ -2,72 +2,91 @@
from __future__ import annotations
import dataclasses
+from ..shared import entityaction as shared_entityaction
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional, Union
-class EntityDefaultTableDropdownItems2TypeEnum(str, Enum):
- LINK = "link"
+class EntityDefaultTableDropdownItems2Type(str, Enum):
+ LINK = 'link'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultTableDropdownItems2:
-
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This dropdown item should only be active when the feature flag is enabled"""
+ r"""This dropdown item should only be active when the feature flag is enabled"""
legacy: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('legacy'), 'exclude': lambda f: f is None }})
- r"""Only show item for legacy tenants (ivy)"""
- title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
- type: Optional[EntityDefaultTableDropdownItems2TypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- uri: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('uri'), 'exclude': lambda f: f is None }})
+ r"""Only show item for legacy tenants (ivy)"""
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
+ type: Optional[EntityDefaultTableDropdownItems2Type] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ uri: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('uri'), 'exclude': lambda f: f is None }})
-class EntityDefaultTableDropdownItems1TypeEnum(str, Enum):
- ENTITY = "entity"
+
+
+class EntityDefaultTableDropdownItems1Type(str, Enum):
+ ENTITY = 'entity'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultTableDropdownItems1:
-
entity: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity'), 'exclude': lambda f: f is None }})
- r"""URL-friendly identifier for the entity schema"""
+ r"""URL-friendly identifier for the entity schema"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This dropdown item should only be active when the feature flag is enabled"""
+ r"""This dropdown item should only be active when the feature flag is enabled"""
legacy: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('legacy'), 'exclude': lambda f: f is None }})
- r"""Only show item for legacy tenants (ivy)"""
- type: Optional[EntityDefaultTableDropdownItems1TypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ r"""Only show item for legacy tenants (ivy)"""
+ type: Optional[EntityDefaultTableDropdownItems1Type] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+
+
+@dataclasses.dataclass
+class EntityDefaultTableDropdownItems:
+ pass
+
+
+@dataclasses.dataclass
+class EntityDefaultTableNavbarActionsOptionsParams:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultTableNavbarActionsOptions:
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ params: Optional[EntityDefaultTableNavbarActionsOptionsParams] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('params'), 'exclude': lambda f: f is None }})
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- params: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('params'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultTableNavbarActions:
+ type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ options: Optional[List[EntityDefaultTableNavbarActionsOptions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
- type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
- options: Optional[list[EntityDefaultTableNavbarActionsOptions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
-
-class EntityDefaultTableViewTypeEnum(str, Enum):
- DEFAULT = "default"
+
+
+
+@dataclasses.dataclass
+class EntityDefaultTableRowActions:
+ pass
+
+class EntityDefaultTableViewType(str, Enum):
+ DEFAULT = 'default'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityDefaultTable:
+ dropdown_items: Optional[List[Union[EntityDefaultTableDropdownItems1, EntityDefaultTableDropdownItems2]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dropdown_items'), 'exclude': lambda f: f is None }})
+ enable_thumbnails: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_thumbnails'), 'exclude': lambda f: f is None }})
+ r"""Enable the thumbnail column"""
+ navbar_actions: Optional[List[EntityDefaultTableNavbarActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('navbar_actions'), 'exclude': lambda f: f is None }})
+ row_actions: Optional[List[Union[str, shared_entityaction.EntityAction]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('row_actions'), 'exclude': lambda f: f is None }})
+ view_type: Optional[EntityDefaultTableViewType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
- classic_view: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('classic_view'), 'exclude': lambda f: f is None }})
- dropdown_items: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dropdown_items'), 'exclude': lambda f: f is None }})
- enable_thumbnails: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_thumbnails'), 'exclude': lambda f: f is None }})
- r"""Enable the thumbnail column"""
- navbar_actions: Optional[list[EntityDefaultTableNavbarActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('navbar_actions'), 'exclude': lambda f: f is None }})
- row_actions: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('row_actions'), 'exclude': lambda f: f is None }})
- view_type: Optional[EntityDefaultTableViewTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/entityimportparams.py b/entity/src/epilot/models/shared/entityimportparams.py
index 5e619c841..d8967ca2d 100755
--- a/entity/src/epilot/models/shared/entityimportparams.py
+++ b/entity/src/epilot/models/shared/entityimportparams.py
@@ -9,15 +9,22 @@
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityImportParamsS3Reference:
+ r"""The S3 bucket and key where the JSON file for import is located."""
+ bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
+ r"""The name of the S3 bucket where the JSON file for import is stored."""
+ key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
+ r"""The key or path to the JSON file within the S3 bucket."""
- bucket: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bucket') }})
- key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key') }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityImportParams:
+ r"""The parameters for importing entities."""
+ s3_reference: EntityImportParamsS3Reference = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('S3Reference') }})
+ r"""The S3 bucket and key where the JSON file for import is located."""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema') }})
+ r"""The schema of the entities being imported. This must match the schema of the entities on the platform."""
- s3_reference: EntityImportParamsS3Reference = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('S3Reference') }})
- schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('schema') }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/entityitem.py b/entity/src/epilot/models/shared/entityitem.py
new file mode 100755
index 000000000..c8e152b0a
--- /dev/null
+++ b/entity/src/epilot/models/shared/entityitem.py
@@ -0,0 +1,32 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import entityacl as shared_entityacl
+from ..shared import entityowner as shared_entityowner
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityItem:
+ created_at: Optional[datetime] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization Id the entity belongs to"""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ r"""URL-friendly identifier for the entity schema"""
+ title: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of entity"""
+ updated_at: Optional[datetime] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ acl: Optional[shared_entityacl.EntityACL] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_acl'), 'exclude': lambda f: f is None }})
+ r"""Access control list (ACL) for an entity. Defines sharing access to external orgs or users."""
+ owners: Optional[List[shared_entityowner.EntityOwner]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_owners'), 'exclude': lambda f: f is None }})
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags') }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entityoperation.py b/entity/src/epilot/models/shared/entityoperation.py
index d8cf521cd..8a374ebe6 100755
--- a/entity/src/epilot/models/shared/entityoperation.py
+++ b/entity/src/epilot/models/shared/entityoperation.py
@@ -2,45 +2,73 @@
from __future__ import annotations
import dataclasses
+import dateutil.parser
+from ..shared import entity as shared_entity
+from ..shared import entityacl as shared_entityacl
+from ..shared import entityowner as shared_entityowner
from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityOperationDiff:
+ added: Optional[shared_entity.Entity] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('added'), 'exclude': lambda f: f is None }})
+ deleted: Optional[shared_entity.Entity] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deleted'), 'exclude': lambda f: f is None }})
+ updated: Optional[shared_entity.Entity] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated'), 'exclude': lambda f: f is None }})
- added: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('added'), 'exclude': lambda f: f is None }})
- deleted: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deleted'), 'exclude': lambda f: f is None }})
- updated: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated'), 'exclude': lambda f: f is None }})
-
-class EntityOperationOperationEnum(str, Enum):
- CREATE_ENTITY = "createEntity"
- UPDATE_ENTITY = "updateEntity"
- DELETE_ENTITY = "deleteEntity"
+
+
+class EntityOperationOperation(str, Enum):
+ CREATE_ENTITY = 'createEntity'
+ UPDATE_ENTITY = 'updateEntity'
+ DELETE_ENTITY = 'deleteEntity'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityOperationParams:
-
- id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
slug: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug'), 'exclude': lambda f: f is None }})
- r"""URL-friendly identifier for the entity schema"""
+ r"""URL-friendly identifier for the entity schema"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class EntityOperation:
+class EntityOperationPayload:
+ acl: Optional[shared_entityacl.EntityACL] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_acl'), 'exclude': lambda f: f is None }})
+ r"""Access control list (ACL) for an entity. Defines sharing access to external orgs or users."""
+ created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id'), 'exclude': lambda f: f is None }})
+ org: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org'), 'exclude': lambda f: f is None }})
+ r"""Organization Id the entity belongs to"""
+ owners: Optional[List[shared_entityowner.EntityOwner]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_owners'), 'exclude': lambda f: f is None }})
+ schema: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly identifier for the entity schema"""
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags') }})
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of entity"""
+ updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
- entity: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity') }})
- operation: EntityOperationOperationEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('operation') }})
- org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org') }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityOperation:
+ entity: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity') }})
+ operation: EntityOperationOperation = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('operation') }})
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org') }})
activity_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('activity_id'), 'exclude': lambda f: f is None }})
- r"""See https://github.com/ulid/spec"""
- diff: Optional[EntityOperationDiff] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('diff'), 'exclude': lambda f: f is None }})
- params: Optional[EntityOperationParams] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('params'), 'exclude': lambda f: f is None }})
- payload: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""See https://github.com/ulid/spec"""
+ diff: Optional[EntityOperationDiff] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('diff'), 'exclude': lambda f: f is None }})
+ params: Optional[EntityOperationParams] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('params'), 'exclude': lambda f: f is None }})
+ payload: Optional[EntityOperationPayload] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('payload'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entityowner.py b/entity/src/epilot/models/shared/entityowner.py
new file mode 100755
index 000000000..0584dfac0
--- /dev/null
+++ b/entity/src/epilot/models/shared/entityowner.py
@@ -0,0 +1,20 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntityOwner:
+ r"""The user / organization owning this entity.
+
+ Note: Owner implicitly has access to the entity regardless of ACLs.
+ """
+ org_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_id') }})
+ user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entityschema.py b/entity/src/epilot/models/shared/entityschema.py
index 93be2f7a4..fd05902bf 100755
--- a/entity/src/epilot/models/shared/entityschema.py
+++ b/entity/src/epilot/models/shared/entityschema.py
@@ -2,103 +2,182 @@
from __future__ import annotations
import dataclasses
+from ..shared import addressrelationattribute as shared_addressrelationattribute
+from ..shared import automationattribute as shared_automationattribute
+from ..shared import booleanattribute as shared_booleanattribute
+from ..shared import computedattribute as shared_computedattribute
+from ..shared import consentattribute as shared_consentattribute
+from ..shared import countryattribute as shared_countryattribute
+from ..shared import currencyattribute as shared_currencyattribute
+from ..shared import dateattribute as shared_dateattribute
+from ..shared import entityaction as shared_entityaction
from ..shared import entitycapability as shared_entitycapability
+from ..shared import entitydefaultcreate as shared_entitydefaultcreate
+from ..shared import entitydefaultedit as shared_entitydefaultedit
+from ..shared import entitydefaulttable as shared_entitydefaulttable
+from ..shared import entityviewdisabled as shared_entityviewdisabled
+from ..shared import fileattribute as shared_fileattribute
+from ..shared import internalattribute as shared_internalattribute
+from ..shared import internaluserattribute as shared_internaluserattribute
+from ..shared import invitationemailattribute as shared_invitationemailattribute
+from ..shared import linkattribute as shared_linkattribute
+from ..shared import multiselectattribute as shared_multiselectattribute
+from ..shared import numberattribute as shared_numberattribute
+from ..shared import orderedlistattribute as shared_orderedlistattribute
+from ..shared import partnerorganisationattribute as shared_partnerorganisationattribute
+from ..shared import partnerstatusattribute as shared_partnerstatusattribute
+from ..shared import paymentmethodrelationattribute as shared_paymentmethodrelationattribute
+from ..shared import purposeattribute as shared_purposeattribute
+from ..shared import redirectentityview as shared_redirectentityview
+from ..shared import relationattribute as shared_relationattribute
+from ..shared import repeatableattribute as shared_repeatableattribute
from ..shared import searchmappings as shared_searchmappings
+from ..shared import selectattribute as shared_selectattribute
+from ..shared import sequenceattribute as shared_sequenceattribute
+from ..shared import statusattribute as shared_statusattribute
+from ..shared import summaryattribute as shared_summaryattribute
+from ..shared import tagsattribute as shared_tagsattribute
+from ..shared import textattribute as shared_textattribute
+from ..shared import userrelationattribute as shared_userrelationattribute
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaGroupSettingsInfoTooltipTitle:
+ default: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }})
+ key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }})
- default: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }})
- key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaGroupSettings:
-
- id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- expanded: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expanded'), 'exclude': lambda f: f is None }})
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ expanded: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expanded'), 'exclude': lambda f: f is None }})
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This group should only be active when the feature flag is enabled"""
- info_tooltip_title: Optional[EntitySchemaGroupSettingsInfoTooltipTitle] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_tooltip_title'), 'exclude': lambda f: f is None }})
- order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Render order of the group"""
- render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
+ r"""This group should only be active when the feature flag is enabled"""
+ info_tooltip_title: Optional[EntitySchemaGroupSettingsInfoTooltipTitle] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_tooltip_title'), 'exclude': lambda f: f is None }})
+ order: Optional[int] = dataclasses.field(default=0, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
+ r"""Render order of the group"""
+ render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This group should only be active when the setting is enabled"""
+ r"""This group should only be active when the setting is enabled"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class EntitySchemaUIConfigListItem:
+class EntitySchemaLayoutSettings:
+ r"""Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
+ - Managed Properties: are interpreted and transformed into layout styles
+ - Un-managed Properties: are appended as styles into the attribute mounting node
+ """
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ grid_gap: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grid_gap'), 'exclude': lambda f: f is None }})
+ r"""Defines the grid gap for the mounting node of the attribute."""
+ grid_template_columns: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grid_template_columns'), 'exclude': lambda f: f is None }})
+ r"""Defines the grid column template for the mounting node of the attribute."""
- summary_attributes: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_attributes'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclasses.dataclass
+class EntitySchemaUIConfigCreateView:
+ pass
+
+
+@dataclasses.dataclass
+class EntitySchemaUIConfigEditView:
+ pass
+
+
+@dataclasses.dataclass
+class EntitySchemaUIConfigListItemSummaryAttributes:
+ pass
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntitySchemaUIConfigListItem:
+ quick_actions: Optional[List[shared_entityaction.EntityAction]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('quick_actions'), 'exclude': lambda f: f is None }})
+ summary_attributes: Optional[List[Union[shared_summaryattribute.SummaryAttribute, str]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_attributes'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaUIConfigSharing:
-
show_sharing_button: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_sharing_button'), 'exclude': lambda f: f is None }})
- r"""Show the sharing button in entity detail view"""
+ r"""Show the sharing button in entity detail view"""
+
+
+@dataclasses.dataclass
+class EntitySchemaUIConfigSingleView:
+ pass
+
+
+@dataclasses.dataclass
+class EntitySchemaUIConfigTableView:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaUIConfig:
+ create_view: Optional[Union[shared_entitydefaultcreate.EntityDefaultCreate, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create_view'), 'exclude': lambda f: f is None }})
+ edit_view: Optional[Union[shared_entitydefaultedit.EntityDefaultEdit, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit_view'), 'exclude': lambda f: f is None }})
+ list_item: Optional[EntitySchemaUIConfigListItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('list_item'), 'exclude': lambda f: f is None }})
+ sharing: Optional[EntitySchemaUIConfigSharing] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sharing'), 'exclude': lambda f: f is None }})
+ single_view: Optional[Union[shared_entitydefaultedit.EntityDefaultEdit, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('single_view'), 'exclude': lambda f: f is None }})
+ table_view: Optional[Union[shared_entitydefaulttable.EntityDefaultTable, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_view'), 'exclude': lambda f: f is None }})
- create_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create_view'), 'exclude': lambda f: f is None }})
- edit_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit_view'), 'exclude': lambda f: f is None }})
- list_item: Optional[EntitySchemaUIConfigListItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('list_item'), 'exclude': lambda f: f is None }})
- sharing: Optional[EntitySchemaUIConfigSharing] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sharing'), 'exclude': lambda f: f is None }})
- single_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('single_view'), 'exclude': lambda f: f is None }})
- table_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_view'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchema:
- r"""The \"type\" of an Entity. Describes the shape. Includes Entity Attributes, Relations and Capabilities."""
-
+ r"""The \\"type\\" of an Entity. Describes the shape. Includes Entity Attributes, Relations and Capabilities."""
+ attributes: List[Union[shared_textattribute.TextAttribute, shared_linkattribute.LinkAttribute, shared_dateattribute.DateAttribute, shared_countryattribute.CountryAttribute, shared_booleanattribute.BooleanAttribute, shared_selectattribute.SelectAttribute, shared_multiselectattribute.MultiSelectAttribute, shared_statusattribute.StatusAttribute, shared_sequenceattribute.SequenceAttribute, shared_relationattribute.RelationAttribute, shared_userrelationattribute.UserRelationAttribute, shared_addressrelationattribute.AddressRelationAttribute, shared_paymentmethodrelationattribute.PaymentMethodRelationAttribute, shared_currencyattribute.CurrencyAttribute, shared_repeatableattribute.RepeatableAttribute, shared_tagsattribute.TagsAttribute, shared_numberattribute.NumberAttribute, shared_consentattribute.ConsentAttribute, shared_internalattribute.InternalAttribute, shared_orderedlistattribute.OrderedListAttribute, shared_fileattribute.FileAttribute, shared_computedattribute.ComputedAttribute, shared_partnerstatusattribute.PartnerStatusAttribute, shared_invitationemailattribute.InvitationEmailAttribute, shared_automationattribute.AutomationAttribute, shared_internaluserattribute.InternalUserAttribute, shared_purposeattribute.PurposeAttribute, shared_partnerorganisationattribute.PartnerOrganisationAttribute]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes') }})
+ r"""An ordered list of attributes the entity contains"""
+ capabilities: List[shared_entitycapability.EntityCapability] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('capabilities') }})
name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- r"""User-friendly identifier for the entity schema"""
- plural: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('plural') }})
+ r"""User-friendly identifier for the entity schema"""
+ plural: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('plural') }})
slug: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
- r"""URL-friendly identifier for the entity schema"""
- attributes: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
- r"""An ordered list of attributes the entity contains"""
+ r"""URL-friendly identifier for the entity schema"""
blueprint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('blueprint'), 'exclude': lambda f: f is None }})
- r"""Reference to blueprint"""
- capabilities: Optional[list[shared_entitycapability.EntityCapability]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('capabilities'), 'exclude': lambda f: f is None }})
- dialog_config: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dialog_config'), 'exclude': lambda f: f is None }})
- draft: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('draft'), 'exclude': lambda f: f is None }})
- enable_setting: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_setting'), 'exclude': lambda f: f is None }})
- r"""This schema should only be active when one of the organization settings is enabled"""
- explicit_search_mappings: Optional[dict[str, shared_searchmappings.SearchMappings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('explicit_search_mappings'), 'exclude': lambda f: f is None }})
- r"""Advanced: explicit Elasticsearch index mapping definitions for entity data
-
- """
+ r"""Reference to blueprint"""
+ dialog_config: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dialog_config'), 'exclude': lambda f: f is None }})
+ draft: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('draft'), 'exclude': lambda f: f is None }})
+ enable_setting: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_setting'), 'exclude': lambda f: f is None }})
+ r"""This schema should only be active when one of the organization settings is enabled"""
+ explicit_search_mappings: Optional[Dict[str, shared_searchmappings.SearchMappings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('explicit_search_mappings'), 'exclude': lambda f: f is None }})
+ r"""Advanced: explicit Elasticsearch index mapping definitions for entity data"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This schema should only be active when the feature flag is enabled"""
- group_settings: Optional[list[EntitySchemaGroupSettings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group_settings'), 'exclude': lambda f: f is None }})
- r"""A dictionary of Group Titles and associated settings if present."""
- icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
- layout_settings: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout_settings'), 'exclude': lambda f: f is None }})
+ r"""This schema should only be active when the feature flag is enabled"""
+ group_settings: Optional[List[EntitySchemaGroupSettings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group_settings'), 'exclude': lambda f: f is None }})
+ r"""A dictionary of Group Titles and associated settings if present."""
+ icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
+ layout_settings: Optional[EntitySchemaLayoutSettings] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout_settings'), 'exclude': lambda f: f is None }})
r"""Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
- Managed Properties: are interpreted and transformed into layout styles
- Un-managed Properties: are appended as styles into the attribute mounting node
-
- """
- published: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('published'), 'exclude': lambda f: f is None }})
+ """
+ published: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('published'), 'exclude': lambda f: f is None }})
title_template: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title_template'), 'exclude': lambda f: f is None }})
- r"""Template for rendering the title field. Uses handlebars"""
- ui_config: Optional[EntitySchemaUIConfig] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config'), 'exclude': lambda f: f is None }})
- version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Template for rendering the title field. Uses handlebars"""
+ ui_config: Optional[EntitySchemaUIConfig] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config'), 'exclude': lambda f: f is None }})
+ version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entityschemaitem.py b/entity/src/epilot/models/shared/entityschemaitem.py
index db534e35e..b4f9a0ea3 100755
--- a/entity/src/epilot/models/shared/entityschemaitem.py
+++ b/entity/src/epilot/models/shared/entityschemaitem.py
@@ -2,117 +2,197 @@
from __future__ import annotations
import dataclasses
+from ..shared import addressrelationattribute as shared_addressrelationattribute
+from ..shared import automationattribute as shared_automationattribute
+from ..shared import booleanattribute as shared_booleanattribute
+from ..shared import computedattribute as shared_computedattribute
+from ..shared import consentattribute as shared_consentattribute
+from ..shared import countryattribute as shared_countryattribute
+from ..shared import currencyattribute as shared_currencyattribute
+from ..shared import dateattribute as shared_dateattribute
+from ..shared import entityaction as shared_entityaction
from ..shared import entitycapability as shared_entitycapability
+from ..shared import entitydefaultcreate as shared_entitydefaultcreate
+from ..shared import entitydefaultedit as shared_entitydefaultedit
+from ..shared import entitydefaulttable as shared_entitydefaulttable
+from ..shared import entityviewdisabled as shared_entityviewdisabled
+from ..shared import fileattribute as shared_fileattribute
+from ..shared import internalattribute as shared_internalattribute
+from ..shared import internaluserattribute as shared_internaluserattribute
+from ..shared import invitationemailattribute as shared_invitationemailattribute
+from ..shared import linkattribute as shared_linkattribute
+from ..shared import multiselectattribute as shared_multiselectattribute
+from ..shared import numberattribute as shared_numberattribute
+from ..shared import orderedlistattribute as shared_orderedlistattribute
+from ..shared import partnerorganisationattribute as shared_partnerorganisationattribute
+from ..shared import partnerstatusattribute as shared_partnerstatusattribute
+from ..shared import paymentmethodrelationattribute as shared_paymentmethodrelationattribute
+from ..shared import purposeattribute as shared_purposeattribute
+from ..shared import redirectentityview as shared_redirectentityview
+from ..shared import relationattribute as shared_relationattribute
+from ..shared import repeatableattribute as shared_repeatableattribute
from ..shared import searchmappings as shared_searchmappings
+from ..shared import selectattribute as shared_selectattribute
+from ..shared import sequenceattribute as shared_sequenceattribute
+from ..shared import statusattribute as shared_statusattribute
+from ..shared import summaryattribute as shared_summaryattribute
+from ..shared import tagsattribute as shared_tagsattribute
+from ..shared import textattribute as shared_textattribute
+from ..shared import userrelationattribute as shared_userrelationattribute
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaItemGroupSettingsInfoTooltipTitle:
+ default: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }})
+ key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }})
- default: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }})
- key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaItemGroupSettings:
-
- id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- expanded: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expanded'), 'exclude': lambda f: f is None }})
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ expanded: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expanded'), 'exclude': lambda f: f is None }})
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This group should only be active when the feature flag is enabled"""
- info_tooltip_title: Optional[EntitySchemaItemGroupSettingsInfoTooltipTitle] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_tooltip_title'), 'exclude': lambda f: f is None }})
- order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Render order of the group"""
- render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
+ r"""This group should only be active when the feature flag is enabled"""
+ info_tooltip_title: Optional[EntitySchemaItemGroupSettingsInfoTooltipTitle] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_tooltip_title'), 'exclude': lambda f: f is None }})
+ order: Optional[int] = dataclasses.field(default=0, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
+ r"""Render order of the group"""
+ render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This group should only be active when the setting is enabled"""
+ r"""This group should only be active when the setting is enabled"""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class EntitySchemaItemSource:
+class EntitySchemaItemLayoutSettings:
+ r"""Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
+ - Managed Properties: are interpreted and transformed into layout styles
+ - Un-managed Properties: are appended as styles into the attribute mounting node
+ """
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ grid_gap: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grid_gap'), 'exclude': lambda f: f is None }})
+ r"""Defines the grid gap for the mounting node of the attribute."""
+ grid_template_columns: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grid_template_columns'), 'exclude': lambda f: f is None }})
+ r"""Defines the grid column template for the mounting node of the attribute."""
- id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class EntitySchemaItemSource:
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+
+
+@dataclasses.dataclass
+class EntitySchemaItemUIConfigCreateView:
+ pass
+
+
+@dataclasses.dataclass
+class EntitySchemaItemUIConfigEditView:
+ pass
+
+
+@dataclasses.dataclass
+class EntitySchemaItemUIConfigListItemSummaryAttributes:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaItemUIConfigListItem:
+ quick_actions: Optional[List[shared_entityaction.EntityAction]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('quick_actions'), 'exclude': lambda f: f is None }})
+ summary_attributes: Optional[List[Union[shared_summaryattribute.SummaryAttribute, str]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_attributes'), 'exclude': lambda f: f is None }})
- summary_attributes: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_attributes'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaItemUIConfigSharing:
-
show_sharing_button: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_sharing_button'), 'exclude': lambda f: f is None }})
- r"""Show the sharing button in entity detail view"""
+ r"""Show the sharing button in entity detail view"""
+
+
+@dataclasses.dataclass
+class EntitySchemaItemUIConfigSingleView:
+ pass
+
+
+@dataclasses.dataclass
+class EntitySchemaItemUIConfigTableView:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaItemUIConfig:
+ create_view: Optional[Union[shared_entitydefaultcreate.EntityDefaultCreate, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create_view'), 'exclude': lambda f: f is None }})
+ edit_view: Optional[Union[shared_entitydefaultedit.EntityDefaultEdit, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit_view'), 'exclude': lambda f: f is None }})
+ list_item: Optional[EntitySchemaItemUIConfigListItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('list_item'), 'exclude': lambda f: f is None }})
+ sharing: Optional[EntitySchemaItemUIConfigSharing] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sharing'), 'exclude': lambda f: f is None }})
+ single_view: Optional[Union[shared_entitydefaultedit.EntityDefaultEdit, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('single_view'), 'exclude': lambda f: f is None }})
+ table_view: Optional[Union[shared_entitydefaulttable.EntityDefaultTable, shared_redirectentityview.RedirectEntityView, shared_entityviewdisabled.EntityViewDisabled]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_view'), 'exclude': lambda f: f is None }})
- create_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create_view'), 'exclude': lambda f: f is None }})
- edit_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit_view'), 'exclude': lambda f: f is None }})
- list_item: Optional[EntitySchemaItemUIConfigListItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('list_item'), 'exclude': lambda f: f is None }})
- sharing: Optional[EntitySchemaItemUIConfigSharing] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sharing'), 'exclude': lambda f: f is None }})
- single_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('single_view'), 'exclude': lambda f: f is None }})
- table_view: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('table_view'), 'exclude': lambda f: f is None }})
-
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySchemaItem:
- r"""The \"type\" of an Entity. Describes the shape. Includes Entity Attributes, Relations and Capabilities."""
-
+ r"""The \\"type\\" of an Entity. Describes the shape. Includes Entity Attributes, Relations and Capabilities."""
+ attributes: List[Union[shared_textattribute.TextAttribute, shared_linkattribute.LinkAttribute, shared_dateattribute.DateAttribute, shared_countryattribute.CountryAttribute, shared_booleanattribute.BooleanAttribute, shared_selectattribute.SelectAttribute, shared_multiselectattribute.MultiSelectAttribute, shared_statusattribute.StatusAttribute, shared_sequenceattribute.SequenceAttribute, shared_relationattribute.RelationAttribute, shared_userrelationattribute.UserRelationAttribute, shared_addressrelationattribute.AddressRelationAttribute, shared_paymentmethodrelationattribute.PaymentMethodRelationAttribute, shared_currencyattribute.CurrencyAttribute, shared_repeatableattribute.RepeatableAttribute, shared_tagsattribute.TagsAttribute, shared_numberattribute.NumberAttribute, shared_consentattribute.ConsentAttribute, shared_internalattribute.InternalAttribute, shared_orderedlistattribute.OrderedListAttribute, shared_fileattribute.FileAttribute, shared_computedattribute.ComputedAttribute, shared_partnerstatusattribute.PartnerStatusAttribute, shared_invitationemailattribute.InvitationEmailAttribute, shared_automationattribute.AutomationAttribute, shared_internaluserattribute.InternalUserAttribute, shared_purposeattribute.PurposeAttribute, shared_partnerorganisationattribute.PartnerOrganisationAttribute]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes') }})
+ r"""An ordered list of attributes the entity contains"""
+ capabilities: List[shared_entitycapability.EntityCapability] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('capabilities') }})
name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- r"""User-friendly identifier for the entity schema"""
- plural: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('plural') }})
+ r"""User-friendly identifier for the entity schema"""
+ plural: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('plural') }})
slug: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
- r"""URL-friendly identifier for the entity schema"""
- attributes: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attributes'), 'exclude': lambda f: f is None }})
- r"""An ordered list of attributes the entity contains"""
+ r"""URL-friendly identifier for the entity schema"""
blueprint: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('blueprint'), 'exclude': lambda f: f is None }})
- r"""Reference to blueprint"""
- capabilities: Optional[list[shared_entitycapability.EntityCapability]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('capabilities'), 'exclude': lambda f: f is None }})
- comment: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comment'), 'exclude': lambda f: f is None }})
- created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }})
- dialog_config: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dialog_config'), 'exclude': lambda f: f is None }})
- draft: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('draft'), 'exclude': lambda f: f is None }})
- enable_setting: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_setting'), 'exclude': lambda f: f is None }})
- r"""This schema should only be active when one of the organization settings is enabled"""
- explicit_search_mappings: Optional[dict[str, shared_searchmappings.SearchMappings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('explicit_search_mappings'), 'exclude': lambda f: f is None }})
- r"""Advanced: explicit Elasticsearch index mapping definitions for entity data
-
- """
+ r"""Reference to blueprint"""
+ comment: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comment'), 'exclude': lambda f: f is None }})
+ created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }})
+ dialog_config: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dialog_config'), 'exclude': lambda f: f is None }})
+ draft: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('draft'), 'exclude': lambda f: f is None }})
+ enable_setting: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_setting'), 'exclude': lambda f: f is None }})
+ r"""This schema should only be active when one of the organization settings is enabled"""
+ explicit_search_mappings: Optional[Dict[str, shared_searchmappings.SearchMappings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('explicit_search_mappings'), 'exclude': lambda f: f is None }})
+ r"""Advanced: explicit Elasticsearch index mapping definitions for entity data"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This schema should only be active when the feature flag is enabled"""
- group_settings: Optional[list[EntitySchemaItemGroupSettings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group_settings'), 'exclude': lambda f: f is None }})
- r"""A dictionary of Group Titles and associated settings if present."""
- icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
+ r"""This schema should only be active when the feature flag is enabled"""
+ group_settings: Optional[List[EntitySchemaItemGroupSettings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group_settings'), 'exclude': lambda f: f is None }})
+ r"""A dictionary of Group Titles and associated settings if present."""
+ icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- r"""Generated uuid for schema"""
- layout_settings: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout_settings'), 'exclude': lambda f: f is None }})
+ r"""Generated uuid for schema"""
+ layout_settings: Optional[EntitySchemaItemLayoutSettings] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout_settings'), 'exclude': lambda f: f is None }})
r"""Custom grid definitions for the layout. These settings are composed by managed and un-managed properties:
- Managed Properties: are interpreted and transformed into layout styles
- Un-managed Properties: are appended as styles into the attribute mounting node
-
- """
- published: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('published'), 'exclude': lambda f: f is None }})
- source: Optional[EntitySchemaItemSource] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source'), 'exclude': lambda f: f is None }})
+ """
+ published: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('published'), 'exclude': lambda f: f is None }})
+ source: Optional[EntitySchemaItemSource] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source'), 'exclude': lambda f: f is None }})
title_template: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title_template'), 'exclude': lambda f: f is None }})
- r"""Template for rendering the title field. Uses handlebars"""
- ui_config: Optional[EntitySchemaItemUIConfig] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config'), 'exclude': lambda f: f is None }})
- updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'exclude': lambda f: f is None }})
- version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Template for rendering the title field. Uses handlebars"""
+ ui_config: Optional[EntitySchemaItemUIConfig] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config'), 'exclude': lambda f: f is None }})
+ updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'exclude': lambda f: f is None }})
+ version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entitysearchparams.py b/entity/src/epilot/models/shared/entitysearchparams.py
index 5951b150c..cb30eb69f 100755
--- a/entity/src/epilot/models/shared/entitysearchparams.py
+++ b/entity/src/epilot/models/shared/entitysearchparams.py
@@ -4,25 +4,32 @@
import dataclasses
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class EntitySearchParamsAggs:
+ r"""Aggregation supported by ElasticSearch allows summarizing data as metrics, statistics, or other analytics."""
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySearchParams:
-
q: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('q') }})
- r"""Lucene queries supported with ElasticSearch"""
- aggs: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aggs'), 'exclude': lambda f: f is None }})
- r"""Aggregation supported by ElasticSearch allows summarizing data as metrics, statistics, or other analytics."""
- fields: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fields'), 'exclude': lambda f: f is None }})
- r"""List of entity fields to include in search results"""
- from_: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('from'), 'exclude': lambda f: f is None }})
- hydrate: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hydrate'), 'exclude': lambda f: f is None }})
- r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
- include_scores: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_scores'), 'exclude': lambda f: f is None }})
- r"""Adds a `_score` number field to results that can be used to rank by match score"""
- size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }})
- r"""Max search size is 1000 with higher values defaulting to 1000"""
- sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sort'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Lucene queries supported with ElasticSearch"""
+ aggs: Optional[EntitySearchParamsAggs] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aggs'), 'exclude': lambda f: f is None }})
+ r"""Aggregation supported by ElasticSearch allows summarizing data as metrics, statistics, or other analytics."""
+ fields: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fields'), 'exclude': lambda f: f is None }})
+ r"""List of entity fields to include in search results"""
+ from_: Optional[int] = dataclasses.field(default=0, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('from'), 'exclude': lambda f: f is None }})
+ hydrate: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hydrate'), 'exclude': lambda f: f is None }})
+ r"""When true, enables entity hydration to resolve nested $relation & $relation_ref references in-place."""
+ include_scores: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('include_scores'), 'exclude': lambda f: f is None }})
+ r"""Adds a `_score` number field to results that can be used to rank by match score"""
+ size: Optional[int] = dataclasses.field(default=10, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }})
+ r"""Max search size is 1000 with higher values defaulting to 1000"""
+ sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sort'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/entitysearchresults.py b/entity/src/epilot/models/shared/entitysearchresults.py
index a80b6aaa5..66717912e 100755
--- a/entity/src/epilot/models/shared/entitysearchresults.py
+++ b/entity/src/epilot/models/shared/entitysearchresults.py
@@ -2,17 +2,22 @@
from __future__ import annotations
import dataclasses
+from ..shared import entityitem as shared_entityitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional
+
+
+@dataclasses.dataclass
+class EntitySearchResultsAggregations:
+ pass
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntitySearchResults:
- r"""Success"""
+ aggregations: Optional[EntitySearchResultsAggregations] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aggregations'), 'exclude': lambda f: f is None }})
+ hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
+ results: Optional[List[shared_entityitem.EntityItem]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
- aggregations: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aggregations'), 'exclude': lambda f: f is None }})
- hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
- results: Optional[list[dict[str, Any]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/entityviewdisabled.py b/entity/src/epilot/models/shared/entityviewdisabled.py
index f0d0eaea5..7585d58f1 100755
--- a/entity/src/epilot/models/shared/entityviewdisabled.py
+++ b/entity/src/epilot/models/shared/entityviewdisabled.py
@@ -7,13 +7,13 @@
from epilot import utils
from typing import Optional
-class EntityViewDisabledViewTypeEnum(str, Enum):
- DISABLED = "disabled"
+class EntityViewDisabledViewType(str, Enum):
+ DISABLED = 'disabled'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class EntityViewDisabled:
+ view_type: Optional[EntityViewDisabledViewType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
- view_type: Optional[EntityViewDisabledViewTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/fileattribute.py b/entity/src/epilot/models/shared/fileattribute.py
index 7893568a5..f24b6ee4f 100755
--- a/entity/src/epilot/models/shared/fileattribute.py
+++ b/entity/src/epilot/models/shared/fileattribute.py
@@ -5,77 +5,111 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
-class FileAttributeDefaultAccessControlEnum(str, Enum):
- PUBLIC_READ = "public-read"
- PRIVATE = "private"
-class FileAttributeTypeEnum(str, Enum):
- IMAGE = "image"
- FILE = "file"
+@dataclasses.dataclass
+class FileAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
+
+class FileAttributeDefaultAccessControl(str, Enum):
+ PUBLIC_READ = 'public-read'
+ PRIVATE = 'private'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class FileAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class FileAttributeType(str, Enum):
+ IMAGE = 'image'
+ FILE = 'file'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class FileAttribute:
r"""File or Image Attachment"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- type: FileAttributeTypeEnum = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- allowed_extensions: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowed_extensions'), 'exclude': lambda f: f is None }})
- r"""List of file extensions (without the dot suffix)"""
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ type: FileAttributeType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ allowed_extensions: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowed_extensions'), 'exclude': lambda f: f is None }})
+ r"""List of file extensions (without the dot suffix)"""
+ constraints: Optional[FileAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_access_control: Optional[FileAttributeDefaultAccessControlEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_access_control'), 'exclude': lambda f: f is None }})
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ """
+ default_access_control: Optional[FileAttributeDefaultAccessControl] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_access_control'), 'exclude': lambda f: f is None }})
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
display_images_landscaped: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_images_landscaped'), 'exclude': lambda f: f is None }})
- r"""Controls how the images are presented to the user during upload on the Entity Details view."""
+ r"""Controls how the images are presented to the user during upload on the Entity Details view."""
enable_description: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_description'), 'exclude': lambda f: f is None }})
r"""When set to true, an i18n description will be used alongside the attribute label.
This description should be set through the platform locales in the form: `file.{attribute_name}.description_text`.
-
- """
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- multiple: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiple'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[FileAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ multiple: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiple'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/getrelatedentitiescount.py b/entity/src/epilot/models/shared/getrelatedentitiescount.py
new file mode 100755
index 000000000..4937882ce
--- /dev/null
+++ b/entity/src/epilot/models/shared/getrelatedentitiescount.py
@@ -0,0 +1,15 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from epilot import utils
+from typing import Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class GetRelatedEntitiesCount:
+ hits: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/getrelationsresp.py b/entity/src/epilot/models/shared/getrelationsresp.py
deleted file mode 100755
index 4de986a05..000000000
--- a/entity/src/epilot/models/shared/getrelationsresp.py
+++ /dev/null
@@ -1,19 +0,0 @@
-"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-
-from __future__ import annotations
-import dataclasses
-from dataclasses_json import Undefined, dataclass_json
-from epilot import utils
-from typing import Optional
-
-
-@dataclass_json(undefined=Undefined.EXCLUDE)
-@dataclasses.dataclass
-class GetRelationsResp:
-
- attribute: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute') }})
- entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
- tags: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
- reverse: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reverse'), 'exclude': lambda f: f is None }})
- r"""Whether this is a reverse relation"""
-
\ No newline at end of file
diff --git a/entity/src/epilot/models/shared/getrelationsrespwithpagination.py b/entity/src/epilot/models/shared/getrelationsrespwithpagination.py
index 61d6f6340..58ad77ce4 100755
--- a/entity/src/epilot/models/shared/getrelationsrespwithpagination.py
+++ b/entity/src/epilot/models/shared/getrelationsrespwithpagination.py
@@ -2,16 +2,17 @@
from __future__ import annotations
import dataclasses
+from ..shared import relationentity as shared_relationentity
+from ..shared import relationitem as shared_relationitem
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Any, Optional
+from typing import List, Optional, Union
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class GetRelationsRespWithPagination:
- r"""Success"""
+ hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
+ relations: Optional[List[Union[shared_relationitem.RelationItem, shared_relationentity.RelationEntity]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
- hits: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hits'), 'exclude': lambda f: f is None }})
- relations: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relations'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/internalattribute.py b/entity/src/epilot/models/shared/internalattribute.py
index cd3c48227..8904cf932 100755
--- a/entity/src/epilot/models/shared/internalattribute.py
+++ b/entity/src/epilot/models/shared/internalattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class InternalAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class InternalAttributeTypeEnum(str, Enum):
- INTERNAL = "internal"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class InternalAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class InternalAttributeType(str, Enum):
+ INTERNAL = 'internal'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class InternalAttribute:
r"""No UI representation"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[InternalAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[InternalAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[InternalAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[InternalAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/internaluserattribute.py b/entity/src/epilot/models/shared/internaluserattribute.py
index 8c4b9f5b3..bc78b86cb 100755
--- a/entity/src/epilot/models/shared/internaluserattribute.py
+++ b/entity/src/epilot/models/shared/internaluserattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class InternalUserAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class InternalUserAttributeTypeEnum(str, Enum):
- INTERNAL_USER = "internal_user"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class InternalUserAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class InternalUserAttributeType(str, Enum):
+ INTERNAL_USER = 'internal_user'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class InternalUserAttribute:
r"""Epilot internal user info"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[InternalUserAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[InternalUserAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[InternalUserAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[InternalUserAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/invitationemailattribute.py b/entity/src/epilot/models/shared/invitationemailattribute.py
index 0229c0bef..00ed5f2a9 100755
--- a/entity/src/epilot/models/shared/invitationemailattribute.py
+++ b/entity/src/epilot/models/shared/invitationemailattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class InvitationEmailAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class InvitationEmailAttributeTypeEnum(str, Enum):
- INVITATION_EMAIL = "invitation_email"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class InvitationEmailAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class InvitationEmailAttributeType(str, Enum):
+ INVITATION_EMAIL = 'invitation_email'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class InvitationEmailAttribute:
r"""Email address for send invitation"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[InvitationEmailAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[InvitationEmailAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[InvitationEmailAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[InvitationEmailAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/linkattribute.py b/entity/src/epilot/models/shared/linkattribute.py
index 650e8d6b4..0be9182ac 100755
--- a/entity/src/epilot/models/shared/linkattribute.py
+++ b/entity/src/epilot/models/shared/linkattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class LinkAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class LinkAttributeTypeEnum(str, Enum):
- LINK = "link"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class LinkAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class LinkAttributeType(str, Enum):
+ LINK = 'link'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class LinkAttribute:
r"""Link with title and href"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[LinkAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[LinkAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[LinkAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[LinkAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/multiselectattribute.py b/entity/src/epilot/models/shared/multiselectattribute.py
index e4e28e8e5..ee42a52d0 100755
--- a/entity/src/epilot/models/shared/multiselectattribute.py
+++ b/entity/src/epilot/models/shared/multiselectattribute.py
@@ -5,77 +5,118 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional, Union
+
+
+@dataclasses.dataclass
+class MultiSelectAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class MultiSelectAttributeOptions2:
+class MultiSelectAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
- value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
- title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class MultiSelectAttributeOptions2:
+ value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
-class MultiSelectAttributeTypeEnum(str, Enum):
- MULTISELECT = "multiselect"
- CHECKBOX = "checkbox"
+
+
+
+@dataclasses.dataclass
+class MultiSelectAttributeOptions:
+ pass
+
+class MultiSelectAttributeType(str, Enum):
+ MULTISELECT = 'multiselect'
+ CHECKBOX = 'checkbox'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class MultiSelectAttribute:
r"""Multi Choice Selection"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
allow_any: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allow_any'), 'exclude': lambda f: f is None }})
- r"""Allow arbitrary input values in addition to provided options"""
- allow_extra_options: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allow_extra_options'), 'exclude': lambda f: f is None }})
- r"""controls if the 360 ui will allow the user to enter a value which is not defined by the options"""
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ r"""Allow arbitrary input values in addition to provided options"""
+ allow_extra_options: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allow_extra_options') }})
+ r"""controls if the 360 ui will allow the user to enter a value which is not defined by the options"""
+ constraints: Optional[MultiSelectAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- disable_case_sensitive: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disable_case_sensitive'), 'exclude': lambda f: f is None }})
- r"""controls if the matching of values against the options is case sensitive or not"""
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ disable_case_sensitive: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disable_case_sensitive') }})
+ r"""controls if the matching of values against the options is case sensitive or not"""
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- options: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[MultiSelectAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ options: Optional[List[Union[str, MultiSelectAttributeOptions2]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[MultiSelectAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[MultiSelectAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/numberattribute.py b/entity/src/epilot/models/shared/numberattribute.py
index a4dc25dda..19ac4e00f 100755
--- a/entity/src/epilot/models/shared/numberattribute.py
+++ b/entity/src/epilot/models/shared/numberattribute.py
@@ -5,62 +5,97 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class NumberAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class NumberAttributeTypeEnum(str, Enum):
- NUMBER = "number"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class NumberAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class NumberAttributeType(str, Enum):
+ NUMBER = 'number'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class NumberAttribute:
r"""Numeric input"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[NumberAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
- format: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format'), 'exclude': lambda f: f is None }})
+ r"""This attribute should only be active when the feature flag is enabled"""
+ format: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('format'), 'exclude': lambda f: f is None }})
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[NumberAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[NumberAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[NumberAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/orderedlistattribute.py b/entity/src/epilot/models/shared/orderedlistattribute.py
index 80a71ff5c..39f766c09 100755
--- a/entity/src/epilot/models/shared/orderedlistattribute.py
+++ b/entity/src/epilot/models/shared/orderedlistattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class OrderedListAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class OrderedListAttributeTypeEnum(str, Enum):
- ORDERED_LIST = "ordered_list"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class OrderedListAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class OrderedListAttributeType(str, Enum):
+ ORDERED_LIST = 'ordered_list'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class OrderedListAttribute:
r"""Type of attribute to render N number of ordered fields"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[OrderedListAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[OrderedListAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[OrderedListAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[OrderedListAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/partnerorganisationattribute.py b/entity/src/epilot/models/shared/partnerorganisationattribute.py
new file mode 100755
index 000000000..8bf58167a
--- /dev/null
+++ b/entity/src/epilot/models/shared/partnerorganisationattribute.py
@@ -0,0 +1,100 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
+from epilot import utils
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class PartnerOrganisationAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PartnerOrganisationAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class PartnerOrganisationAttributeType(str, Enum):
+ PARTNER_ORGANISATION = 'partner_organisation'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PartnerOrganisationAttribute:
+ r"""Shared Partner Organisations"""
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[PartnerOrganisationAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
+ r"""This attribute should only be active when the feature flag is enabled"""
+ group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
+ hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
+ r"""When set to true, will hide the label of the field."""
+ icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
+ r"""Code name of the icon to used to represent this attribute.
+ The value must be a valid @epilot/base-elements Icon name
+ """
+ info_helpers: Optional[PartnerOrganisationAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
+ r"""Defines the conditional rendering expression for showing this field.
+ When a valid expression is parsed, their evaluation defines the visibility of this attribute.
+ Note: Empty or invalid expression have no effect on the field visibility.
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
+ r"""This attribute should only be active when the setting is enabled"""
+ show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[PartnerOrganisationAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/partnerstatusattribute.py b/entity/src/epilot/models/shared/partnerstatusattribute.py
index d9e381099..c31039e36 100755
--- a/entity/src/epilot/models/shared/partnerstatusattribute.py
+++ b/entity/src/epilot/models/shared/partnerstatusattribute.py
@@ -5,61 +5,96 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class PartnerStatusAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class PartnerStatusAttributeTypeEnum(str, Enum):
- PARTNER_STATUS = "partner_status"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PartnerStatusAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class PartnerStatusAttributeType(str, Enum):
+ PARTNER_STATUS = 'partner_status'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PartnerStatusAttribute:
r"""Partner Status"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[PartnerStatusAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[PartnerStatusAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[PartnerStatusAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[PartnerStatusAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/paymentmethodrelationattribute.py b/entity/src/epilot/models/shared/paymentmethodrelationattribute.py
index 0084656e3..d23270214 100755
--- a/entity/src/epilot/models/shared/paymentmethodrelationattribute.py
+++ b/entity/src/epilot/models/shared/paymentmethodrelationattribute.py
@@ -5,62 +5,97 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class PaymentMethodRelationAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class PaymentMethodRelationAttributeTypeEnum(str, Enum):
- RELATION_PAYMENT_METHOD = "relation_payment_method"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PaymentMethodRelationAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class PaymentMethodRelationAttributeType(str, Enum):
+ RELATION_PAYMENT_METHOD = 'relation_payment_method'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PaymentMethodRelationAttribute:
r"""Reference to a payment method attribute of another entity"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[PaymentMethodRelationAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[PaymentMethodRelationAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[PaymentMethodRelationAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[PaymentMethodRelationAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/purposeattribute.py b/entity/src/epilot/models/shared/purposeattribute.py
index 1f432b0d9..5fde92413 100755
--- a/entity/src/epilot/models/shared/purposeattribute.py
+++ b/entity/src/epilot/models/shared/purposeattribute.py
@@ -7,66 +7,100 @@
from datetime import datetime
from enum import Enum
from epilot import utils
-from marshmallow import fields
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class PurposeAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class PurposeAttributeTypeEnum(str, Enum):
- PURPOSE = "purpose"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class PurposeAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class PurposeAttributeType(str, Enum):
+ PURPOSE = 'purpose'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class PurposeAttribute:
r"""Entity Taxonomy"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[PurposeAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ info_helpers: Optional[PurposeAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- parents: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parents'), 'exclude': lambda f: f is None }})
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ parents: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parents'), 'exclude': lambda f: f is None }})
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[PurposeAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[PurposeAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/redirectentityview.py b/entity/src/epilot/models/shared/redirectentityview.py
index 50d922b0b..139a5ac1a 100755
--- a/entity/src/epilot/models/shared/redirectentityview.py
+++ b/entity/src/epilot/models/shared/redirectentityview.py
@@ -7,14 +7,14 @@
from epilot import utils
from typing import Optional
-class RedirectEntityViewViewTypeEnum(str, Enum):
- REDIRECT = "redirect"
+class RedirectEntityViewViewType(str, Enum):
+ REDIRECT = 'redirect'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class RedirectEntityView:
+ route: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('route'), 'exclude': lambda f: f is None }})
+ view_type: Optional[RedirectEntityViewViewType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
- route: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('route'), 'exclude': lambda f: f is None }})
- view_type: Optional[RedirectEntityViewViewTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('view_type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/relationattribute.py b/entity/src/epilot/models/shared/relationattribute.py
index bccae6af4..d405c076d 100755
--- a/entity/src/epilot/models/shared/relationattribute.py
+++ b/entity/src/epilot/models/shared/relationattribute.py
@@ -2,137 +2,203 @@
from __future__ import annotations
import dataclasses
+import dateutil.parser
+from ..shared import entityacl as shared_entityacl
+from ..shared import entityowner as shared_entityowner
+from ..shared import summaryfield as shared_summaryfield
from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
-class RelationAttributeActionsActionTypeEnum(str, Enum):
+class RelationAttributeActionsActionType(str, Enum):
r"""The action type. Currently supported actions:
-
+
| action | description |
|--------|-------------|
| add_existing | Enables the user to pick an existing entity to link as relation |
| create_new | Enables the user to create a new entity using the first/main `allowed_schemas` schema
| create_from_existing | Enables the user to pick an existing entity to clone from, while creating a blank new entity to link as relation |
-
"""
- ADD_EXISTING = "add_existing"
- CREATE_NEW = "create_new"
- CREATE_FROM_EXISTING = "create_from_existing"
+ ADD_EXISTING = 'add_existing'
+ CREATE_NEW = 'create_new'
+ CREATE_FROM_EXISTING = 'create_from_existing'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class RelationAttributeActions:
+class RelationAttributeActionsNewEntityItem:
+ created_at: Optional[datetime] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization Id the entity belongs to"""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ r"""URL-friendly identifier for the entity schema"""
+ title: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of entity"""
+ updated_at: Optional[datetime] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ acl: Optional[shared_entityacl.EntityACL] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_acl'), 'exclude': lambda f: f is None }})
+ r"""Access control list (ACL) for an entity. Defines sharing access to external orgs or users."""
+ owners: Optional[List[shared_entityowner.EntityOwner]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_owners'), 'exclude': lambda f: f is None }})
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags') }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
- action_type: Optional[RelationAttributeActionsActionTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_type'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class RelationAttributeActions:
+ action_type: Optional[RelationAttributeActionsActionType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('action_type'), 'exclude': lambda f: f is None }})
r"""The action type. Currently supported actions:
-
+
| action | description |
|--------|-------------|
| add_existing | Enables the user to pick an existing entity to link as relation |
| create_new | Enables the user to create a new entity using the first/main `allowed_schemas` schema
| create_from_existing | Enables the user to pick an existing entity to clone from, while creating a blank new entity to link as relation |
-
- """
+ """
default: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }})
- r"""Sets the action as the default action, visible as the main action button."""
+ r"""Sets the action as the default action, visible as the main action button."""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""Name of the feature flag that enables this action"""
+ r"""Name of the feature flag that enables this action"""
label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }})
- r"""The action label or action translation key (i18n)"""
- new_entity_item: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('new_entity_item'), 'exclude': lambda f: f is None }})
+ r"""The action label or action translation key (i18n)"""
+ new_entity_item: Optional[RelationAttributeActionsNewEntityItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('new_entity_item'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""Name of the setting flag that enables this action"""
+ r"""Name of the setting flag that enables this action"""
-class RelationAttributeDrawerSizeEnum(str, Enum):
- SMALL = "small"
- MEDIUM = "medium"
- LARGE = "large"
-class RelationAttributeEditModeEnum(str, Enum):
- LIST_VIEW = "list-view"
-class RelationAttributeRelationAffinityModeEnum(str, Enum):
+
+@dataclasses.dataclass
+class RelationAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
+
+class RelationAttributeDrawerSize(str, Enum):
+ SMALL = 'small'
+ MEDIUM = 'medium'
+ LARGE = 'large'
+
+class RelationAttributeEditMode(str, Enum):
+ LIST_VIEW = 'list-view'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class RelationAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class RelationAttributeRelationAffinityMode(str, Enum):
r"""Weak relation attributes are kept when duplicating an entity. Strong relation attributes are discarded when duplicating an entity."""
- WEAK = "weak"
- STRONG = "strong"
+ WEAK = 'weak'
+ STRONG = 'strong'
-class RelationAttributeRelationTypeEnum(str, Enum):
- HAS_MANY = "has_many"
- HAS_ONE = "has_one"
+class RelationAttributeRelationType(str, Enum):
+ HAS_MANY = 'has_many'
+ HAS_ONE = 'has_one'
-class RelationAttributeTypeEnum(str, Enum):
- RELATION = "relation"
+
+@dataclasses.dataclass
+class RelationAttributeSummaryFields:
+ pass
+
+class RelationAttributeType(str, Enum):
+ RELATION = 'relation'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class RelationAttribute:
r"""Entity Relationship"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- actions: Optional[list[RelationAttributeActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('actions'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ actions: Optional[List[RelationAttributeActions]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('actions'), 'exclude': lambda f: f is None }})
add_button_label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('add_button_label'), 'exclude': lambda f: f is None }})
- r"""Optional label for the add button. The translated value for add_button_lable is used, if found else the string is used as is."""
- allowed_schemas: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowedSchemas'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ r"""Optional label for the add button. The translated value for add_button_lable is used, if found else the string is used as is."""
+ allowed_schemas: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowedSchemas'), 'exclude': lambda f: f is None }})
+ constraints: Optional[RelationAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- details_view_mode_enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('details_view_mode_enabled'), 'exclude': lambda f: f is None }})
- r"""Enables the preview, edition, and creation of relation items on a Master-Details view mode."""
- drawer_size: Optional[RelationAttributeDrawerSizeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('drawer_size'), 'exclude': lambda f: f is None }})
- edit_mode: Optional[RelationAttributeEditModeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit_mode'), 'exclude': lambda f: f is None }})
- enable_relation_picker: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_relation_picker'), 'exclude': lambda f: f is None }})
- r"""When enable_relation_picker is set to true the user will be able to pick existing relations as values. Otherwise, the user will need to create new relation to link."""
- enable_relation_tags: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_relation_tags'), 'exclude': lambda f: f is None }})
- r"""When enable_relation_tags is set to true the user will be able to set tags(labels) in each relation item."""
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ details_view_mode_enabled: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('details_view_mode_enabled'), 'exclude': lambda f: f is None }})
+ r"""Enables the preview, edition, and creation of relation items on a Master-Details view mode."""
+ drawer_size: Optional[RelationAttributeDrawerSize] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('drawer_size'), 'exclude': lambda f: f is None }})
+ edit_mode: Optional[RelationAttributeEditMode] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('edit_mode'), 'exclude': lambda f: f is None }})
+ enable_relation_picker: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_relation_picker'), 'exclude': lambda f: f is None }})
+ r"""When enable_relation_picker is set to true the user will be able to pick existing relations as values. Otherwise, the user will need to create new relation to link."""
+ enable_relation_tags: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_relation_tags'), 'exclude': lambda f: f is None }})
+ r"""When enable_relation_tags is set to true the user will be able to set tags(labels) in each relation item."""
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
- icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ r"""When set to true, will hide the label of the field."""
+ icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
+ info_helpers: Optional[RelationAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
- relation_affinity_mode: Optional[RelationAttributeRelationAffinityModeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relation_affinity_mode'), 'exclude': lambda f: f is None }})
- r"""Weak relation attributes are kept when duplicating an entity. Strong relation attributes are discarded when duplicating an entity."""
- relation_type: Optional[RelationAttributeRelationTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relation_type'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ relation_affinity_mode: Optional[RelationAttributeRelationAffinityMode] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relation_affinity_mode'), 'exclude': lambda f: f is None }})
+ r"""Weak relation attributes are kept when duplicating an entity. Strong relation attributes are discarded when duplicating an entity."""
+ relation_type: Optional[RelationAttributeRelationType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relation_type'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
- reverse_attributes: Optional[dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reverse_attributes'), 'exclude': lambda f: f is None }})
- r"""Map of schema slug to target relation attribute"""
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ reverse_attributes: Optional[Dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reverse_attributes'), 'exclude': lambda f: f is None }})
+ r"""Map of schema slug to target relation attribute"""
search_placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search_placeholder'), 'exclude': lambda f: f is None }})
- r"""Optional placeholder text for the relation search input. The translated value for search_placeholder is used, if found else the string is used as is."""
+ r"""Optional placeholder text for the relation search input. The translated value for search_placeholder is used, if found else the string is used as is."""
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- summary_fields: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_fields'), 'exclude': lambda f: f is None }})
- type: Optional[RelationAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ summary_fields: Optional[List[Union[str, shared_summaryfield.SummaryField]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary_fields'), 'exclude': lambda f: f is None }})
+ type: Optional[RelationAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/relationentity.py b/entity/src/epilot/models/shared/relationentity.py
new file mode 100755
index 000000000..3696832c5
--- /dev/null
+++ b/entity/src/epilot/models/shared/relationentity.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+from __future__ import annotations
+import dataclasses
+import dateutil.parser
+from ..shared import entityacl as shared_entityacl
+from ..shared import entityowner as shared_entityowner
+from ..shared import relationitem as shared_relationitem
+from dataclasses_json import Undefined, dataclass_json
+from datetime import datetime
+from epilot import utils
+from typing import Any, Dict, List, Optional
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class RelationEntity:
+ created_at: Optional[datetime] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_created_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_id') }})
+ org: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_org') }})
+ r"""Organization Id the entity belongs to"""
+ schema: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_schema') }})
+ r"""URL-friendly identifier for the entity schema"""
+ title: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_title') }})
+ r"""Title of entity"""
+ updated_at: Optional[datetime] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_updated_at'), 'encoder': utils.datetimeisoformat(False), 'decoder': dateutil.parser.isoparse }})
+ acl: Optional[shared_entityacl.EntityACL] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_acl'), 'exclude': lambda f: f is None }})
+ r"""Access control list (ACL) for an entity. Defines sharing access to external orgs or users."""
+ owners: Optional[List[shared_entityowner.EntityOwner]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_owners'), 'exclude': lambda f: f is None }})
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags') }})
+ dollar_relation: Optional[shared_relationitem.RelationItem] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('$relation'), 'exclude': lambda f: f is None }})
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/relationitem.py b/entity/src/epilot/models/shared/relationitem.py
index d9d616e2e..982c9404f 100755
--- a/entity/src/epilot/models/shared/relationitem.py
+++ b/entity/src/epilot/models/shared/relationitem.py
@@ -4,17 +4,16 @@
import dataclasses
from dataclasses_json import Undefined, dataclass_json
from epilot import utils
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class RelationItem:
- r"""Success"""
-
- attribute: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute') }})
- entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
- tags: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
+ attribute: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('attribute') }})
+ entity_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_id') }})
+ tags: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_tags'), 'exclude': lambda f: f is None }})
reverse: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('reverse'), 'exclude': lambda f: f is None }})
- r"""Whether this is a reverse relation"""
-
\ No newline at end of file
+ r"""Whether this is a reverse relation"""
+
+
diff --git a/entity/src/epilot/models/shared/repeatableattribute.py b/entity/src/epilot/models/shared/repeatableattribute.py
index 7bf8c4026..ac60f5f1c 100755
--- a/entity/src/epilot/models/shared/repeatableattribute.py
+++ b/entity/src/epilot/models/shared/repeatableattribute.py
@@ -5,79 +5,114 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
-class RepeatableAttributeRelationAffinityModeEnum(str, Enum):
+
+@dataclasses.dataclass
+class RepeatableAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class RepeatableAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class RepeatableAttributeRelationAffinityMode(str, Enum):
r"""Weak repeatable attributes are kept when duplicating an entity. Strong repeatable attributes are discarded when duplicating an entity."""
- WEAK = "weak"
- STRONG = "strong"
+ WEAK = 'weak'
+ STRONG = 'strong'
-class RepeatableAttributeTypeEnum(str, Enum):
- STRING = "string"
- PHONE = "phone"
- EMAIL = "email"
- ADDRESS = "address"
- RELATION = "relation"
- PAYMENT = "payment"
- PRICE_COMPONENT = "price_component"
- DATE = "date"
+class RepeatableAttributeType(str, Enum):
+ STRING = 'string'
+ PHONE = 'phone'
+ EMAIL = 'email'
+ ADDRESS = 'address'
+ RELATION = 'relation'
+ PAYMENT = 'payment'
+ PRICE_COMPONENT = 'price_component'
+ DATE = 'date'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class RepeatableAttribute:
r"""Repeatable (add N number of fields)"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[RepeatableAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- enable_relation_picker: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_relation_picker'), 'exclude': lambda f: f is None }})
- r"""when enable_relation_picker is set to true the user will be able to pick existing relations as values. Otherwise, the user will need to create new relation to link."""
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ enable_relation_picker: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enable_relation_picker'), 'exclude': lambda f: f is None }})
+ r"""when enable_relation_picker is set to true the user will be able to pick existing relations as values. Otherwise, the user will need to create new relation to link."""
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ has_primary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has_primary'), 'exclude': lambda f: f is None }})
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[RepeatableAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
- relation_affinity_mode: Optional[RepeatableAttributeRelationAffinityModeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relation_affinity_mode'), 'exclude': lambda f: f is None }})
- r"""Weak repeatable attributes are kept when duplicating an entity. Strong repeatable attributes are discarded when duplicating an entity."""
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ relation_affinity_mode: Optional[RepeatableAttributeRelationAffinityMode] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relation_affinity_mode'), 'exclude': lambda f: f is None }})
+ r"""Weak repeatable attributes are kept when duplicating an entity. Strong repeatable attributes are discarded when duplicating an entity."""
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- repeatable: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('repeatable'), 'exclude': lambda f: f is None }})
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ repeatable: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('repeatable'), 'exclude': lambda f: f is None }})
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[RepeatableAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[RepeatableAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/savedview.py b/entity/src/epilot/models/shared/savedview.py
index c32adcfd3..9e9b1d192 100755
--- a/entity/src/epilot/models/shared/savedview.py
+++ b/entity/src/epilot/models/shared/savedview.py
@@ -3,31 +3,54 @@
from __future__ import annotations
import dataclasses
from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
+
+class SavedViewCreatedBy2Source(str, Enum):
+ SYSTEM = 'SYSTEM'
+ BLUEPRINT = 'BLUEPRINT'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SavedViewCreatedBy2:
+ r"""A system-created view"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ source: Optional[SavedViewCreatedBy2Source] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavedViewCreatedBy1:
r"""A user that created the view"""
-
- user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id'), 'exclude': lambda f: f is None }})
+ user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id'), 'exclude': lambda f: f is None }})
+
+
+@dataclasses.dataclass
+class SavedViewCreatedBy:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavedView:
r"""A saved entity view"""
-
- created_by: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_by') }})
+ created_by: Union[SavedViewCreatedBy1, SavedViewCreatedBy2] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_by') }})
name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- r"""User-friendly identifier for the saved view"""
- slug: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
- r"""list of schemas a view can belong to"""
- ui_config: dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config') }})
+ r"""User-friendly identifier for the saved view"""
+ slug: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
+ r"""list of schemas a view can belong to"""
+ ui_config: Dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config') }})
+ is_favorited_by: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isFavoritedBy'), 'exclude': lambda f: f is None }})
+ r"""List of users (IDs) that have favorited the view"""
org: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org'), 'exclude': lambda f: f is None }})
- r"""Organisation ID a view belongs to"""
+ r"""Organisation ID a view belongs to"""
shared: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('shared'), 'exclude': lambda f: f is None }})
- r"""boolean property for if a view is shared with organisation"""
-
\ No newline at end of file
+ r"""boolean property for if a view is shared with organisation"""
+
+
diff --git a/entity/src/epilot/models/shared/savedviewitem.py b/entity/src/epilot/models/shared/savedviewitem.py
index ae466a0f4..d6e10f17e 100755
--- a/entity/src/epilot/models/shared/savedviewitem.py
+++ b/entity/src/epilot/models/shared/savedviewitem.py
@@ -3,35 +3,58 @@
from __future__ import annotations
import dataclasses
from dataclasses_json import Undefined, dataclass_json
+from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, List, Optional, Union
+
+class SavedViewItemCreatedBy2Source(str, Enum):
+ SYSTEM = 'SYSTEM'
+ BLUEPRINT = 'BLUEPRINT'
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SavedViewItemCreatedBy2:
+ r"""A system-created view"""
+ additional_properties: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: f is None }})
+ source: Optional[SavedViewItemCreatedBy2Source] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('source'), 'exclude': lambda f: f is None }})
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavedViewItemCreatedBy1:
r"""A user that created the view"""
-
- user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id'), 'exclude': lambda f: f is None }})
+ user_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id'), 'exclude': lambda f: f is None }})
+
+
+@dataclasses.dataclass
+class SavedViewItemCreatedBy:
+ pass
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SavedViewItem:
r"""A saved entity view"""
-
- created_by: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_by') }})
+ created_by: Union[SavedViewItemCreatedBy1, SavedViewItemCreatedBy2] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_by') }})
name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- r"""User-friendly identifier for the saved view"""
- slug: list[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
- r"""list of schemas a view can belong to"""
- ui_config: dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config') }})
- created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }})
+ r"""User-friendly identifier for the saved view"""
+ slug: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
+ r"""list of schemas a view can belong to"""
+ ui_config: Dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ui_config') }})
+ created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }})
id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- r"""Generated uuid for a saved view"""
+ r"""Generated uuid for a saved view"""
+ is_favorited_by: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('isFavoritedBy'), 'exclude': lambda f: f is None }})
+ r"""List of users (IDs) that have favorited the view"""
org: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org'), 'exclude': lambda f: f is None }})
- r"""Organisation ID a view belongs to"""
+ r"""Organisation ID a view belongs to"""
shared: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('shared'), 'exclude': lambda f: f is None }})
- r"""boolean property for if a view is shared with organisation"""
- updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""boolean property for if a view is shared with organisation"""
+ updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/searchmappings.py b/entity/src/epilot/models/shared/searchmappings.py
index 25dd74a04..c1eee0c84 100755
--- a/entity/src/epilot/models/shared/searchmappings.py
+++ b/entity/src/epilot/models/shared/searchmappings.py
@@ -5,25 +5,25 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, Dict, Optional
-class SearchMappingsTypeEnum(str, Enum):
- KEYWORD = "keyword"
- TEXT = "text"
- BOOLEAN = "boolean"
- INTEGER = "integer"
- LONG = "long"
- FLOAT = "float"
- DATE = "date"
- FLATTENED = "flattened"
- NESTED = "nested"
+class SearchMappingsType(str, Enum):
+ KEYWORD = 'keyword'
+ TEXT = 'text'
+ BOOLEAN = 'boolean'
+ INTEGER = 'integer'
+ LONG = 'long'
+ FLOAT = 'float'
+ DATE = 'date'
+ FLATTENED = 'flattened'
+ NESTED = 'nested'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SearchMappings:
+ fields: Optional[Dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fields'), 'exclude': lambda f: f is None }})
+ index: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }})
+ type: Optional[SearchMappingsType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- fields: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fields'), 'exclude': lambda f: f is None }})
- index: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }})
- type: Optional[SearchMappingsTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/security.py b/entity/src/epilot/models/shared/security.py
index 0dedc5e9a..95a8719c2 100755
--- a/entity/src/epilot/models/shared/security.py
+++ b/entity/src/epilot/models/shared/security.py
@@ -7,7 +7,7 @@
@dataclasses.dataclass
class Security:
+ epilot_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
+ epilot_org: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'x-epilot-org-id' }})
- epilot_auth: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }})
- epilot_org: Optional[str] = dataclasses.field(default=None, metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'x-epilot-org-id' }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/selectattribute.py b/entity/src/epilot/models/shared/selectattribute.py
index 0952db1f8..1d18811fc 100755
--- a/entity/src/epilot/models/shared/selectattribute.py
+++ b/entity/src/epilot/models/shared/selectattribute.py
@@ -5,73 +5,114 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional, Union
+
+
+@dataclasses.dataclass
+class SelectAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class SelectAttributeOptions1:
+class SelectAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
- value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
- title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SelectAttributeOptions1:
+ value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
-class SelectAttributeTypeEnum(str, Enum):
- SELECT = "select"
- RADIO = "radio"
+
+
+
+@dataclasses.dataclass
+class SelectAttributeOptions:
+ pass
+
+class SelectAttributeType(str, Enum):
+ SELECT = 'select'
+ RADIO = 'radio'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SelectAttribute:
r"""Dropdown select"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
allow_any: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allow_any'), 'exclude': lambda f: f is None }})
- r"""Allow arbitrary input values in addition to provided options"""
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ r"""Allow arbitrary input values in addition to provided options"""
+ constraints: Optional[SelectAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- options: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[SelectAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ options: Optional[List[Union[SelectAttributeOptions1, str]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[SelectAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[SelectAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/sequenceattribute.py b/entity/src/epilot/models/shared/sequenceattribute.py
index a08ddb1a1..99317c667 100755
--- a/entity/src/epilot/models/shared/sequenceattribute.py
+++ b/entity/src/epilot/models/shared/sequenceattribute.py
@@ -5,64 +5,99 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class SequenceAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class SequenceAttributeTypeEnum(str, Enum):
- SEQUENCE = "sequence"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class SequenceAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class SequenceAttributeType(str, Enum):
+ SEQUENCE = 'sequence'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class SequenceAttribute:
r"""Sequence of unique identifiers"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[SequenceAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[SequenceAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('prefix'), 'exclude': lambda f: f is None }})
- r"""Prefix added before the sequence number"""
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Prefix added before the sequence number"""
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- start_number: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_number'), 'exclude': lambda f: f is None }})
- type: Optional[SequenceAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ start_number: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('start_number'), 'exclude': lambda f: f is None }})
+ type: Optional[SequenceAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/statusattribute.py b/entity/src/epilot/models/shared/statusattribute.py
index 627b2e887..deec3d7f5 100755
--- a/entity/src/epilot/models/shared/statusattribute.py
+++ b/entity/src/epilot/models/shared/statusattribute.py
@@ -5,70 +5,113 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional, Union
+
+
+@dataclasses.dataclass
+class StatusAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
+
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
-class StatusAttributeOptions2:
+class StatusAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
- value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
- title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
+
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class StatusAttributeOptions2:
+ value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
+ r"""The stored value of the option"""
+ title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }})
+ r"""The displayed title of the option"""
-class StatusAttributeTypeEnum(str, Enum):
- STATUS = "status"
+
+
+
+@dataclasses.dataclass
+class StatusAttributeOptions:
+ pass
+
+class StatusAttributeType(str, Enum):
+ STATUS = 'status'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class StatusAttribute:
r"""Status select"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[StatusAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- options: Optional[list[Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[StatusAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ options: Optional[List[Union[str, StatusAttributeOptions2]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[StatusAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[StatusAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/summaryattribute.py b/entity/src/epilot/models/shared/summaryattribute.py
index f6aa68c1e..e3cef4f93 100755
--- a/entity/src/epilot/models/shared/summaryattribute.py
+++ b/entity/src/epilot/models/shared/summaryattribute.py
@@ -21,25 +21,23 @@ class SummaryAttribute:
}
```
The value field supports handlebar expressions from which you can pick any field from the entity state.
-
"""
-
label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- r"""Label to be shown on the top of the value."""
+ r"""Label to be shown on the top of the value."""
value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value') }})
- r"""A static value or an handlebar expression."""
+ r"""A static value or an handlebar expression."""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""Binds summary field visibility to the feature flag state."""
+ r"""Binds summary field visibility to the feature flag state."""
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
+ """
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""Binds summary field visibility to the setting flag state."""
+ r"""Binds summary field visibility to the setting flag state."""
show_as_tag: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_as_tag'), 'exclude': lambda f: f is None }})
- r"""Displays the value within a tag chip."""
+ r"""Displays the value within a tag chip."""
tag_color: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag_color'), 'exclude': lambda f: f is None }})
- r"""CSS hex color or CSS color name for the tag chip."""
-
\ No newline at end of file
+ r"""CSS hex color or CSS color name for the tag chip."""
+
+
diff --git a/entity/src/epilot/models/shared/summaryfield.py b/entity/src/epilot/models/shared/summaryfield.py
index fb74fef65..69b3a4656 100755
--- a/entity/src/epilot/models/shared/summaryfield.py
+++ b/entity/src/epilot/models/shared/summaryfield.py
@@ -11,9 +11,9 @@
@dataclasses.dataclass
class SummaryField:
r"""Summary Fields are displayed inside list view as a resume of the relation entity."""
-
display_as: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('display_as'), 'exclude': lambda f: f is None }})
- r"""An hint on how to display the summary field"""
+ r"""An hint on how to display the summary field"""
field: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('field'), 'exclude': lambda f: f is None }})
- r"""The field from the entity attributes to display"""
-
\ No newline at end of file
+ r"""The field from the entity attributes to display"""
+
+
diff --git a/entity/src/epilot/models/shared/tagsattribute.py b/entity/src/epilot/models/shared/tagsattribute.py
index 9b8dbdfa5..c587c67d5 100755
--- a/entity/src/epilot/models/shared/tagsattribute.py
+++ b/entity/src/epilot/models/shared/tagsattribute.py
@@ -5,63 +5,98 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class TagsAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class TagsAttributeTypeEnum(str, Enum):
- TAGS = "tags"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TagsAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class TagsAttributeType(str, Enum):
+ TAGS = 'tags'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class TagsAttribute:
r"""Tags"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[TagsAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- options: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[TagsAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ options: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('options'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- suggestions: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('suggestions'), 'exclude': lambda f: f is None }})
- type: Optional[TagsAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ suggestions: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('suggestions'), 'exclude': lambda f: f is None }})
+ type: Optional[TagsAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/taxonomy.py b/entity/src/epilot/models/shared/taxonomy.py
index b5a34a9c0..1acb26816 100755
--- a/entity/src/epilot/models/shared/taxonomy.py
+++ b/entity/src/epilot/models/shared/taxonomy.py
@@ -6,21 +6,19 @@
from dataclasses_json import Undefined, dataclass_json
from datetime import datetime
from epilot import utils
-from marshmallow import fields
from typing import Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class Taxonomy:
- r"""Taxonomy"""
-
name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- r"""A human friendly name of a Taxonomy e.g. Purpose, Product Category, Folder, Tag"""
+ r"""A human friendly name of a Taxonomy e.g. Purpose, Product Category, Folder, Tag"""
slug: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('slug') }})
- r"""URL-friendly name for taxonomy"""
- created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
+ r"""URL-friendly name for taxonomy"""
+ created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
plural: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('plural'), 'exclude': lambda f: f is None }})
- r"""Plural name of a Taxonomy e.g. Purposes, Product Categories, Folders, Tags"""
- updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Plural name of a Taxonomy e.g. Purposes, Product Categories, Folders, Tags"""
+ updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/taxonomyclassification.py b/entity/src/epilot/models/shared/taxonomyclassification.py
index 1440e7acc..fe3226888 100755
--- a/entity/src/epilot/models/shared/taxonomyclassification.py
+++ b/entity/src/epilot/models/shared/taxonomyclassification.py
@@ -6,17 +6,16 @@
from dataclasses_json import Undefined, dataclass_json
from datetime import datetime
from epilot import utils
-from marshmallow import fields
-from typing import Optional
+from typing import List, Optional
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class TaxonomyClassification:
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
+ id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
+ parents: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parents'), 'exclude': lambda f: f is None }})
+ updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
- id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }})
- parents: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parents'), 'exclude': lambda f: f is None }})
- updated_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'mm_field': fields.DateTime(format='iso'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+
diff --git a/entity/src/epilot/models/shared/textattribute.py b/entity/src/epilot/models/shared/textattribute.py
index 8c2a0bd08..ef3f9f67a 100755
--- a/entity/src/epilot/models/shared/textattribute.py
+++ b/entity/src/epilot/models/shared/textattribute.py
@@ -5,62 +5,97 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class TextAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class TextAttributeTypeEnum(str, Enum):
- STRING = "string"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class TextAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class TextAttributeType(str, Enum):
+ STRING = 'string'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class TextAttribute:
r"""Textarea or text input"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[TextAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- multiline: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiline'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[TextAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ multiline: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiline'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[TextAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[TextAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/models/shared/userrelationattribute.py b/entity/src/epilot/models/shared/userrelationattribute.py
index dd11bd3d1..3c7f3aac8 100755
--- a/entity/src/epilot/models/shared/userrelationattribute.py
+++ b/entity/src/epilot/models/shared/userrelationattribute.py
@@ -5,62 +5,97 @@
from dataclasses_json import Undefined, dataclass_json
from enum import Enum
from epilot import utils
-from typing import Any, Optional
+from typing import Any, List, Optional
+
+
+@dataclasses.dataclass
+class UserRelationAttributeConstraints:
+ r"""A set of constraints applicable to the attribute.
+ These constraints should and will be enforced by the attribute renderer.
+ """
+
-class UserRelationAttributeTypeEnum(str, Enum):
- RELATION_USER = "relation_user"
+
+
+@dataclass_json(undefined=Undefined.EXCLUDE)
+@dataclasses.dataclass
+class UserRelationAttributeInfoHelpers:
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ hint_custom_component: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_custom_component'), 'exclude': lambda f: f is None }})
+ r"""The name of the custom component to be used as the hint helper.
+ The component should be registered in the `@epilot360/entity-ui` on the index of the components directory.
+ When specified it overrides the `hint_text` or `hint_text_key` configuration.
+ """
+ hint_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text'), 'exclude': lambda f: f is None }})
+ r"""The text to be displayed in the attribute hint helper.
+ When specified it overrides the `hint_text_key` configuration.
+ """
+ hint_text_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_text_key'), 'exclude': lambda f: f is None }})
+ r"""The key of the hint text to be displayed in the attribute hint helper.
+ The key should be a valid i18n key.
+ """
+ hint_tooltip_placement: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hint_tooltip_placement'), 'exclude': lambda f: f is None }})
+ r"""The placement of the hint tooltip.
+ The value should be a valid `@mui/core` tooltip placement.
+ """
+
+
+
+class UserRelationAttributeType(str, Enum):
+ RELATION_USER = 'relation_user'
@dataclass_json(undefined=Undefined.EXCLUDE)
@dataclasses.dataclass
class UserRelationAttribute:
r"""User Relationship"""
-
- label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
- name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
- purpose: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
- constraints: Optional[dict[str, Any]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
+ label: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label') }})
+ name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }})
+ purpose: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_purpose'), 'exclude': lambda f: f is None }})
+ constraints: Optional[UserRelationAttributeConstraints] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('constraints'), 'exclude': lambda f: f is None }})
r"""A set of constraints applicable to the attribute.
These constraints should and will be enforced by the attribute renderer.
-
- """
- default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
- deprecated: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
- entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` disables editing the attribute on the entity builder UI"""
+ """
+ default_value: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value'), 'exclude': lambda f: f is None }})
+ deprecated: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deprecated'), 'exclude': lambda f: f is None }})
+ entity_builder_disable_edit: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('entity_builder_disable_edit'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` disables editing the attribute on the entity builder UI"""
feature_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('feature_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the feature flag is enabled"""
+ r"""This attribute should only be active when the feature flag is enabled"""
group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }})
- r"""Which group the attribute should appear in. Accepts group ID or group name"""
- hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
- r"""Do not render attribute in entity views"""
+ r"""Which group the attribute should appear in. Accepts group ID or group name"""
+ hidden: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }})
+ r"""Do not render attribute in entity views"""
hide_label: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hide_label'), 'exclude': lambda f: f is None }})
- r"""When set to true, will hide the label of the field."""
+ r"""When set to true, will hide the label of the field."""
icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }})
r"""Code name of the icon to used to represent this attribute.
The value must be a valid @epilot/base-elements Icon name
-
- """
- layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
- multiple: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiple'), 'exclude': lambda f: f is None }})
+ """
+ info_helpers: Optional[UserRelationAttributeInfoHelpers] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('info_helpers'), 'exclude': lambda f: f is None }})
+ r"""A set of configurations meant to document and assist the user in filling the attribute."""
+ layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('layout'), 'exclude': lambda f: f is None }})
+ multiple: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiple'), 'exclude': lambda f: f is None }})
order: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('order'), 'exclude': lambda f: f is None }})
- r"""Attribute sort order (ascending) in group"""
- placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
- preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
- protected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
- r"""Setting to `true` prevents the attribute from being modified / deleted"""
- readonly: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
+ r"""Attribute sort order (ascending) in group"""
+ placeholder: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('placeholder'), 'exclude': lambda f: f is None }})
+ preview_value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('preview_value_formatter'), 'exclude': lambda f: f is None }})
+ protected: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protected'), 'exclude': lambda f: f is None }})
+ r"""Setting to `true` prevents the attribute from being modified / deleted"""
+ readonly: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readonly'), 'exclude': lambda f: f is None }})
render_condition: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('render_condition'), 'exclude': lambda f: f is None }})
r"""Defines the conditional rendering expression for showing this field.
When a valid expression is parsed, their evaluation defines the visibility of this attribute.
Note: Empty or invalid expression have no effect on the field visibility.
-
- """
- required: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
+ """
+ required: Optional[bool] = dataclasses.field(default=False, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('required'), 'exclude': lambda f: f is None }})
setting_flag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('setting_flag'), 'exclude': lambda f: f is None }})
- r"""This attribute should only be active when the setting is enabled"""
+ r"""This attribute should only be active when the setting is enabled"""
show_in_table: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('show_in_table'), 'exclude': lambda f: f is None }})
- r"""Render as a column in table views. When defined, overrides `hidden`"""
- type: Optional[UserRelationAttributeTypeEnum] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
- value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
-
\ No newline at end of file
+ r"""Render as a column in table views. When defined, overrides `hidden`"""
+ sortable: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sortable'), 'exclude': lambda f: f is None }})
+ r"""Allow sorting by this attribute in table views if `show_in_table` is true"""
+ type: Optional[UserRelationAttributeType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }})
+ value_formatter: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value_formatter'), 'exclude': lambda f: f is None }})
+
+
diff --git a/entity/src/epilot/relations.py b/entity/src/epilot/relations.py
index 679051157..96c075caf 100755
--- a/entity/src/epilot/relations.py
+++ b/entity/src/epilot/relations.py
@@ -1,42 +1,34 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
-from typing import Any, Optional
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
+from typing import List, Optional, Union
class Relations:
r"""Entity Relationships"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def add_relations(self, request: operations.AddRelationsRequest) -> operations.AddRelationsResponse:
r"""addRelations
Relates one or more entities to parent entity by adding items to a relation attribute
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.AddRelationsRequest, base_url, '/v1/entity/{slug}/{id}/relations', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.AddRelationsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -47,78 +39,116 @@ def add_relations(self, request: operations.AddRelationsRequest) -> operations.A
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.RelationItem])
res.relation_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def delete_relation(self, request: operations.DeleteRelationRequest) -> operations.DeleteRelationResponse:
r"""deleteRelation
Removes relation between two entities
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.DeleteRelationRequest, base_url, '/v1/entity/{slug}/{id}/relations/{attribute}/{entity_id}', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.DeleteRelationRequest, request)
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('DELETE', url, params=query_params)
+ http_res = client.request('DELETE', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeleteRelationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 204:
- pass
return res
+
+ def get_related_entities_count(self, request: operations.GetRelatedEntitiesCountRequest) -> operations.GetRelatedEntitiesCountResponse:
+ r"""getRelatedEntitiesCount
+ Returns the amount of unique related entities for an entity - includes direct and reverse relations.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = utils.generate_url(operations.GetRelatedEntitiesCountRequest, base_url, '/v2/entity/{slug}/{id}/relations/count', request)
+ headers = {}
+ query_params = utils.get_query_params(operations.GetRelatedEntitiesCountRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetRelatedEntitiesCountResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.GetRelatedEntitiesCount])
+ res.get_related_entities_count = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
def get_relations(self, request: operations.GetRelationsRequest) -> operations.GetRelationsResponse:
r"""getRelations
Returns 1st level direct relations for an entity.
-
+
You can control whether to return the full entity or just the relation item with the `?hydrate` query param.
-
+
Reverse relations i.e. entities referring to this entity are included with the `?include_reverse` query param.
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetRelationsRequest, base_url, '/v1/entity/{slug}/{id}/relations', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.GetRelationsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetRelationsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
if http_res.status_code == 200:
if utils.match_content_type(content_type, 'application/json'):
- out = utils.unmarshal_json(http_res.text, Optional[list[Any]])
+ out = utils.unmarshal_json(http_res.text, Optional[List[Union[shared.RelationItem, shared.RelationEntity]]])
res.get_relations_resp = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_relations_v2(self, request: operations.GetRelationsV2Request) -> operations.GetRelationsV2Response:
r"""getRelationsV2
Returns 1st level direct relations for an entity with pagination.
-
+
You can control whether to return the full entity or just the relation item with the `?hydrate` query param.
-
+
Reverse relations i.e. entities referring to this entity are included with the `?include_reverse` query param.
-
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetRelationsV2Request, base_url, '/v2/entity/{slug}/{id}/relations', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.GetRelationsV2Request, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetRelationsV2Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -127,24 +157,61 @@ def get_relations_v2(self, request: operations.GetRelationsV2Request) -> operati
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.GetRelationsRespWithPagination])
res.get_relations_resp_with_pagination = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
+ def get_relations_v3(self, request: operations.GetRelationsV3Request) -> operations.GetRelationsV3Response:
+ r"""getRelationsV3
+ Returns 1st level direct relations for an entity with pagination.
+
+ You can control whether to return the full entity or just the relation item with the `?hydrate` query param.
+
+ Reverse relations i.e. entities referring to this entity are included with the `?include_reverse` query param.
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = utils.generate_url(operations.GetRelationsV3Request, base_url, '/v3/entity/{slug}/{id}/relations', request)
+ headers = {}
+ query_params = utils.get_query_params(operations.GetRelationsV3Request, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, params=query_params, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.GetRelationsV3Response(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[shared.GetRelationsRespWithPagination])
+ res.get_relations_resp_with_pagination = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_relation(self, request: operations.UpdateRelationRequest) -> operations.UpdateRelationResponse:
r"""updateRelation
Updates an existing relation between two entities.
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateRelationRequest, base_url, '/v1/entity/{slug}/{id}/relations/{attribute}/{entity_id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.UpdateRelationRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PUT', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -155,6 +222,8 @@ def update_relation(self, request: operations.UpdateRelationRequest) -> operatio
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.RelationItem])
res.relation_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/entity/src/epilot/saved_views.py b/entity/src/epilot/saved_views.py
index d3bb713a5..2ba432e2f 100755
--- a/entity/src/epilot/saved_views.py
+++ b/entity/src/epilot/saved_views.py
@@ -1,41 +1,33 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
from typing import Optional
class SavedViews:
r"""Saved Views for Entities"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def create_saved_view(self, request: shared.SavedView) -> operations.CreateSavedViewResponse:
r"""createSavedView
Creates a new saved view
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/view'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/view'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -46,42 +38,48 @@ def create_saved_view(self, request: shared.SavedView) -> operations.CreateSaved
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.SavedViewItem])
res.saved_view_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def delete_saved_view(self, request: operations.DeleteSavedViewRequest) -> operations.DeleteSavedViewResponse:
r"""deleteSavedView
Deletes a saved view
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.DeleteSavedViewRequest, base_url, '/v1/entity/view/{id}', request)
+ headers = {}
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('DELETE', url)
+ http_res = client.request('DELETE', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeleteSavedViewResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 200:
- pass
return res
+
def get_saved_view(self, request: operations.GetSavedViewRequest) -> operations.GetSavedViewResponse:
r"""getSavedView
Gets Saved View configuration by id.
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetSavedViewRequest, base_url, '/v1/entity/view/{id}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetSavedViewResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -90,21 +88,54 @@ def get_saved_view(self, request: operations.GetSavedViewRequest) -> operations.
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetSavedView200ApplicationJSON])
res.get_saved_view_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
+ def list_favorite_views_for_user(self) -> operations.ListFavoriteViewsForUserResponse:
+ r"""listFavoriteViewsForUser
+ Get the Favorite Saved Views for user based on the schema
+ """
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+
+ url = base_url + '/v1/entity/views/favorites'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+
+ client = self.sdk_configuration.security_client
+
+ http_res = client.request('GET', url, headers=headers)
+ content_type = http_res.headers.get('Content-Type')
+
+ res = operations.ListFavoriteViewsForUserResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
+
+ if http_res.status_code == 200:
+ if utils.match_content_type(content_type, 'application/json'):
+ out = utils.unmarshal_json(http_res.text, Optional[operations.ListFavoriteViewsForUser200ApplicationJSON])
+ res.list_favorite_views_for_user_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
+
+ return res
+
+
def list_saved_views(self) -> operations.ListSavedViewsResponse:
r"""listSavedViews
Get the Saved Views based on the schema
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/views'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/views'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListSavedViewsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -113,23 +144,27 @@ def list_saved_views(self) -> operations.ListSavedViewsResponse:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListSavedViews200ApplicationJSON])
res.list_saved_views_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_saved_view(self, request: operations.UpdateSavedViewRequest) -> operations.UpdateSavedViewResponse:
r"""updateSavedView
Updates a saved view
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateSavedViewRequest, base_url, '/v1/entity/view/{id}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "saved_view", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "saved_view", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PUT', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -140,6 +175,8 @@ def update_saved_view(self, request: operations.UpdateSavedViewRequest) -> opera
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.SavedViewItem])
res.saved_view_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/entity/src/epilot/schemas.py b/entity/src/epilot/schemas.py
index b0d26e82e..0239c9d9e 100755
--- a/entity/src/epilot/schemas.py
+++ b/entity/src/epilot/schemas.py
@@ -1,61 +1,55 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
from typing import Optional
class Schemas:
r"""Model Entities"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def delete_schema(self, request: operations.DeleteSchemaRequest) -> operations.DeleteSchemaResponse:
r"""deleteSchema
Delete a schema, or a specific version of a schema
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.DeleteSchemaRequest, base_url, '/v1/entity/schemas/{slug}', request)
+ headers = {}
+ headers['Accept'] = '*/*'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('DELETE', url)
+ http_res = client.request('DELETE', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.DeleteSchemaResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
- if http_res.status_code == 204:
- pass
return res
+
def get_schema(self, request: operations.GetSchemaRequest) -> operations.GetSchemaResponse:
r"""getSchema
By default gets the latest version of the Schema and to get the specific version of schema pass the id.
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetSchemaRequest, base_url, '/v1/entity/schemas/{slug}', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.GetSchemaRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetSchemaResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -64,21 +58,27 @@ def get_schema(self, request: operations.GetSchemaRequest) -> operations.GetSche
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.EntitySchemaItem])
res.entity_schema_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def get_schema_versions(self, request: operations.GetSchemaVersionsRequest) -> operations.GetSchemaVersionsResponse:
r"""getSchemaVersions
Get all versions of this schema ordered by the latest versions including drafts.
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetSchemaVersionsRequest, base_url, '/v1/entity/schemas/{slug}/versions', request)
+ headers = {}
+ query_params = utils.get_query_params(operations.GetSchemaVersionsRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetSchemaVersionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -87,21 +87,26 @@ def get_schema_versions(self, request: operations.GetSchemaVersionsRequest) -> o
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.GetSchemaVersions200ApplicationJSON])
res.get_schema_versions_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def list_schema_blueprints(self) -> operations.ListSchemaBlueprintsResponse:
r"""listSchemaBlueprints
List canonical versions of all available schemas
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/schemas/blueprints'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/schemas/blueprints'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListSchemaBlueprintsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -110,22 +115,27 @@ def list_schema_blueprints(self) -> operations.ListSchemaBlueprintsResponse:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListSchemaBlueprints200ApplicationJSON])
res.list_schema_blueprints_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def list_schemas(self, request: operations.ListSchemasRequest) -> operations.ListSchemasResponse:
r"""listSchemas
Get the latest versions of all schemas
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/schemas'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/schemas'
+ headers = {}
query_params = utils.get_query_params(operations.ListSchemasRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListSchemasResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -134,22 +144,27 @@ def list_schemas(self, request: operations.ListSchemasRequest) -> operations.Lis
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListSchemas200ApplicationJSON])
res.list_schemas_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def list_taxonomy_classifications_for_schema(self, request: operations.ListTaxonomyClassificationsForSchemaRequest) -> operations.ListTaxonomyClassificationsForSchemaResponse:
r"""listTaxonomyClassificationsForSchema
List taxonomy classifications for a given schema
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.ListTaxonomyClassificationsForSchemaRequest, base_url, '/v1/entity/schemas/{slug}/taxonomy/{taxonomySlug}', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.ListTaxonomyClassificationsForSchemaRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListTaxonomyClassificationsForSchemaResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -158,24 +173,28 @@ def list_taxonomy_classifications_for_schema(self, request: operations.ListTaxon
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListTaxonomyClassificationsForSchema200ApplicationJSON])
res.list_taxonomy_classifications_for_schema_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def put_schema(self, request: operations.PutSchemaRequest) -> operations.PutSchemaResponse:
r"""putSchema
Create or update a schema with a new version
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.PutSchemaRequest, base_url, '/v1/entity/schemas/{slug}', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "entity_schema", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "entity_schema", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.PutSchemaRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('PUT', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -186,6 +205,8 @@ def put_schema(self, request: operations.PutSchemaRequest) -> operations.PutSche
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.EntitySchemaItem])
res.entity_schema_item = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/entity/src/epilot/sdk.py b/entity/src/epilot/sdk.py
index 19d9feb49..979624ad9 100755
--- a/entity/src/epilot/sdk.py
+++ b/entity/src/epilot/sdk.py
@@ -1,33 +1,31 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
import requests as requests_http
-from . import utils
from .activity import Activity
from .entities import Entities
+from .entity_import import EntityImport
from .export import Export
from .relations import Relations
from .saved_views import SavedViews
from .schemas import Schemas
+from .sdkconfiguration import SDKConfiguration
from .taxonomy import Taxonomy
+from epilot import utils
from epilot.models import shared
-
-SERVERS = [
- "https://entity.sls.epilot.io",
-]
-"""Contains the list of servers available to the SDK"""
+from typing import Dict
class Epilot:
- r"""Flexible data layer for epilot Entities.
-
+ r"""Entity API: Flexible data layer for epilot Entities.
+
Use this API configure and access your business objects like Contacts, Opportunities and Products.
-
+
[Feature Documentation](https://docs.epilot.io/docs/entities/flexible-entities)
-
"""
activity: Activity
r"""Entity Events"""
entities: Entities
r"""CRUD Access for Entities"""
+ entity_import: EntityImport
export: Export
r"""Export and Import entities via files"""
relations: Relations
@@ -39,109 +37,53 @@ class Epilot:
taxonomy: Taxonomy
r"""Entity classification with Taxonomies"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str = SERVERS[0]
- _language: str = "python"
- _sdk_version: str = "1.2.2"
- _gen_version: str = "2.16.5"
+ sdk_configuration: SDKConfiguration
def __init__(self,
security: shared.Security = None,
+ server_idx: int = None,
server_url: str = None,
- url_params: dict[str, str] = None,
- client: requests_http.Session = None
+ url_params: Dict[str, str] = None,
+ client: requests_http.Session = None,
+ retry_config: utils.RetryConfig = None
) -> None:
"""Instantiates the SDK configuring it with the provided parameters.
:param security: The security details required for authentication
:type security: shared.Security
+ :param server_idx: The index of the server to use for all operations
+ :type server_idx: int
:param server_url: The server URL to use for all operations
:type server_url: str
:param url_params: Parameters to optionally template the server URL with
- :type url_params: dict[str, str]
+ :type url_params: Dict[str, str]
:param client: The requests.Session HTTP client to use for all operations
- :type client: requests_http.Session
+ :type client: requests_http.Session
+ :param retry_config: The utils.RetryConfig to use globally
+ :type retry_config: utils.RetryConfig
"""
- self._client = requests_http.Session()
+ if client is None:
+ client = requests_http.Session()
- if server_url is not None:
- if url_params is not None:
- self._server_url = utils.template_url(server_url, url_params)
- else:
- self._server_url = server_url
-
- if client is not None:
- self._client = client
+ security_client = utils.configure_security_client(client, security)
- self._security_client = utils.configure_security_client(self._client, security)
+ if server_url is not None:
+ if url_params is not None:
+ server_url = utils.template_url(server_url, url_params)
+ self.sdk_configuration = SDKConfiguration(client, security_client, server_url, server_idx, retry_config=retry_config)
+
self._init_sdks()
def _init_sdks(self):
- self.activity = Activity(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.entities = Entities(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.export = Export(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.relations = Relations(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.saved_views = SavedViews(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.schemas = Schemas(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
- self.taxonomy = Taxonomy(
- self._client,
- self._security_client,
- self._server_url,
- self._language,
- self._sdk_version,
- self._gen_version
- )
-
+ self.activity = Activity(self.sdk_configuration)
+ self.entities = Entities(self.sdk_configuration)
+ self.entity_import = EntityImport(self.sdk_configuration)
+ self.export = Export(self.sdk_configuration)
+ self.relations = Relations(self.sdk_configuration)
+ self.saved_views = SavedViews(self.sdk_configuration)
+ self.schemas = Schemas(self.sdk_configuration)
+ self.taxonomy = Taxonomy(self.sdk_configuration)
\ No newline at end of file
diff --git a/entity/src/epilot/sdkconfiguration.py b/entity/src/epilot/sdkconfiguration.py
new file mode 100755
index 000000000..b05d51411
--- /dev/null
+++ b/entity/src/epilot/sdkconfiguration.py
@@ -0,0 +1,34 @@
+"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
+
+import requests
+from dataclasses import dataclass
+from typing import Dict, Tuple
+from .utils.retries import RetryConfig
+from .utils import utils
+
+
+SERVERS = [
+ 'https://entity.sls.epilot.io',
+]
+"""Contains the list of servers available to the SDK"""
+
+@dataclass
+class SDKConfiguration:
+ client: requests.Session
+ security_client: requests.Session
+ server_url: str = ''
+ server_idx: int = 0
+ language: str = 'python'
+ openapi_doc_version: str = '1.0.0'
+ sdk_version: str = '2.1.5'
+ gen_version: str = '2.173.0'
+ user_agent: str = 'speakeasy-sdk/python 2.1.5 2.173.0 1.0.0 epilot-entity'
+ retry_config: RetryConfig = None
+
+ def get_server_details(self) -> Tuple[str, Dict[str, str]]:
+ if self.server_url:
+ return utils.remove_suffix(self.server_url, '/'), {}
+ if self.server_idx is None:
+ self.server_idx = 0
+
+ return SERVERS[self.server_idx], {}
diff --git a/entity/src/epilot/taxonomy.py b/entity/src/epilot/taxonomy.py
index d8bbba05d..bcb445cba 100755
--- a/entity/src/epilot/taxonomy.py
+++ b/entity/src/epilot/taxonomy.py
@@ -1,39 +1,32 @@
"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT."""
-import requests as requests_http
-from . import utils
-from epilot.models import operations, shared
+from .sdkconfiguration import SDKConfiguration
+from epilot import utils
+from epilot.models import errors, operations, shared
from typing import Optional
class Taxonomy:
r"""Entity classification with Taxonomies"""
- _client: requests_http.Session
- _security_client: requests_http.Session
- _server_url: str
- _language: str
- _sdk_version: str
- _gen_version: str
-
- def __init__(self, client: requests_http.Session, security_client: requests_http.Session, server_url: str, language: str, sdk_version: str, gen_version: str) -> None:
- self._client = client
- self._security_client = security_client
- self._server_url = server_url
- self._language = language
- self._sdk_version = sdk_version
- self._gen_version = gen_version
+ sdk_configuration: SDKConfiguration
+
+ def __init__(self, sdk_config: SDKConfiguration) -> None:
+ self.sdk_configuration = sdk_config
+
def get_taxonomy(self, request: operations.GetTaxonomyRequest) -> operations.GetTaxonomyResponse:
r"""getTaxonomy
Get taxonomy by slug
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.GetTaxonomyRequest, base_url, '/v1/entity/taxonomies/{taxonomySlug}', request)
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
+ client = self.sdk_configuration.security_client
- client = self._security_client
-
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.GetTaxonomyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -42,21 +35,26 @@ def get_taxonomy(self, request: operations.GetTaxonomyRequest) -> operations.Get
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[shared.Taxonomy])
res.taxonomy = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def list_taxonomies(self) -> operations.ListTaxonomiesResponse:
r"""listTaxonomies
List taxonomies in an organisation
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/listTaxonomies'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/listTaxonomies'
+ headers = {}
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url)
+ http_res = client.request('GET', url, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.ListTaxonomiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -65,24 +63,28 @@ def list_taxonomies(self) -> operations.ListTaxonomiesResponse:
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.ListTaxonomies200ApplicationJSON])
res.list_taxonomies_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def taxonomies_classifications_search(self, request: operations.TaxonomiesClassificationsSearchRequest) -> operations.TaxonomiesClassificationsSearchResponse:
r"""taxonomiesClassificationsSearch
List taxonomy classifications in an organisation based on taxonomy slug
"""
- base_url = self._server_url
-
- url = base_url.removesuffix('/') + '/v1/entity/taxonomies/classifications:search'
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
+ url = base_url + '/v1/entity/taxonomies/classifications:search'
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "request_body", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
query_params = utils.get_query_params(operations.TaxonomiesClassificationsSearchRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, params=query_params, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -93,22 +95,27 @@ def taxonomies_classifications_search(self, request: operations.TaxonomiesClassi
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.TaxonomiesClassificationsSearch200ApplicationJSON])
res.taxonomies_classifications_search_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def taxonomy_autocomplete(self, request: operations.TaxonomyAutocompleteRequest) -> operations.TaxonomyAutocompleteResponse:
r"""taxonomyAutocomplete
Taxonomies autocomplete
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.TaxonomyAutocompleteRequest, base_url, '/v1/entity/taxonomies/{taxonomySlug}:autocomplete', request)
-
+ headers = {}
query_params = utils.get_query_params(operations.TaxonomyAutocompleteRequest, request)
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
- http_res = client.request('GET', url, params=query_params)
+ http_res = client.request('GET', url, params=query_params, headers=headers)
content_type = http_res.headers.get('Content-Type')
res = operations.TaxonomyAutocompleteResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res)
@@ -117,23 +124,27 @@ def taxonomy_autocomplete(self, request: operations.TaxonomyAutocompleteRequest)
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.TaxonomyAutocomplete200ApplicationJSON])
res.taxonomy_autocomplete_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
+
def update_classifications_for_taxonomy(self, request: operations.UpdateClassificationsForTaxonomyRequest) -> operations.UpdateClassificationsForTaxonomyResponse:
r"""updateClassificationsForTaxonomy
Update taxonomies in an organisation based in taxonomy slug
"""
- base_url = self._server_url
+ base_url = utils.template_url(*self.sdk_configuration.get_server_details())
url = utils.generate_url(operations.UpdateClassificationsForTaxonomyRequest, base_url, '/v1/entity/taxonomies/{taxonomySlug}/classifications', request)
-
headers = {}
- req_content_type, data, form = utils.serialize_request_body(request, "classifications_update", 'json')
+ req_content_type, data, form = utils.serialize_request_body(request, "classifications_update", False, True, 'json')
if req_content_type not in ('multipart/form-data', 'multipart/mixed'):
headers['content-type'] = req_content_type
+ headers['Accept'] = 'application/json'
+ headers['user-agent'] = self.sdk_configuration.user_agent
- client = self._security_client
+ client = self.sdk_configuration.security_client
http_res = client.request('POST', url, data=data, files=form, headers=headers)
content_type = http_res.headers.get('Content-Type')
@@ -144,6 +155,8 @@ def update_classifications_for_taxonomy(self, request: operations.UpdateClassifi
if utils.match_content_type(content_type, 'application/json'):
out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateClassificationsForTaxonomy200ApplicationJSON])
res.update_classifications_for_taxonomy_200_application_json_object = out
+ else:
+ raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res)
return res
diff --git a/entity/src/epilot/utils/retries.py b/entity/src/epilot/utils/retries.py
index c6251d948..25f49a1f2 100755
--- a/entity/src/epilot/utils/retries.py
+++ b/entity/src/epilot/utils/retries.py
@@ -2,6 +2,7 @@
import random
import time
+from typing import List
import requests
@@ -24,16 +25,17 @@ class RetryConfig:
backoff: BackoffStrategy
retry_connection_errors: bool
- def __init__(self, strategy: str, retry_connection_errors: bool):
+ def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool):
self.strategy = strategy
+ self.backoff = backoff
self.retry_connection_errors = retry_connection_errors
class Retries:
config: RetryConfig
- status_codes: list[str]
+ status_codes: List[str]
- def __init__(self, config: RetryConfig, status_codes: list[str]):
+ def __init__(self, config: RetryConfig, status_codes: List[str]):
self.config = config
self.status_codes = status_codes
diff --git a/entity/src/epilot/utils/utils.py b/entity/src/epilot/utils/utils.py
index 9d4fba324..3ab126104 100755
--- a/entity/src/epilot/utils/utils.py
+++ b/entity/src/epilot/utils/utils.py
@@ -3,11 +3,14 @@
import base64
import json
import re
+import sys
from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass
from datetime import date, datetime
+from decimal import Decimal
from email.message import Message
from enum import Enum
-from typing import Any, Callable, Optional, Tuple, Union, get_args, get_origin
+from typing import (Any, Callable, Dict, List, Optional, Tuple, Union,
+ get_args, get_origin)
from xmlrpc.client import boolean
import dateutil.parser
@@ -17,14 +20,14 @@
class SecurityClient:
client: requests.Session
- query_params: dict[str, str] = {}
+ query_params: Dict[str, str] = {}
def __init__(self, client: requests.Session):
self.client = client
def request(self, method, url, **kwargs):
params = kwargs.get('params', {})
- kwargs["params"] = self.query_params | params
+ kwargs["params"] = {**self.query_params, **params}
return self.client.request(method, url, **kwargs)
@@ -67,7 +70,7 @@ def _parse_security_option(client: SecurityClient, option: dataclass):
client, metadata, getattr(option, opt_field.name))
-def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme: any):
+def _parse_security_scheme(client: SecurityClient, scheme_metadata: Dict, scheme: any):
scheme_type = scheme_metadata.get('type')
sub_type = scheme_metadata.get('sub_type')
@@ -91,7 +94,7 @@ def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme
client, scheme_metadata, scheme_metadata, scheme)
-def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict, security_metadata: dict, value: any):
+def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: Dict, security_metadata: Dict, value: any):
scheme_type = scheme_metadata.get('type')
sub_type = scheme_metadata.get('sub_type')
@@ -112,7 +115,8 @@ def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict,
client.client.headers[header_name] = value
elif scheme_type == 'http':
if sub_type == 'bearer':
- client.client.headers[header_name] = value
+ client.client.headers[header_name] = value.lower().startswith(
+ 'bearer ') and value or f'Bearer {value}'
else:
raise Exception('not supported')
else:
@@ -141,7 +145,8 @@ def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass):
client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}'
-def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> str:
+def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass,
+ gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> str:
path_param_fields: Tuple[Field, ...] = fields(clazz)
for field in path_param_fields:
request_metadata = field.metadata.get('request')
@@ -152,71 +157,80 @@ def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass
if param_metadata is None:
continue
- if param_metadata.get('style', 'simple') == 'simple':
- param = getattr(
- path_params, field.name) if path_params is not None else None
- param = _populate_from_globals(
- field.name, param, 'pathParam', gbls)
-
- if param is None:
- continue
-
- if isinstance(param, list):
- pp_vals: list[str] = []
- for pp_val in param:
- if pp_val is None:
- continue
- pp_vals.append(_val_to_string(pp_val))
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- elif isinstance(param, dict):
- pp_vals: list[str] = []
- for pp_key in param:
- if param[pp_key] is None:
- continue
- if param_metadata.get('explode'):
- pp_vals.append(
- f"{pp_key}={_val_to_string(param[pp_key])}")
- else:
- pp_vals.append(
- f"{pp_key},{_val_to_string(param[pp_key])}")
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- elif not isinstance(param, (str, int, float, complex, bool)):
- pp_vals: list[str] = []
- param_fields: Tuple[Field, ...] = fields(param)
- for param_field in param_fields:
- param_value_metadata = param_field.metadata.get(
- 'path_param')
- if not param_value_metadata:
- continue
+ param = getattr(
+ path_params, field.name) if path_params is not None else None
+ param = _populate_from_globals(
+ field.name, param, 'pathParam', gbls)
- parm_name = param_value_metadata.get(
- 'field_name', field.name)
+ if param is None:
+ continue
- param_field_val = getattr(param, param_field.name)
- if param_field_val is None:
- continue
- if param_metadata.get('explode'):
- pp_vals.append(
- f"{parm_name}={_val_to_string(param_field_val)}")
- else:
- pp_vals.append(
- f"{parm_name},{_val_to_string(param_field_val)}")
- path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
- else:
+ f_name = param_metadata.get("field_name", field.name)
+ serialization = param_metadata.get('serialization', '')
+ if serialization != '':
+ serialized_params = _get_serialized_params(
+ param_metadata, f_name, param)
+ for key, value in serialized_params.items():
path = path.replace(
- '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
+ '{' + key + '}', value, 1)
+ else:
+ if param_metadata.get('style', 'simple') == 'simple':
+ if isinstance(param, List):
+ pp_vals: List[str] = []
+ for pp_val in param:
+ if pp_val is None:
+ continue
+ pp_vals.append(_val_to_string(pp_val))
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif isinstance(param, Dict):
+ pp_vals: List[str] = []
+ for pp_key in param:
+ if param[pp_key] is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{pp_key}={_val_to_string(param[pp_key])}")
+ else:
+ pp_vals.append(
+ f"{pp_key},{_val_to_string(param[pp_key])}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ elif not isinstance(param, (str, int, float, complex, bool, Decimal)):
+ pp_vals: List[str] = []
+ param_fields: Tuple[Field, ...] = fields(param)
+ for param_field in param_fields:
+ param_value_metadata = param_field.metadata.get(
+ 'path_param')
+ if not param_value_metadata:
+ continue
+
+ parm_name = param_value_metadata.get(
+ 'field_name', field.name)
+
+ param_field_val = getattr(param, param_field.name)
+ if param_field_val is None:
+ continue
+ if param_metadata.get('explode'):
+ pp_vals.append(
+ f"{parm_name}={_val_to_string(param_field_val)}")
+ else:
+ pp_vals.append(
+ f"{parm_name},{_val_to_string(param_field_val)}")
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1)
+ else:
+ path = path.replace(
+ '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1)
- return server_url.removesuffix("/") + path
+ return remove_suffix(server_url, '/') + path
def is_optional(field):
return get_origin(field) is Union and type(None) in get_args(field)
-def template_url(url_with_params: str, params: dict[str, str]) -> str:
+def template_url(url_with_params: str, params: Dict[str, str]) -> str:
for key, value in params.items():
url_with_params = url_with_params.replace(
'{' + key + '}', value)
@@ -224,8 +238,9 @@ def template_url(url_with_params: str, params: dict[str, str]) -> str:
return url_with_params
-def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def get_query_params(clazz: type, query_params: dataclass, gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> Dict[
+ str, List[str]]:
+ params: Dict[str, List[str]] = {}
param_fields: Tuple[Field, ...] = fields(clazz)
for field in param_fields:
@@ -246,26 +261,33 @@ def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[
f_name = metadata.get("field_name")
serialization = metadata.get('serialization', '')
if serialization != '':
- params = params | _get_serialized_query_params(
- metadata, f_name, value)
+ serialized_parms = _get_serialized_params(metadata, f_name, value)
+ for key, value in serialized_parms.items():
+ if key in params:
+ params[key].extend(value)
+ else:
+ params[key] = [value]
else:
style = metadata.get('style', 'form')
if style == 'deepObject':
- params = params | _get_deep_object_query_params(
- metadata, f_name, value)
+ params = {**params, **_get_deep_object_query_params(
+ metadata, f_name, value)}
elif style == 'form':
- params = params | _get_form_query_params(
- metadata, f_name, value)
+ params = {**params, **_get_delimited_query_params(
+ metadata, f_name, value, ",")}
+ elif style == 'pipeDelimited':
+ params = {**params, **_get_delimited_query_params(
+ metadata, f_name, value, "|")}
else:
raise Exception('not yet implemented')
return params
-def get_headers(headers_params: dataclass) -> dict[str, str]:
+def get_headers(headers_params: dataclass) -> Dict[str, str]:
if headers_params is None:
return {}
- headers: dict[str, str] = {}
+ headers: Dict[str, str] = {}
param_fields: Tuple[Field, ...] = fields(headers_params)
for field in param_fields:
@@ -282,8 +304,8 @@ def get_headers(headers_params: dataclass) -> dict[str, str]:
return headers
-def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _get_serialized_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, str]:
+ params: Dict[str, str] = {}
serialization = metadata.get('serialization', '')
if serialization == 'json':
@@ -292,8 +314,8 @@ def _get_serialized_query_params(metadata: dict, field_name: str, obj: any) -> d
return params
-def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, List[str]]:
+ params: Dict[str, List[str]] = {}
if obj is None:
return params
@@ -309,27 +331,30 @@ def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) ->
if obj_val is None:
continue
- if isinstance(obj_val, list):
+ if isinstance(obj_val, List):
for val in obj_val:
if val is None:
continue
- if params.get(f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
- params[f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
+ if params.get(
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None:
+ params[
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
]
params[
- f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(_val_to_string(val))
+ f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append(
+ _val_to_string(val))
else:
params[
f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [
_val_to_string(obj_val)]
- elif isinstance(obj, dict):
+ elif isinstance(obj, Dict):
for key, value in obj.items():
if value is None:
continue
- if isinstance(value, list):
+ if isinstance(value, List):
for val in value:
if val is None:
continue
@@ -355,28 +380,36 @@ def _get_query_param_field_name(obj_field: Field) -> str:
return obj_param_metadata.get("field_name", obj_field.name)
-def _get_form_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]:
- return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name)
+def _get_delimited_query_params(metadata: Dict, field_name: str, obj: any, delimiter: str) -> Dict[
+ str, List[str]]:
+ return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter)
SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
- 'json': 'application/json',
- 'form': 'application/x-www-form-urlencoded',
+ 'json': 'application/json',
+ 'form': 'application/x-www-form-urlencoded',
'multipart': 'multipart/form-data',
- 'raw': 'application/octet-stream',
- 'string': 'text/plain',
+ 'raw': 'application/octet-stream',
+ 'string': 'text/plain',
}
-def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[str, any, any]:
+def serialize_request_body(request: dataclass, request_field_name: str, nullable: bool, optional: bool, serialization_method: str, encoder=None) -> Tuple[
+ str, any, any]:
if request is None:
- return None, None, None, None
+ if not nullable and optional:
+ return None, None, None
if not is_dataclass(request) or not hasattr(request, request_field_name):
- return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request)
+ return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method],
+ request, encoder)
request_val = getattr(request, request_field_name)
+ if request_val is None:
+ if not nullable and optional:
+ return None, None, None
+
request_fields: Tuple[Field, ...] = fields(request)
request_metadata = None
@@ -388,12 +421,13 @@ def serialize_request_body(request: dataclass, request_field_name: str, serializ
if request_metadata is None:
raise Exception('invalid request type')
- return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), request_val)
+ return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'),
+ request_val)
-def serialize_content_type(field_name: str, media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
+def serialize_content_type(field_name: str, media_type: str, request: dataclass, encoder=None) -> Tuple[str, any, List[List[any]]]:
if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None:
- return media_type, marshal_json(request), None
+ return media_type, marshal_json(request, encoder), None
if re.match(r'multipart\/.*', media_type) is not None:
return serialize_multipart_form(media_type, request)
if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None:
@@ -407,8 +441,8 @@ def serialize_content_type(field_name: str, media_type: str, request: dataclass)
f"invalid request body type {type(request)} for mediaType {media_type}")
-def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]:
- form: list[list[any]] = []
+def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, List[List[any]]]:
+ form: List[List[any]] = []
request_fields = fields(request)
for field in request_fields:
@@ -449,7 +483,7 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
else:
field_name = field_metadata.get(
"field_name", field.name)
- if isinstance(val, list):
+ if isinstance(val, List):
for value in val:
if value is None:
continue
@@ -460,8 +494,8 @@ def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str,
return media_type, None, form
-def serialize_dict(original: dict, explode: bool, field_name, existing: Optional[dict[str, list[str]]]) -> dict[
- str, list[str]]:
+def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]]) -> Dict[
+ str, List[str]]:
if existing is None:
existing = []
@@ -481,8 +515,8 @@ def serialize_dict(original: dict, explode: bool, field_name, existing: Optional
return existing
-def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
- form: dict[str, list[str]] = {}
+def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]:
+ form: Dict[str, List[str]] = {}
if is_dataclass(data):
for field in fields(data):
@@ -500,12 +534,12 @@ def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]:
form[field_name] = [marshal_json(val)]
else:
if metadata.get('style', 'form') == 'form':
- form = form | _populate_form(
- field_name, metadata.get('explode', True), val, _get_form_field_name)
+ form = {**form, **_populate_form(
+ field_name, metadata.get('explode', True), val, _get_form_field_name, ",")}
else:
raise Exception(
f'Invalid form style for field {field.name}')
- elif isinstance(data, dict):
+ elif isinstance(data, Dict):
for key, value in data.items():
form[key] = [_val_to_string(value)]
else:
@@ -523,8 +557,9 @@ def _get_form_field_name(obj_field: Field) -> str:
return obj_param_metadata.get("field_name", obj_field.name)
-def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable) -> dict[str, list[str]]:
- params: dict[str, list[str]] = {}
+def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \
+ Dict[str, List[str]]:
+ params: Dict[str, List[str]] = {}
if obj is None:
return params
@@ -546,11 +581,11 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
params[obj_field_name] = [_val_to_string(val)]
else:
items.append(
- f'{obj_field_name},{_val_to_string(val)}')
+ f'{obj_field_name}{delimiter}{_val_to_string(val)}')
if len(items) > 0:
- params[field_name] = [','.join(items)]
- elif isinstance(obj, dict):
+ params[field_name] = [delimiter.join(items)]
+ elif isinstance(obj, Dict):
items = []
for key, value in obj.items():
if value is None:
@@ -559,11 +594,11 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
if explode:
params[key] = _val_to_string(value)
else:
- items.append(f'{key},{_val_to_string(value)}')
+ items.append(f'{key}{delimiter}{_val_to_string(value)}')
if len(items) > 0:
- params[field_name] = [','.join(items)]
- elif isinstance(obj, list):
+ params[field_name] = [delimiter.join(items)]
+ elif isinstance(obj, List):
items = []
for value in obj:
@@ -578,7 +613,8 @@ def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_f
items.append(_val_to_string(value))
if len(items) > 0:
- params[field_name] = [','.join([str(item) for item in items])]
+ params[field_name] = [delimiter.join(
+ [str(item) for item in items])]
else:
params[field_name] = [_val_to_string(obj)]
@@ -616,7 +652,7 @@ def _serialize_header(explode: bool, obj: any) -> str:
if len(items) > 0:
return ','.join(items)
- elif isinstance(obj, dict):
+ elif isinstance(obj, Dict):
items = []
for key, value in obj.items():
@@ -631,7 +667,7 @@ def _serialize_header(explode: bool, obj: any) -> str:
if len(items) > 0:
return ','.join([str(item) for item in items])
- elif isinstance(obj, list):
+ elif isinstance(obj, List):
items = []
for value in obj:
@@ -648,20 +684,28 @@ def _serialize_header(explode: bool, obj: any) -> str:
return ''
-def unmarshal_json(data, typ):
- unmarhsal = make_dataclass('Unmarhsal', [('res', typ)],
+def unmarshal_json(data, typ, decoder=None):
+ unmarshal = make_dataclass('Unmarshal', [('res', typ)],
bases=(DataClassJsonMixin,))
json_dict = json.loads(data)
- out = unmarhsal.from_dict({"res": json_dict})
- return out.res
+ try:
+ out = unmarshal.from_dict({"res": json_dict})
+ except AttributeError as attr_err:
+ raise AttributeError(
+ f'unable to unmarshal {data} as {typ}') from attr_err
+
+ return out.res if decoder is None else decoder(out.res)
-def marshal_json(val):
+def marshal_json(val, encoder=None):
marshal = make_dataclass('Marshal', [('res', type(val))],
bases=(DataClassJsonMixin,))
marshaller = marshal(res=val)
json_dict = marshaller.to_dict()
- return json.dumps(json_dict["res"])
+
+ val = json_dict["res"] if encoder is None else encoder(json_dict["res"])
+
+ return json.dumps(val)
def match_content_type(content_type: str, pattern: str) -> boolean:
@@ -705,6 +749,106 @@ def datefromisoformat(date_str: str):
return dateutil.parser.parse(date_str).date()
+def bigintencoder(optional: bool):
+ def bigintencode(val: int):
+ if optional and val is None:
+ return None
+ return str(val)
+
+ return bigintencode
+
+
+def bigintdecoder(val):
+ if isinstance(val, float):
+ raise ValueError(f"{val} is a float")
+ return int(val)
+
+
+def decimalencoder(optional: bool, as_str: bool):
+ def decimalencode(val: Decimal):
+ if optional and val is None:
+ return None
+
+ if as_str:
+ return str(val)
+
+ return float(val)
+
+ return decimalencode
+
+
+def decimaldecoder(val):
+ return Decimal(str(val))
+
+
+def map_encoder(optional: bool, value_encoder: Callable):
+ def map_encode(val: Dict):
+ if optional and val is None:
+ return None
+
+ encoded = {}
+ for key, value in val.items():
+ encoded[key] = value_encoder(value)
+
+ return encoded
+
+ return map_encode
+
+
+def map_decoder(value_decoder: Callable):
+ def map_decode(val: Dict):
+ decoded = {}
+ for key, value in val.items():
+ decoded[key] = value_decoder(value)
+
+ return decoded
+
+ return map_decode
+
+
+def list_encoder(optional: bool, value_encoder: Callable):
+ def list_encode(val: List):
+ if optional and val is None:
+ return None
+
+ encoded = []
+ for value in val:
+ encoded.append(value_encoder(value))
+
+ return encoded
+
+ return list_encode
+
+
+def list_decoder(value_decoder: Callable):
+ def list_decode(val: List):
+ decoded = []
+ for value in val:
+ decoded.append(value_decoder(value))
+
+ return decoded
+
+ return list_decode
+
+def union_encoder(all_encoders: Dict[str, Callable]):
+ def selective_encoder(val: any):
+ if type(val) in all_encoders:
+ return all_encoders[type(val)](val)
+ return val
+ return selective_encoder
+
+def union_decoder(all_decoders: List[Callable]):
+ def selective_decoder(val: any):
+ decoded = val
+ for decoder in all_decoders:
+ try:
+ decoded = decoder(val)
+ break
+ except (TypeError, ValueError):
+ continue
+ return decoded
+ return selective_decoder
+
def get_field_name(name):
def override(_, _field_name=name):
return _field_name
@@ -718,12 +862,12 @@ def _val_to_string(val):
if isinstance(val, datetime):
return val.isoformat().replace('+00:00', 'Z')
if isinstance(val, Enum):
- return val.value
+ return str(val.value)
return str(val)
-def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: dict[str, dict[str, dict[str, Any]]]):
+def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: Dict[str, Dict[str, Dict[str, Any]]]):
if value is None and gbls is not None:
if 'parameters' in gbls:
if param_type in gbls['parameters']:
@@ -733,3 +877,16 @@ def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: d
value = global_value
return value
+
+
+def decoder_with_discriminator(field_name):
+ def decode_fx(obj):
+ kls = getattr(sys.modules['sdk.models.shared'], obj[field_name])
+ return unmarshal_json(json.dumps(obj), kls)
+ return decode_fx
+
+
+def remove_suffix(input_string, suffix):
+ if suffix and input_string.endswith(suffix):
+ return input_string[:-len(suffix)]
+ return input_string