diff --git a/pe/docs/AiChatControllerApi.md b/pe/docs/AiChatControllerApi.md index 4c84d0cf..cbdf5632 100644 --- a/pe/docs/AiChatControllerApi.md +++ b/pe/docs/AiChatControllerApi.md @@ -7,7 +7,7 @@ object client.create_chat(body: object) # createChat None client.delete_chat(chat_id: UUID) # deleteChat object client.get_chat_messages(chat_id: UUID) # getChatMessages object client.list_chats(chat_type: ChatType) # listChats -List[object] client.send_chat_message(chat_id: UUID, x_authorization: str, body: str, accept_language: Optional[str] = None) # sendChatMessage +List[object] client.send_chat_message(chat_id: UUID, x_authorization: str, body: object, accept_language: Optional[str] = None) # sendChatMessage None client.update_chat(chat_id: UUID, body: object) # updateChat ``` @@ -103,7 +103,7 @@ listChats ## send_chat_message ```python -List[object] client.send_chat_message(chat_id: UUID, x_authorization: str, body: str, accept_language: Optional[str] = None) +List[object] client.send_chat_message(chat_id: UUID, x_authorization: str, body: object, accept_language: Optional[str] = None) ``` **POST** `/api/ai/chats/{chatId}/messages` @@ -117,7 +117,7 @@ sendChatMessage |------------- | ------------- | ------------- | -------------| | **chat_id** | **UUID** | | | | **x_authorization** | **str** | | | -| **body** | **str** | | | +| **body** | **object** | | | | **accept_language** | **str** | | [optional] | ### Return type diff --git a/pe/docs/AlarmControllerApi.md b/pe/docs/AlarmControllerApi.md index 7acdfe80..78239b57 100644 --- a/pe/docs/AlarmControllerApi.md +++ b/pe/docs/AlarmControllerApi.md @@ -370,7 +370,7 @@ Alarm client.save_alarm(alarm: Alarm) Create or Update Alarm (saveAlarm) -Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). +Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. The alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). ### Parameters diff --git a/pe/docs/Dashboard.md b/pe/docs/Dashboard.md index aa00f883..8c75b2e2 100644 --- a/pe/docs/Dashboard.md +++ b/pe/docs/Dashboard.md @@ -18,7 +18,7 @@ | **assigned_customers** | [**List[ShortCustomerInfo]**](ShortCustomerInfo.md) | List of assigned customers with their info. | [optional] | | **mobile_hide** | **bool** | Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens. | [optional] [readonly] | | **mobile_order** | **int** | Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications | [optional] [readonly] | -| **configuration** | **object** | | [optional] | +| **configuration** | **object** | JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON. | [optional] | | **resources** | [**List[ResourceExportData]**](ResourceExportData.md) | | [optional] | | **version** | **int** | | [optional] | diff --git a/pe/docs/DashboardInfo.md b/pe/docs/DashboardInfo.md index 67e45383..17b966ad 100644 --- a/pe/docs/DashboardInfo.md +++ b/pe/docs/DashboardInfo.md @@ -18,7 +18,7 @@ | **assigned_customers** | [**List[ShortCustomerInfo]**](ShortCustomerInfo.md) | List of assigned customers with their info. | [optional] | | **mobile_hide** | **bool** | Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens. | [optional] [readonly] | | **mobile_order** | **int** | Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications | [optional] [readonly] | -| **configuration** | **object** | | [optional] | +| **configuration** | **object** | JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON. | [optional] | | **resources** | [**List[ResourceExportData]**](ResourceExportData.md) | | [optional] | | **version** | **int** | | [optional] | | **groups** | [**List[EntityInfo]**](EntityInfo.md) | Groups | [optional] | diff --git a/pe/docs/DeviceProfile.md b/pe/docs/DeviceProfile.md index 57fa4c35..aca12b1c 100644 --- a/pe/docs/DeviceProfile.md +++ b/pe/docs/DeviceProfile.md @@ -242,7 +242,7 @@ A JSON value representing the device profile. | epmax | int | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/pe/docs/DeviceProfileData.md b/pe/docs/DeviceProfileData.md index 7e852969..d78f5dc2 100644 --- a/pe/docs/DeviceProfileData.md +++ b/pe/docs/DeviceProfileData.md @@ -203,7 +203,7 @@ | epmax | int | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/pe/docs/DeviceProfileTransportConfiguration.md b/pe/docs/DeviceProfileTransportConfiguration.md index c53b1d5a..1a9d1635 100644 --- a/pe/docs/DeviceProfileTransportConfiguration.md +++ b/pe/docs/DeviceProfileTransportConfiguration.md @@ -174,7 +174,7 @@ Configuration for device profile transport | epmax | int | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### SnmpCommunicationSpec (enum) `TELEMETRY_QUERYING` | `CLIENT_ATTRIBUTES_QUERYING` | `SHARED_ATTRIBUTES_SETTING` | `TO_DEVICE_RPC_REQUEST` | `TO_SERVER_RPC_REQUEST` diff --git a/pe/docs/EntityGroupControllerApi.md b/pe/docs/EntityGroupControllerApi.md index 6631e141..d206cb8a 100644 --- a/pe/docs/EntityGroupControllerApi.md +++ b/pe/docs/EntityGroupControllerApi.md @@ -929,16 +929,16 @@ None client.share_entity_group_to_child_owner_user_group(entity_group_id: str, u Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup) -Share the entity group with specified user group using specified role. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group. +Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer. The following security checks are performed: * the target user group must belong to the current user's owner or to one of its sub-customers; * the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation; * the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers; * the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation). If the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. ### Parameters | Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **entity_group_id** | **str** | A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | -| **user_group_id** | **str** | A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | -| **role_id** | **str** | A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9' | | +| **entity_group_id** | **str** | ID of the entity group to share | | +| **user_group_id** | **str** | ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers | | +| **role_id** | **str** | ID of the group role that defines the set of operations to grant to the target user group | | ### Return type diff --git a/pe/docs/HomeDashboard.md b/pe/docs/HomeDashboard.md index f05eb5d1..9ad94ad9 100644 --- a/pe/docs/HomeDashboard.md +++ b/pe/docs/HomeDashboard.md @@ -18,7 +18,7 @@ | **assigned_customers** | [**List[ShortCustomerInfo]**](ShortCustomerInfo.md) | List of assigned customers with their info. | [optional] | | **mobile_hide** | **bool** | Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens. | [optional] [readonly] | | **mobile_order** | **int** | Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications | [optional] [readonly] | -| **configuration** | **object** | | [optional] | +| **configuration** | **object** | JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON. | [optional] | | **resources** | [**List[ResourceExportData]**](ResourceExportData.md) | | [optional] | | **version** | **int** | | [optional] | | **hide_dashboard_toolbar** | **bool** | Hide dashboard toolbar flag. Useful for rendering dashboards on mobile. | [optional] | diff --git a/pe/docs/Lwm2mDeviceProfileTransportConfiguration.md b/pe/docs/Lwm2mDeviceProfileTransportConfiguration.md index fea830fd..ce98671b 100644 --- a/pe/docs/Lwm2mDeviceProfileTransportConfiguration.md +++ b/pe/docs/Lwm2mDeviceProfileTransportConfiguration.md @@ -71,7 +71,7 @@ | epmax | int | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/pe/docs/PageDataDashboardInfo.md b/pe/docs/PageDataDashboardInfo.md index ebfdf212..c02c5184 100644 --- a/pe/docs/PageDataDashboardInfo.md +++ b/pe/docs/PageDataDashboardInfo.md @@ -32,7 +32,7 @@ | assigned_customers | List[ShortCustomerInfo] | List of assigned customers with their info. | [optional] | | mobile_hide | bool | Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens. | [optional] [readonly] | | mobile_order | int | Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications | [optional] [readonly] | -| configuration | object | | [optional] | +| configuration | object | JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON. | [optional] | | resources | List[ResourceExportData] | | [optional] | | version | int | | [optional] | | groups | List[EntityInfo] | Groups | [optional] | diff --git a/pe/docs/PageDataDeviceProfile.md b/pe/docs/PageDataDeviceProfile.md index 7beb5fe3..7e49e479 100644 --- a/pe/docs/PageDataDeviceProfile.md +++ b/pe/docs/PageDataDeviceProfile.md @@ -248,7 +248,7 @@ | epmax | int | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### PowerMode (enum) `PSM` | `DRX` | `E_DRX` diff --git a/pe/docs/TelemetryMappingConfiguration.md b/pe/docs/TelemetryMappingConfiguration.md index cb568155..6a3e65a6 100644 --- a/pe/docs/TelemetryMappingConfiguration.md +++ b/pe/docs/TelemetryMappingConfiguration.md @@ -36,7 +36,7 @@ | epmax | int | | [optional] | #### TelemetryObserveStrategy (enum) -`SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` | `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` | `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` +`SINGLE` | `COMPOSITE_ALL` | `COMPOSITE_BY_OBJECT` #### LwM2mVersion | Name | Type | Description | Notes | diff --git a/pe/docs/TelemetryObserveStrategy.md b/pe/docs/TelemetryObserveStrategy.md index bb0194d9..016c766a 100644 --- a/pe/docs/TelemetryObserveStrategy.md +++ b/pe/docs/TelemetryObserveStrategy.md @@ -3,14 +3,16 @@ `tb_pe_client.models.TelemetryObserveStrategy` +Observation strategy for telemetry. SINGLE (0): one resource equals one single observe request. COMPOSITE_ALL (1): all resources in one composite observe request. COMPOSITE_BY_OBJECT (2): grouped composite observe requests by object. + ## Enum Values -* `SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST` (value: `'SINGLE (0): One resource equals one single observe request'`) +* `SINGLE` (value: `'SINGLE'`) -* `COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST` (value: `'COMPOSITE_ALL (1): All resources in one composite observe request'`) +* `COMPOSITE_ALL` (value: `'COMPOSITE_ALL'`) -* `COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT` (value: `'COMPOSITE_BY_OBJECT (2): Grouped composite observe requests by object'`) +* `COMPOSITE_BY_OBJECT` (value: `'COMPOSITE_BY_OBJECT'`) diff --git a/pe/spec/openapi.json b/pe/spec/openapi.json index 9c22deee..1f5e1e47 100644 --- a/pe/spec/openapi.json +++ b/pe/spec/openapi.json @@ -16,7 +16,7 @@ }, "servers": [ { - "url": "http://localhost:8080", + "url": "http://localhost:41237", "description": "Generated server url" } ], @@ -4409,11 +4409,6 @@ ], "requestBody": { "content": { - "text/plain": { - "schema": { - "type": "string" - } - }, "application/json": { "schema": { "$ref": "#/components/schemas/JsonNode" @@ -4542,7 +4537,6 @@ } } }, - "deprecated": true, "security": [ { "HttpLoginForm": [] @@ -7753,7 +7747,7 @@ "alarm-controller" ], "summary": "Create or Update Alarm (saveAlarm)", - "description": "Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. \n\nPlatform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", + "description": "Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. \n\nPlatform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. \n\nThe alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities).", "operationId": "saveAlarm", "requestBody": { "description": "A JSON value representing the alarm.", @@ -49564,13 +49558,13 @@ "entity-group-controller" ], "summary": "Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup)", - "description": "Share the entity group with specified user group using specified role. \n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group.", + "description": "Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer.\n\nThe following security checks are performed:\n\n* the target user group must belong to the current user's owner or to one of its sub-customers;\n* the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation;\n* the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers;\n* the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation).\n\nIf the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way.\n\nAvailable for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.", "operationId": "shareEntityGroupToChildOwnerUserGroup", "parameters": [ { "name": "entityGroupId", "in": "path", - "description": "A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "ID of the entity group to share", "required": true, "schema": { "type": "string" @@ -49579,7 +49573,7 @@ { "name": "userGroupId", "in": "path", - "description": "A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers", "required": true, "schema": { "type": "string" @@ -49588,7 +49582,7 @@ { "name": "roleId", "in": "path", - "description": "A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'", + "description": "ID of the group role that defines the set of operations to grant to the target user group", "required": true, "schema": { "type": "string" @@ -123699,7 +123693,8 @@ "readOnly": true }, "configuration": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/JsonNode", + "description": "JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON." }, "resources": { "type": "array", @@ -123907,7 +123902,8 @@ "readOnly": true }, "configuration": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/JsonNode", + "description": "JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON." }, "resources": { "type": "array", @@ -130090,7 +130086,8 @@ "readOnly": true }, "configuration": { - "$ref": "#/components/schemas/JsonNode" + "$ref": "#/components/schemas/JsonNode", + "description": "JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON." }, "resources": { "type": "array", @@ -143219,10 +143216,11 @@ }, "TelemetryObserveStrategy": { "type": "string", + "description": "Observation strategy for telemetry. SINGLE (0): one resource equals one single observe request. COMPOSITE_ALL (1): all resources in one composite observe request. COMPOSITE_BY_OBJECT (2): grouped composite observe requests by object.", "enum": [ - "SINGLE (0): One resource equals one single observe request", - "COMPOSITE_ALL (1): All resources in one composite observe request", - "COMPOSITE_BY_OBJECT (2): Grouped composite observe requests by object" + "SINGLE", + "COMPOSITE_ALL", + "COMPOSITE_BY_OBJECT" ] }, "TelemetryQueryingSnmpCommunicationConfig": { diff --git a/pe/tb_pe_client/api/ai_chat_controller_api.py b/pe/tb_pe_client/api/ai_chat_controller_api.py index cf37abff..88d760b6 100644 --- a/pe/tb_pe_client/api/ai_chat_controller_api.py +++ b/pe/tb_pe_client/api/ai_chat_controller_api.py @@ -1168,7 +1168,7 @@ def send_chat_message( self, chat_id: UUID, x_authorization: StrictStr, - body: StrictStr, + body: Optional[Any], accept_language: Optional[StrictStr] = None, _request_timeout: Union[ None, @@ -1183,7 +1183,7 @@ def send_chat_message( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> List[object]: - """(Deprecated) sendChatMessage + """sendChatMessage :param chat_id: (required) @@ -1191,7 +1191,7 @@ def send_chat_message( :param x_authorization: (required) :type x_authorization: str :param body: (required) - :type body: str + :type body: object :param accept_language: :type accept_language: str :param _request_timeout: timeout setting for this request. If one @@ -1215,7 +1215,6 @@ def send_chat_message( :type _host_index: int, optional :return: Returns the result object. """ # noqa: E501 - warnings.warn("POST /api/ai/chats/{chatId}/messages is deprecated.", DeprecationWarning) _param = self._send_chat_message_serialize( chat_id=chat_id, @@ -1252,7 +1251,7 @@ def send_chat_message_with_http_info( self, chat_id: UUID, x_authorization: StrictStr, - body: StrictStr, + body: Optional[Any], accept_language: Optional[StrictStr] = None, _request_timeout: Union[ None, @@ -1267,7 +1266,7 @@ def send_chat_message_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[List[object]]: - """(Deprecated) sendChatMessage + """sendChatMessage :param chat_id: (required) @@ -1275,7 +1274,7 @@ def send_chat_message_with_http_info( :param x_authorization: (required) :type x_authorization: str :param body: (required) - :type body: str + :type body: object :param accept_language: :type accept_language: str :param _request_timeout: timeout setting for this request. If one @@ -1299,7 +1298,6 @@ def send_chat_message_with_http_info( :type _host_index: int, optional :return: Returns the result object. """ # noqa: E501 - warnings.warn("POST /api/ai/chats/{chatId}/messages is deprecated.", DeprecationWarning) _param = self._send_chat_message_serialize( chat_id=chat_id, @@ -1336,7 +1334,7 @@ def send_chat_message_without_preload_content( self, chat_id: UUID, x_authorization: StrictStr, - body: StrictStr, + body: Optional[Any], accept_language: Optional[StrictStr] = None, _request_timeout: Union[ None, @@ -1351,7 +1349,7 @@ def send_chat_message_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """(Deprecated) sendChatMessage + """sendChatMessage :param chat_id: (required) @@ -1359,7 +1357,7 @@ def send_chat_message_without_preload_content( :param x_authorization: (required) :type x_authorization: str :param body: (required) - :type body: str + :type body: object :param accept_language: :type accept_language: str :param _request_timeout: timeout setting for this request. If one @@ -1383,7 +1381,6 @@ def send_chat_message_without_preload_content( :type _host_index: int, optional :return: Returns the result object. """ # noqa: E501 - warnings.warn("POST /api/ai/chats/{chatId}/messages is deprecated.", DeprecationWarning) _param = self._send_chat_message_serialize( chat_id=chat_id, @@ -1468,7 +1465,6 @@ def _send_chat_message_serialize( _default_content_type = ( self.api_client.select_header_content_type( [ - 'text/plain', 'application/json' ] ) diff --git a/pe/tb_pe_client/api/alarm_controller_api.py b/pe/tb_pe_client/api/alarm_controller_api.py index d9b6e870..ee023157 100644 --- a/pe/tb_pe_client/api/alarm_controller_api.py +++ b/pe/tb_pe_client/api/alarm_controller_api.py @@ -4289,7 +4289,7 @@ def save_alarm( ) -> Alarm: """Create or Update Alarm (saveAlarm) - Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). + Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. The alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). :param alarm: A JSON value representing the alarm. (required) :type alarm: Alarm @@ -4361,7 +4361,7 @@ def save_alarm_with_http_info( ) -> ApiResponse[Alarm]: """Create or Update Alarm (saveAlarm) - Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). + Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. The alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). :param alarm: A JSON value representing the alarm. (required) :type alarm: Alarm @@ -4433,7 +4433,7 @@ def save_alarm_without_preload_content( ) -> RESTResponseType: """Create or Update Alarm (saveAlarm) - Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). + Creates or Updates the Alarm. When creating alarm, platform generates Alarm Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Alarm id will be present in the response. Specify existing Alarm id to update the alarm. Referencing non-existing Alarm Id will cause 'Not Found' error. Platform also deduplicate the alarms based on the entity id of originator and alarm 'type'. For example, if the user or system component create the alarm with the type 'HighTemperature' for device 'Device A' the new active alarm is created. If the user tries to create 'HighTemperature' alarm for the same device again, the previous alarm will be updated (the 'end_ts' will be set to current timestamp). If the user clears the alarm (see 'Clear Alarm(clearAlarm)'), than new alarm with the same type and same device may be created. Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Alarm entity. The alarm originator is an immutable routing key: when updating an existing alarm, the 'originator' in the request body must match the stored alarm's originator. A request that references an existing alarm id but carries a different originator is treated as a lookup miss and causes a 'Not Found' error. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for the entity (entities). :param alarm: A JSON value representing the alarm. (required) :type alarm: Alarm diff --git a/pe/tb_pe_client/api/entity_group_controller_api.py b/pe/tb_pe_client/api/entity_group_controller_api.py index bcb32a1c..1a4cce9a 100644 --- a/pe/tb_pe_client/api/entity_group_controller_api.py +++ b/pe/tb_pe_client/api/entity_group_controller_api.py @@ -10683,9 +10683,9 @@ def _share_entity_group_serialize( @validate_call def share_entity_group_to_child_owner_user_group( self, - entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], - user_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], - role_id: Annotated[StrictStr, Field(description="A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], + entity_group_id: Annotated[StrictStr, Field(description="ID of the entity group to share")], + user_group_id: Annotated[StrictStr, Field(description="ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers")], + role_id: Annotated[StrictStr, Field(description="ID of the group role that defines the set of operations to grant to the target user group")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10701,13 +10701,13 @@ def share_entity_group_to_child_owner_user_group( ) -> None: """Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup) - Share the entity group with specified user group using specified role. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group. + Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer. The following security checks are performed: * the target user group must belong to the current user's owner or to one of its sub-customers; * the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation; * the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers; * the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation). If the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - :param entity_group_id: A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param entity_group_id: ID of the entity group to share (required) :type entity_group_id: str - :param user_group_id: A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param user_group_id: ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers (required) :type user_group_id: str - :param role_id: A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param role_id: ID of the group role that defines the set of operations to grant to the target user group (required) :type role_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -10763,9 +10763,9 @@ def share_entity_group_to_child_owner_user_group( @validate_call def share_entity_group_to_child_owner_user_group_with_http_info( self, - entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], - user_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], - role_id: Annotated[StrictStr, Field(description="A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], + entity_group_id: Annotated[StrictStr, Field(description="ID of the entity group to share")], + user_group_id: Annotated[StrictStr, Field(description="ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers")], + role_id: Annotated[StrictStr, Field(description="ID of the group role that defines the set of operations to grant to the target user group")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10781,13 +10781,13 @@ def share_entity_group_to_child_owner_user_group_with_http_info( ) -> ApiResponse[None]: """Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup) - Share the entity group with specified user group using specified role. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group. + Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer. The following security checks are performed: * the target user group must belong to the current user's owner or to one of its sub-customers; * the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation; * the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers; * the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation). If the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - :param entity_group_id: A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param entity_group_id: ID of the entity group to share (required) :type entity_group_id: str - :param user_group_id: A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param user_group_id: ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers (required) :type user_group_id: str - :param role_id: A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param role_id: ID of the group role that defines the set of operations to grant to the target user group (required) :type role_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -10843,9 +10843,9 @@ def share_entity_group_to_child_owner_user_group_with_http_info( @validate_call def share_entity_group_to_child_owner_user_group_without_preload_content( self, - entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], - user_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], - role_id: Annotated[StrictStr, Field(description="A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], + entity_group_id: Annotated[StrictStr, Field(description="ID of the entity group to share")], + user_group_id: Annotated[StrictStr, Field(description="ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers")], + role_id: Annotated[StrictStr, Field(description="ID of the group role that defines the set of operations to grant to the target user group")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -10861,13 +10861,13 @@ def share_entity_group_to_child_owner_user_group_without_preload_content( ) -> RESTResponseType: """Share the Entity Group with User group (shareEntityGroupToChildOwnerUserGroup) - Share the entity group with specified user group using specified role. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. Security check is performed to verify that the user has 'WRITE' permission for specified group. + Share the entity group with the specified user group using the specified role. Unlike the 'shareEntityGroup' API method, this method is designed for sharing 'down' the owner hierarchy and does not require 'WRITE' permission for the shared entity group or the target user group. In particular, it allows the current user to re-share an entity group that was shared with them by the parent owner: for example, a customer user may re-share a tenant-owned dashboard group with a user group of their sub-customer. The following security checks are performed: * the target user group must belong to the current user's owner or to one of its sub-customers; * the current user must have the 'SHARE_GROUP' operation granted for the shared entity group: either as a generic permission for the corresponding entity group resource (applies only if the shared entity group belongs to the current user's owner hierarchy), or as a group permission created when the entity group was shared with the current user's user group using a group role that includes the 'SHARE_GROUP' operation; * the specified role must be a group role that is readable by the current user, so it must belong to the current user's owner or to one of its sub-customers; * the operations of the specified role must be a subset of the operations the current user was granted for the shared entity group (always passes if the current user was granted the 'ALL' operation). If the specified role also includes the 'SHARE_GROUP' operation, the members of the target user group will be able to re-share the entity group further down their own owner hierarchy in the same way. Available for users with 'TENANT_ADMIN' or 'CUSTOMER_USER' authority. - :param entity_group_id: A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param entity_group_id: ID of the entity group to share (required) :type entity_group_id: str - :param user_group_id: A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param user_group_id: ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers (required) :type user_group_id: str - :param role_id: A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9' (required) + :param role_id: ID of the group role that defines the set of operations to grant to the target user group (required) :type role_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request diff --git a/pe/tb_pe_client/client.pyi b/pe/tb_pe_client/client.pyi index 7c93adc4..5b371e79 100644 --- a/pe/tb_pe_client/client.pyi +++ b/pe/tb_pe_client/client.pyi @@ -257,9 +257,9 @@ class ThingsboardClient: def list_chats_with_http_info(self, chat_type: ChatType, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[object]: ... def list_chats_without_preload_content(self, chat_type: ChatType, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> RESTResponseType: ... def _list_chats_serialize(self, chat_type, _request_auth, _content_type, _headers, _host_index) -> RequestSerialized: ... - def send_chat_message(self, chat_id: UUID, x_authorization: StrictStr, body: StrictStr, accept_language: Optional[StrictStr] = ..., _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> List[object]: ... - def send_chat_message_with_http_info(self, chat_id: UUID, x_authorization: StrictStr, body: StrictStr, accept_language: Optional[StrictStr] = ..., _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[List[object]]: ... - def send_chat_message_without_preload_content(self, chat_id: UUID, x_authorization: StrictStr, body: StrictStr, accept_language: Optional[StrictStr] = ..., _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> RESTResponseType: ... + def send_chat_message(self, chat_id: UUID, x_authorization: StrictStr, body: Optional[Any], accept_language: Optional[StrictStr] = ..., _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> List[object]: ... + def send_chat_message_with_http_info(self, chat_id: UUID, x_authorization: StrictStr, body: Optional[Any], accept_language: Optional[StrictStr] = ..., _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[List[object]]: ... + def send_chat_message_without_preload_content(self, chat_id: UUID, x_authorization: StrictStr, body: Optional[Any], accept_language: Optional[StrictStr] = ..., _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> RESTResponseType: ... def _send_chat_message_serialize(self, chat_id, x_authorization, body, accept_language, _request_auth, _content_type, _headers, _host_index) -> RequestSerialized: ... def update_chat(self, chat_id: UUID, body: Optional[Any], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> None: ... def update_chat_with_http_info(self, chat_id: UUID, body: Optional[Any], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[None]: ... @@ -1557,9 +1557,9 @@ class ThingsboardClient: def share_entity_group_with_http_info(self, entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], share_group_request: ShareGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[None]: ... def share_entity_group_without_preload_content(self, entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], share_group_request: ShareGroupRequest, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> RESTResponseType: ... def _share_entity_group_serialize(self, entity_group_id, share_group_request, _request_auth, _content_type, _headers, _host_index) -> RequestSerialized: ... - def share_entity_group_to_child_owner_user_group(self, entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], user_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], role_id: Annotated[StrictStr, Field(description="A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> None: ... - def share_entity_group_to_child_owner_user_group_with_http_info(self, entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], user_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], role_id: Annotated[StrictStr, Field(description="A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[None]: ... - def share_entity_group_to_child_owner_user_group_without_preload_content(self, entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id that you would like to share. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], user_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity(User) Group Id that you would like to share with. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], role_id: Annotated[StrictStr, Field(description="A string value representing the Role Id that describes set of permissions you would like to share (read, write, etc). For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> RESTResponseType: ... + def share_entity_group_to_child_owner_user_group(self, entity_group_id: Annotated[StrictStr, Field(description="ID of the entity group to share")], user_group_id: Annotated[StrictStr, Field(description="ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers")], role_id: Annotated[StrictStr, Field(description="ID of the group role that defines the set of operations to grant to the target user group")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> None: ... + def share_entity_group_to_child_owner_user_group_with_http_info(self, entity_group_id: Annotated[StrictStr, Field(description="ID of the entity group to share")], user_group_id: Annotated[StrictStr, Field(description="ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers")], role_id: Annotated[StrictStr, Field(description="ID of the group role that defines the set of operations to grant to the target user group")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[None]: ... + def share_entity_group_to_child_owner_user_group_without_preload_content(self, entity_group_id: Annotated[StrictStr, Field(description="ID of the entity group to share")], user_group_id: Annotated[StrictStr, Field(description="ID of the user group to share the entity group with. The user group must belong to the current user's owner or to one of its sub-customers")], role_id: Annotated[StrictStr, Field(description="ID of the group role that defines the set of operations to grant to the target user group")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> RESTResponseType: ... def _share_entity_group_to_child_owner_user_group_serialize(self, entity_group_id, user_group_id, role_id, _request_auth, _content_type, _headers, _host_index) -> RequestSerialized: ... def unassign_entity_group_from_edge(self, edge_id: Annotated[StrictStr, Field(description="A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], group_type: Annotated[StrictStr, Field(description="EntityGroup type")], entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> EntityGroup: ... def unassign_entity_group_from_edge_with_http_info(self, edge_id: Annotated[StrictStr, Field(description="A string value representing the edge id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], group_type: Annotated[StrictStr, Field(description="EntityGroup type")], entity_group_id: Annotated[StrictStr, Field(description="A string value representing the Entity Group Id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], Tuple[ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)] ] ] = ..., _request_auth: Optional[Dict[StrictStr, Any]] = ..., _content_type: Optional[StrictStr] = ..., _headers: Optional[Dict[StrictStr, Any]] = ..., _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = ...) -> ApiResponse[EntityGroup]: ... diff --git a/pe/tb_pe_client/configuration.py b/pe/tb_pe_client/configuration.py index 431b466b..f0149622 100644 --- a/pe/tb_pe_client/configuration.py +++ b/pe/tb_pe_client/configuration.py @@ -227,7 +227,7 @@ def __init__( ) -> None: """Constructor """ - self._base_path = "http://localhost:8080" if host is None else host + self._base_path = "http://localhost:41237" if host is None else host """Default Base url """ self.server_index = 0 if server_index is None and host is None else server_index @@ -560,7 +560,7 @@ def get_host_settings(self) -> List[HostSetting]: """ return [ { - 'url': "http://localhost:8080", + 'url': "http://localhost:41237", 'description': "Generated server url", } ] diff --git a/pe/tb_pe_client/models/dashboard.py b/pe/tb_pe_client/models/dashboard.py index 07255b75..1c7b4a10 100644 --- a/pe/tb_pe_client/models/dashboard.py +++ b/pe/tb_pe_client/models/dashboard.py @@ -47,7 +47,7 @@ class Dashboard(BaseModel): assigned_customers: Optional[List[ShortCustomerInfo]] = Field(default=None, description="List of assigned customers with their info.", serialization_alias="assignedCustomers") mobile_hide: Optional[StrictBool] = Field(default=None, description="Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens.", serialization_alias="mobileHide") mobile_order: Optional[StrictInt] = Field(default=None, description="Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications", serialization_alias="mobileOrder") - configuration: Optional[Any] = None + configuration: Optional[Any] = Field(default=None, description="JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON.") resources: Optional[List[ResourceExportData]] = None version: Optional[StrictInt] = None __properties: ClassVar[List[str]] = ["id", "createdTime", "tenantId", "customerId", "ownerId", "title", "name", "image", "assignedCustomers", "mobileHide", "mobileOrder", "configuration", "resources", "version"] diff --git a/pe/tb_pe_client/models/dashboard_info.py b/pe/tb_pe_client/models/dashboard_info.py index 868f2af0..e02fade4 100644 --- a/pe/tb_pe_client/models/dashboard_info.py +++ b/pe/tb_pe_client/models/dashboard_info.py @@ -48,7 +48,7 @@ class DashboardInfo(BaseModel): assigned_customers: Optional[List[ShortCustomerInfo]] = Field(default=None, description="List of assigned customers with their info.", serialization_alias="assignedCustomers") mobile_hide: Optional[StrictBool] = Field(default=None, description="Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens.", serialization_alias="mobileHide") mobile_order: Optional[StrictInt] = Field(default=None, description="Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications", serialization_alias="mobileOrder") - configuration: Optional[Any] = None + configuration: Optional[Any] = Field(default=None, description="JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON.") resources: Optional[List[ResourceExportData]] = None version: Optional[StrictInt] = None groups: Optional[List[EntityInfo]] = Field(default=None, description="Groups") diff --git a/pe/tb_pe_client/models/home_dashboard.py b/pe/tb_pe_client/models/home_dashboard.py index 70235748..3c4b768c 100644 --- a/pe/tb_pe_client/models/home_dashboard.py +++ b/pe/tb_pe_client/models/home_dashboard.py @@ -47,7 +47,7 @@ class HomeDashboard(BaseModel): assigned_customers: Optional[List[ShortCustomerInfo]] = Field(default=None, description="List of assigned customers with their info.", serialization_alias="assignedCustomers") mobile_hide: Optional[StrictBool] = Field(default=None, description="Hide dashboard from mobile devices. Useful if the dashboard is not designed for small screens.", serialization_alias="mobileHide") mobile_order: Optional[StrictInt] = Field(default=None, description="Order on mobile devices. Useful to adjust sorting of the dashboards for mobile applications", serialization_alias="mobileOrder") - configuration: Optional[Any] = None + configuration: Optional[Any] = Field(default=None, description="JSON object with main configuration of the dashboard: layouts, widgets, aliases, etc. The JSON structure of the dashboard configuration is quite complex. The easiest way to learn it is to export existing dashboard to JSON.") resources: Optional[List[ResourceExportData]] = None version: Optional[StrictInt] = None hide_dashboard_toolbar: Optional[StrictBool] = Field(default=None, description="Hide dashboard toolbar flag. Useful for rendering dashboards on mobile.", serialization_alias="hideDashboardToolbar") diff --git a/pe/tb_pe_client/models/telemetry_observe_strategy.py b/pe/tb_pe_client/models/telemetry_observe_strategy.py index 256043e4..c52f8fc2 100644 --- a/pe/tb_pe_client/models/telemetry_observe_strategy.py +++ b/pe/tb_pe_client/models/telemetry_observe_strategy.py @@ -24,15 +24,15 @@ class TelemetryObserveStrategy(str, Enum): """ - TelemetryObserveStrategy + Observation strategy for telemetry. SINGLE (0): one resource equals one single observe request. COMPOSITE_ALL (1): all resources in one composite observe request. COMPOSITE_BY_OBJECT (2): grouped composite observe requests by object. """ """ allowed enum values """ - SINGLE_LEFT_PARENTHESIS_0_RIGHT_PARENTHESIS_COLON__ONE_RESOURCE_EQUALS_ONE_SINGLE_OBSERVE_REQUEST = 'SINGLE (0): One resource equals one single observe request' - COMPOSITE_ALL_LEFT_PARENTHESIS_1_RIGHT_PARENTHESIS_COLON__ALL_RESOURCES_IN_ONE_COMPOSITE_OBSERVE_REQUEST = 'COMPOSITE_ALL (1): All resources in one composite observe request' - COMPOSITE_BY_OBJECT_LEFT_PARENTHESIS_2_RIGHT_PARENTHESIS_COLON__GROUPED_COMPOSITE_OBSERVE_REQUESTS_BY_OBJECT = 'COMPOSITE_BY_OBJECT (2): Grouped composite observe requests by object' + SINGLE = 'SINGLE' + COMPOSITE_ALL = 'COMPOSITE_ALL' + COMPOSITE_BY_OBJECT = 'COMPOSITE_BY_OBJECT' @classmethod def from_json(cls, json_str: str) -> Self: